Du bist nicht angemeldet.

Werbeanzeige

ByteJunkie

Alter Hase

  • »ByteJunkie« ist der Autor dieses Themas

Beiträge: 834

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

1

15.04.2017, 15:40

Beschriftung der Modelle im Spiel

Hallo,

ich frage mich schon längere Zeit, wie man Modelle in Reichweite Beschriften kann. Ihr kennt das! Man läuft mit dem Spieler durch die 3D-Welt und sammelt alles ein, was einem irgendwie nützlich erscheint. Dazu wird über dem Objekt in Reichweite eine Schrift angezeigt!

In der Tribase kann man für die Schrift nur die X,Y Bildschirmkoordinaten angeben. Folglich müsste eine Umrechnung stattfinden, oder?

Grüße
»ByteJunkie« hat folgendes Bild angehängt:
  • Schrift.jpg
"Alles bleibt wie immer. :rolleyes: Wenn es nicht besser wird, wird es schlimmer!." :huh:

2

15.04.2017, 16:40

Stichwort Billboards...
Oder Text in eine Textur mit Alpha rendern, die Textur auf ein Quadrat/Plane klatschen, an die gewünschte Position bringen und rendern.
fka tm

Schorsch

Supermoderator

Beiträge: 5 199

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

3

15.04.2017, 18:14

Billboards sind hier schon das passende Stichwort. Wenn du den Text direkt auf dem Bildschirm ausgibst hast du nicht nur das Problem der Positionsbestimmung sondern musst auch selbst die passende Größe des Textes bestimmen. Durch ein Billboard hättest du das alles automatisch fertig.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

ByteJunkie

Alter Hase

  • »ByteJunkie« ist der Autor dieses Themas

Beiträge: 834

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

4

15.04.2017, 19:19

Cool,

danke! :) Ist ja easy! Das werde ich gleich mal über die Feiertage ausprobieren. ;)

Grüße
"Alles bleibt wie immer. :rolleyes: Wenn es nicht besser wird, wird es schlimmer!." :huh:

David Scherfgen

Administrator

Beiträge: 10 298

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

16.04.2017, 00:42

Kommt drauf an, was er möchte. Soll der Text immer gleich groß sein (in Pixeln) oder größer werden, je näher man herankommt?

ByteJunkie

Alter Hase

  • »ByteJunkie« ist der Autor dieses Themas

Beiträge: 834

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

6

16.04.2017, 08:04

Nee,

der Text bleibt gleich groß. Das Modell ändert seine Größe ja auch nicht. ;)

Alles prima, Danke! :)
"Alles bleibt wie immer. :rolleyes: Wenn es nicht besser wird, wird es schlimmer!." :huh:

Schorsch

Supermoderator

Beiträge: 5 199

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

7

16.04.2017, 14:24

David redet von Perspektive. Hast du ein Modell auf der Karte und bewegst dich auf dieses zu so wird das Modell relativ zum Bildschirm gesehen größer. Er fragt nun ob der Text passend mit skalieren soll, so als ob sich der Text wirklich an dem Modell befindet, oder ob der Text immer die selbe Größe beibehalten soll. In letzterem Fall würdest du dann vermutlich tatsächlich einfach vom Weltkoordinaten auf Bildschirmkoordinaten umrechnen und den Text im Screenspace rendern.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

ByteJunkie

Alter Hase

  • »ByteJunkie« ist der Autor dieses Themas

Beiträge: 834

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

8

16.04.2017, 16:04

Hey,

ich fand den Vorschlag von TrikkieMikkie eigentlich soweit ganz gut. :)

Stichwort Billboards...
Oder Text in eine Textur mit Alpha rendern, die Textur auf ein Quadrat/Plane klatschen, an die gewünschte Position bringen und rendern.


Allerdings gibt es in der Tribase keine Funktion, die auf eine Textur schreibt, sondern nur zum Malen auf die Textur. Ich dachte es genügt ein Panel mit Textur das man für alle Modelle wieder verwenden kann. ;)

Kann ich dazu vielleicht die DrawTransformedText Funktion verwenden?

Ich stell mir das so vor.
1. Das Panel jeweils über einem, dem Spieler am nächsten liegendes Modell positionieren.
2. Den entsprechenden Text auf die Textur des Panels schreiben und rendern.
3. Wenn der Spieler das Modell passiert hat und ein anderes näher ist,
4. den Text auf dem Panel löschen.
5. Neu positionieren!
6. Den entsprechenden Text auf die Textur des Panels schreiben und rendern usw.

Oder läuft es tatsächlich darauf hinaus für jedes Modell ein eigenes Beschriftungspanel an zu fertigen? :huh:

Grüße
"Alles bleibt wie immer. :rolleyes: Wenn es nicht besser wird, wird es schlimmer!." :huh:

9

16.04.2017, 17:38

Sieht doch soweit ganz gut aus, deine Planung...
Neben dem Positionieren musst du halt noch dafür sorgen, dass dein Panel der Kamera/dem Betrachter - wie bei Billboards üblich - immer entsprechend zugewandt ist.
Sonst wäre es spiegelverkehrt, von der Seite nicht sichtbar usw...
Keine Ahnung, wie David das mit dem RenderToTexture-Gedöns in der TriBase gelöst hat (hab das Teil schon seit Ewigkeiten nicht mehr "in der Hand gehabt"),
sollte aber mit Text schreiben (Rendern) genauso funktionieren. Im Zweifel selbst eine Funktion oder Klasse dafür schreiben.
Somit hättest du ein wiederverwendbares Panel, mit dem sich ändernden Text als Variable, bzw. Parameter.
fka tm

ByteJunkie

Alter Hase

  • »ByteJunkie« ist der Autor dieses Themas

Beiträge: 834

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

10

17.04.2017, 09:48

Danke Trikkie Mikkie,

das mit der Kameraausrichtung ist mir schon klar.

@David und Schorsch

Danke auch Euch! So wie ich das verstehe gibt es 2 Möglichkeiten. Entweder die Sache mit dem Panel und der Alpha-Textur oder, wie ich vermute, die DrawTransformedText Funktion von David mit einer Matrix und einer Skalierung der Schriftgröße.

Allerdings stelle ich mir das ständige Skalieren und Anpassen schwierig vor.

@David
Wenn ich die DrawTransformedText Funktion dazu benutzen würde, müsste die Position des Modells und die Skalierung auf den Bildschirm umgerechnet werden. Da müsste ich doch auch noch die Entfernung zum Spieler berechnen, oder? Letzteres gibt es ja schon im Galactica Code.

Wenn sich das Modell an der absoluten Position x = 12000.0f, y = 70.0f und z = 24000.0f befindet und die Schrift darüber erscheinen soll, könntest Du mir da vielleicht einen Beispielcode zeigen? Bildschirm von mir aus 1024x768. Von mir aus auch erst mal ohne Skalierung. Oder liege ich jetzt ganz daneben?
"Alles bleibt wie immer. :rolleyes: Wenn es nicht besser wird, wird es schlimmer!." :huh:

Werbeanzeige