Mit Draw3D 3D-Text zeichnen
Übersicht BlitzBasic Blitz3D
MegamagBetreff: Mit Draw3D 3D-Text zeichnen |
So, Mai 02, 2010 20:31 Antworten mit Zitat |
|
---|---|---|
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 |
ChriseBetreff: Re: Mit Draw3D 3D-Text zeichnen |
So, Mai 02, 2010 20:34 Antworten mit Zitat |
|
---|---|---|
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 |
So, Mai 02, 2010 20:40 Antworten mit Zitat |
|
---|---|---|
Die habe ich bereits, aber ich weiß leider trotzdem nicht, welches Kommando ich benutzen muss | ||
Mein DeviantArt Profil
Gewinner des BAC #136 |
Chrise |
So, Mai 02, 2010 20:41 Antworten mit Zitat |
|
---|---|---|
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 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 |
||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
Silver_Knee |
So, Mai 02, 2010 21:19 Antworten mit Zitat |
|
---|---|---|
wie man eine 2D Koord in eine 3D Koordinate umrechnet sieht man bei der berechnung von MouseX/Mousey3d in Clear3D | ||
BadDeath |
So, Mai 02, 2010 21:23 Antworten mit Zitat |
|
---|---|---|
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 |
So, Mai 02, 2010 21:29 Antworten mit Zitat |
|
---|---|---|
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 |
Chrise |
So, Mai 02, 2010 21:33 Antworten mit Zitat |
|
---|---|---|
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! |
||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
Silver_Knee |
So, Mai 02, 2010 21:57 Antworten mit Zitat |
|
---|---|---|
du kannst ja auch den 2. Pivot nutzen der unabhängig von der kamera ist | ||
hecticSieger des IS Talentwettbewerb 2006 |
So, Mai 02, 2010 23:49 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Mai 03, 2010 17:24 Antworten mit Zitat |
|
---|---|---|
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 |
hecticSieger des IS Talentwettbewerb 2006 |
Mo, Mai 03, 2010 18:18 Antworten mit Zitat |
|
---|---|---|
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 |
Übersicht BlitzBasic Blitz3D
Powered by phpBB © 2001 - 2006, phpBB Group