3D-Vertexkoordinate auf 2D umrechnen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

hectic

Sieger des IS Talentwettbewerb 2006

Betreff: 3D-Vertexkoordinate auf 2D umrechnen

BeitragMi, Feb 25, 2009 2:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte wissen welche globale Koordinaten ein Vertexpunkt hat wärend das Mesh (mit dem Vertex) als Parent an ein anderem Objekt hängt.

Oder noch besser, welche 2D-Bildschirmkoordinate das Vertex einnimmt und ob es überhaupt im Sichtbereich der Kamera liegt.

Leider liefert VertexX/Y/Z nur die Parentkoordinate und nicht die Weltkoordinate, welche für CameraProject benötigt wird.

Im folgendem Code sollte das kleine weiße Rechteck der roten 3D-Pfeilspitze folgen, was es nicht tut:

Code: [AUSKLAPPEN]
Graphics3D 1024,768,0,2
SetBuffer BackBuffer()

Local Timer=CreateTimer(60)
Local Camera=CreateCamera()
Local Light=CreateLight()
Local Cube=CreateCube()

RotateEntity Light,40,-40,0
PositionEntity Cube,0,0,4
EntityAlpha Cube,0.2

Local Mesh=CreateMesh(Cube)
Local Face=CreateSurface(Mesh)
Local V0=AddVertex(Face,-1,+1,+1)
Local V1=AddVertex(Face,+1,+1,-1)
Local V2=AddVertex(Face,+1,-1,-1)
VertexColor Face,V0,255,0,0,0.2 ;V0=Rote-Pfeilspitze
VertexColor Face,V1,255,255,0,0 ;Restliche-Vertices
VertexColor Face,V2,255,255,0,0 ;Restliche-Vertices
AddTriangle(Face,V0,V1,V2)
EntityFX Mesh,1+2+16+32

Local XP#,YP#




While Not KeyHit(1)
   
   If KeyDown(203) Then TranslateEntity Cube,-0.1,0,0
   If KeyDown(205) Then TranslateEntity Cube,+0.1,0,0
   If KeyDown(200) Then TurnEntity Camera,-1,0,0
   If KeyDown(208) Then TurnEntity Camera,+1,0,0
   
   TurnEntity Cube,0,1,0
   
   WaitTimer Timer
   RenderWorld
   
   CameraProject Camera,VertexX(Face,V0),VertexY(Face,V0),VertexZ(Face,V0)
   XP=512+ProjectedX()
   YP=384-ProjectedY()
   
   Rect XP-3,YP-3,7,7,0
   
   Text 20,20,"Cursor Links/Rechts : Cube seitlich verschieben"
   Text 20,40,"Cursor Hoch/Runter : Camera Höhenschwenken"
   
   Flip 0
Wend
End


Kennt da vielleicht jemand die Rätzelslösung?
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Xeres

Moderator

BeitragMi, Feb 25, 2009 2:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Mh... TFormPoint Wink

Code: [AUSKLAPPEN]
Graphics3D 1024,768,0,2
SetBuffer BackBuffer()

Local Timer=CreateTimer(60)
Local Camera=CreateCamera()
Local Light=CreateLight()
Local Cube=CreateCube()

RotateEntity Light,40,-40,0
PositionEntity Cube,0,0,4
EntityAlpha Cube,0.2

Local Mesh=CreateMesh(Cube)
Local Face=CreateSurface(Mesh)
Local V0=AddVertex(Face,-1,+1,+1)
Local V1=AddVertex(Face,+1,+1,-1)
Local V2=AddVertex(Face,+1,-1,-1)
VertexColor Face,V0,255,0,0,0.2 ;V0=Rote-Pfeilspitze
VertexColor Face,V1,255,255,0,0 ;Restliche-Vertices
VertexColor Face,V2,255,255,0,0 ;Restliche-Vertices
AddTriangle(Face,V0,V1,V2)
EntityFX Mesh,1+2+16+32

Local XP#,YP#




While Not KeyHit(1)
   
   If KeyDown(203) Then TranslateEntity Cube,-0.1,0,0
   If KeyDown(205) Then TranslateEntity Cube,+0.1,0,0
   If KeyDown(200) Then TurnEntity Camera,-1,0,0
   If KeyDown(208) Then TurnEntity Camera,+1,0,0
   
   TurnEntity Cube,0,1,0
   
   WaitTimer Timer
   RenderWorld
   
   TFormPoint(VertexX(Face,V0),VertexY(Face,V0),VertexZ(Face,V0), Mesh, 0)
   
   CameraProject(Camera, TFormedX(), TFormedY(), TFormedZ())
   XP=ProjectedX()
   YP=ProjectedY()
   
   Rect XP-3,YP-3,7,7,0
   
   Text 20,20,"Cursor Links/Rechts : Cube seitlich verschieben"
   Text 20,40,"Cursor Hoch/Runter : Camera Höhenschwenken"
   
   Flip 0
Wend
End
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Feb 25, 2009 2:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja! Das ist ja mal geil, danke...

Funktioniert nun bestens!

P.S.

Um einen Kameraschwenk mit zu berücksichtigen muß der letzte Parameter ''0'' statt ''Camera'' sein.

Code: [AUSKLAPPEN]
TFormPoint(VertexX(Face,V0),VertexY(Face,V0),VertexZ(Face,V0), Mesh, 0)
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