Mit Draw3D 3D-Text zeichnen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Megamag

Betreff: Mit Draw3D 3D-Text zeichnen

BeitragSo, Mai 02, 2010 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hört sich einfach an und ist es wohl auch, aber ich komme da nicht auf eine Lösung.
Es geht darum, dass ich mit der Draw3D Text zeichnen will, der sich im 3D Raum platzieren lässt, so wie ein Sprite. Meine bisherigen Versuche sind leider gescheitert, da ich mit "Text3D" irgendwie nicht in einen TextureBuffer zeichnen kann. CameraProject geht auch nicht, da Draw3D ja nicht das 2D-Koordinatensystem benutzt. Gibt es da irgenein Kommando oder einen Kniff, mit dem man das anders bewerkstelligen kann?

,-Megamag

PS:
Der Text muss nicht wie ein Sprite gedreht werden können, sondern schaut immer zur Kamera und soll nur skaliert werden.
Mein DeviantArt Profil
Gewinner des BAC #136

Chrise

Betreff: Re: Mit Draw3D 3D-Text zeichnen

BeitragSo, Mai 02, 2010 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit ich weiß geht das nur mit Draw3D2. Frag am besten mal hectic.
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Megamag

BeitragSo, Mai 02, 2010 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Die habe ich bereits, aber ich weiß leider trotzdem nicht, welches Kommando ich benutzen muss Embarassed
Mein DeviantArt Profil
Gewinner des BAC #136

Chrise

BeitragSo, Mai 02, 2010 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
heißt der Befehl dann nicht sogar DrawText4d?
Ich bin mir grade nicht sicher, aber Dinge die mitten in der Welt positioniert werden sollen sind normalerweise mit 4D gekennzeichnet Wink

EDIT: ah ne, da war ein beispiel mit einer funktion die noch in Arbeit war. Und damit konnte man nen 3D Text auf die Textur zeichnen lassen. Dann könnte man den Text per DrawImage4D zeichnen Smile
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Silver_Knee

BeitragSo, Mai 02, 2010 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
wie man eine 2D Koord in eine 3D Koordinate umrechnet sieht man bei der berechnung von MouseX/Mousey3d in Clear3D
 

BadDeath

BeitragSo, Mai 02, 2010 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn der Text immer zu Kamera guckt, dann kannst du das doch so machen, dass du mit ProjectedX/Y die 2D-Koordinaten, die in das Draw3D-System umrechnest und den Text dort entsprechend skaliert (z.B. in Abhängigkeit von EntityDistance(Kamera, Objekt)) hinschreibst.
So habe ich das mal gemacht, um die Plantennamen in einem Sonnensystem anzuzeigen.
-~= real coders just code in binary =~-

skey-z

BeitragSo, Mai 02, 2010 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Zunächst lädst du mit d3dFont=LoadFont3D("gfx/standard.png, 2, 2) den Font

danacht musst du nur noch Text3D(d3dFont, 0, 0, "Hallo"), dann wird der Text genau in der Mitte des Bildschirms gezeichnet.

Als letztes muss auf jedenfall Clear3D() ausgeführt werden
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Chrise

BeitragSo, Mai 02, 2010 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
skey-z hat Folgendes geschrieben:
dann wird der Text genau in der Mitte des Bildschirms gezeichnet.


er will ja nicht den Text in der Mitte des Bildschirmes anzeigen lassen, sondern in der Mitte des Raumes! Wink
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Silver_Knee

BeitragSo, Mai 02, 2010 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
du kannst ja auch den 2. Pivot nutzen der unabhängig von der kamera ist

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Mai 02, 2010 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Die letzten Versionen der Draw3D2 hatten bereits zwei Funktionen:
CameraProjectEntity3D( handle, adding )
CameraProjectCoords3D( x, y, z, adding )

Beide projezieren Raumkoordinaten auf 2D um, die sich dann über die globalen Variablen:
ProjectedX3D
ProjectedY3D

verwenden lassen. Beide Funktionen liefern ein True zurück, wenn sich die Koordinate im Sichrbarkeitsbereich der Kamera befindet. Wobei der erste Befehl (Entity) die Position eines Entities benutzt, und bei (Coords) man die Raumkoordinaten selbst angeben muß. Das adding fügt der Bildschirmgröße entsprechend ''Pixel'' hinzu. So kann man den Sichtbarkeitsbereich entsprechend vergrößern, um zu vermeiden dass zum Beispiel ein Lens-Flare-Effekt zu plötzlich aufpoppt, oder Text gleich über den Rand hinweg verschwindet.

Falls du sie noch nicht hast:
Code: [AUSKLAPPEN]
Global ProjectedX3D%=0
Global ProjectedY3D%=0

Function CameraProjectEntity3D(FDrawHandle%,FDrawAdding%=0)
   
   
   
   
   ;ERWEITERUNG/DER/IDEE/VON: 'Chrise'
   CameraProject GDrawCamera,EntityX(FDrawHandle,1),EntityY(FDrawHandle,1),EntityZ(FDrawHandle,1)
   ProjectedX3D=(ProjectedX()-GDrawXSize)/GDrawXScale
   ProjectedY3D=(GDrawYSize-ProjectedY())/GDrawYScale
   
   ;PRÜFUNG/AUF/SICHTBARKEIT
   If ProjectedZ()<>0 Then
      If Abs(ProjectedX3D)-FDrawAdding<GDrawXSize/GDrawXScale Then
         If Abs(ProjectedY3D)-FDrawAdding<GDrawYSize/GDrawYScale Then
            Return 1
         End If
      End If
   End If
   
   
   
   
End Function

Function CameraProjectCoords3D(FDrawXP#,FDrawYP#,FDrawZP#,FDrawAdding%=0)
   
   
   
   
   ;ERWEITERUNG/DER/IDEE/VON: 'Chrise'
   CameraProject GDrawCamera,FDrawXP,FDrawYP,FDrawZP
   ProjectedX3D=(ProjectedX()-GDrawXSize)/GDrawXScale
   ProjectedY3D=(GDrawYSize-ProjectedY())/GDrawYScale
   
   ;PRÜFUNG/AUF/SICHTBARKEIT
   If ProjectedZ()<>0 Then
      If Abs(ProjectedX3D)-FDrawAdding<GDrawXSize/GDrawXScale Then
         If Abs(ProjectedY3D)-FDrawAdding<GDrawYSize/GDrawYScale Then
            Return 1
         End If
      End If
   End If
   
   
   
   
End Function


Angewendet sieht es dann in etwa so aus:
Code: [AUSKLAPPEN]
If CameraProjectEntity3D(c,32) Then Text3D(Font,ProjectedX3D,ProjectedY3D,"· Moon 44",0)


- - -

Falls der Text nicht zur Kamera gerichtet werden soll, also wie ein Schild in der Gegend steht. Dann setz ein Pivot in deine Welt und lade ein Font und beziehe diesen Pivot als Bezug darauf. Danach kannst du einfach über dieses Fonthandle den Text über 2D-Koordinaten festlegen.

Edit1: Ich hab morgen wegen Schichtbetrieb noch frei. Vielleicht finde ich Zeit das ganze dann hoch zu laden. In den letzten Monaten bin ich kaum noch dazu gekommen die Draw3D2 weiter zu machen. Bzw. die Draw3D2 selbst ist fertig, doch ich wollte die ganzen Editoren noch fertig haben. Dann eben nur der Bumpmap-Editor (BMC) und Partikel-Editor (SED). Die anderen beiden für Physik und der eine für die GUI bleiben dann weg und werden ggf. nachgeliefert.

Megamag

BeitragMo, Mai 03, 2010 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank!
Ich habe mich für die Pivot-Methode entschieden. Allerdings gibt es da ein Problem:
Ich lade das ganze so:
Code: [AUSKLAPPEN]
p\healthpiv=CreatePivot()
p\healthfont=FontRange3D(LoadImage3D("data\gfx\KarmaticArcade(3os4p).png",2,2,p\healthpiv,0))
PositionEntity p\healthpiv,0,5,0


Dann zeichne ich es so:
Code: [AUSKLAPPEN]
SetFont3D p\healthfont,0.03
Text3D p\healthfont,0,0,"TextTest :P",1


Das Problem dabei ist, dass ich die Schrift sehr klein skalieren muss. Bis zu einer Skalierung von 0.03 sieht es noch normal aus, gehe ich darunter, skaliert sich nur noch die Breite der Schrift, nicht mehr die Höhe, dadurch sieht der Text seltsam verzerrt aus. Habe ich da irgendetwas falsch gemacht?
Mein DeviantArt Profil
Gewinner des BAC #136

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 03, 2010 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist mir bekannt. Skallier das Pivot statt den Text.

Hab dazu noch keine Lösung gefunden.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group