#1 04.06.2012 19:31:25

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

Text in Direct3D

Wie geht man in einem Spiel am besten mit Text um?

Wenn der User z.B. seinen Namen eingeben darf, oder allgemein Hilfe-Texte angezeigt werden. Wie rendert man den/stellt man den dar?

1. ID3DXFont.
2. 3D-Objekt erzeugen mit D3DXCreateText
3. Vordefinierte Texte in einem Bild mitliefern (ist natürlich unflexibel).
4. Einen Zeichensatz als Bild mitliefern und daraus zur Laufzeit einen Text basteln.
  a.) Mit einem Quad pro Buchstaben
  b.) komplett in eine Textur rendern/übertragen und dann nur noch als Rechteck rendern.

Im Moment sieht 4a für mich am besten aus. Das Problem ist, dass man sich nicht auf installierte Schriftarten verlassen kann, und eine mitliefern hab ich irgendwie noch nicht geschafft (und Arial ist langweilig).

Kann man das noch anders machen?

Danke

DerPeer

Offline

 

#2 04.06.2012 21:24:56

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Text in Direct3D

Ich denke mal 2 fällt aufgrund von Overhead und schlechter Performance schonmal raus. 3 ist furchtbar zu warten und wenns ans Lokalisieren geht wächst das Grauen nur noch mehr wink Die populärsten Weg sind 1 und 4. Weg 1 hab ich die Erfahrung gemacht, dass es bei viel Text recht fressend ist. Da könnt man große Hilfetexte oder so dann mit 4b abfangen, wenn mans braucht. Aber dafür ist es sehr flexibel und hat wirklich scharfe Buchstaben. Bei 4a ist der Vorteil das man auch schöne Effekte auf seiner Schrift haben kann, aber ist ein wenig aufwendig zu basteln vor allem wenn man so Feinheiten haben möchte wie das beim dem Wort "Text" das e ein wenig unter dem T gerückt ist. Und man muss es halt basteln im Gegensatz zu 1.

Daher würd ich sagen für den Anfang macht sich 1. am besten. (ich nutz es bisher auch wink )

Wenn du Probleme damit hast, dass die Schriftart nicht auf dem System ist kannst du die Schriftart auch mitliefern. Ich habe sie immer als Ressource in die Exe eingefügt und dann zu Programmstart temporär im System installiert und mit Programmende wird sie wieder deinstalliert (oder mit dem nächsten Neustart, falls das Prog abschmiert). Man kann sei auch Programmexklusiv machen, dann sieht man sie nicht in Word und so. Hab dafür folgenden Code genutzt:

Code: delphi

//beim Programmstart
...
var stream: tresourcestream;
    fontanzahl:cardinal;
begin
  stream:=tresourcestream.createfromid(hinstance,1,rt_font);
  fontanzahl:=1;
  fonthandle:=addfontmemresourceex(stream.memory,stream.size,0,@fontanzahl);
  stream.free;
  sendmessage(hwnd_broadcast, wm_fontchange, 0, 0);
  application.processmessages;
...

//beim Programmende
...
  if removefontmemresourceex(fonthandle) then
    sendmessage(hwnd_broadcast, wm_fontchange, 0, 0);
...


Andere Arten Text darzustellen kenn ich nicht smile

MfGnietschow


Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#3 05.06.2012 20:20:34

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

Re: Text in Direct3D

Oh danke für deinen Code. Dennoch werde ich wohl 4a verfolgen. 1 ist wirklich langsam und es ist irgendwie immer unklar, ob es auf verschiedenen Computern gleich aussieht.

Die fehlende Unterschneidung der Buchstaben ist natürlich eine Einschränkung, aber damit kann ich denke ich leben - hängt ja auch vom Schriftsatz ab.

DerPeer

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson