CameraProject für Draw3D

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Chrise

Betreff: CameraProject für Draw3D

BeitragDo, Jan 14, 2010 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!
Ich habe eine kleine Userlib für Draw3D-benutzer geschrieben.
Ganz einfach:
CameraMouse3D funktioniert wie Cameraproject, gibt allerdings anstatt die normalen Bildschirmkoordinaten die Komma-genauen Draw3D Koordinaten aus.
Die Werte werden wie ProjectedX(),usw. in MouseX3DScreen#,MouseY3DScreen# und MouseZ3DScreen gespeichert. Negative Werte für MouseZ3DScreen geben an, dass sich das Objekt hinter der Kamera befindet.

Die zweite Funktion CameraCoords3D funktioniert umgekehrt. Man gibt die Camera, die beiden Draw3D-Bildschirm-koordinaten und den gewünschten Abstand zur Kameraleinwand an. Man erhält schließlich die globalen Weltkoordinaten. Diese werden in Mouse3DRealX#,"Y#,"Z# gespeichert. Nützlich wird diese Funktion bei Draw3D2 sein, welche aber erst noch erscheint Wink

BlitzBasic: [AUSKLAPPEN]

Const Screen3DWidth=640
Global ProjectedX3D#,ProjectedY3D#,ProjectedZ3D#
Global MouseGraphicsX=GraphicsWidth(),MouseGraphicsY=GraphicsHeight()
Global MouseGraphicsXHalf=MouseGraphicsX/2,MouseGraphicsYHalf=MouseGraphicsY/2
Function CameraMouse3D(Camera,X#,Y#,Z#)
TFormPoint X#,Y#,Z#,0,Camera
ProjectedX3D#=TFormedX()/TFormedZ()*Screen3DWidth
ProjectedY3D#=TFormedY()/TFormedZ()*Screen3DWidth
ProjectedZ3D#=Sgn(TFormedZ())
End Function
Function CameraCoords3D(Camera,ScreenX#,ScreenY#,Z#)
TFormPoint (ScreenX#*Z#)/Screen3DWidth,(ScreenY#*Z#)/Screen3DWidth,Z#,Camera,0
ProjectedX3D#=TFormedX()
ProjectedY3D#=TFormedY()
ProjectedZ3D#=TFormedZ()
End Function


Hier noch ein kleines Beispiel-programm:
BlitzBasic: [AUSKLAPPEN]

Const Screen3DWidth=640
Global ProjectedX3D#,ProjectedY3D#,ProjectedZ3D#
Global MouseGraphicsX=GraphicsWidth(),MouseGraphicsY=GraphicsHeight()
Global MouseGraphicsXHalf=MouseGraphicsX/2,MouseGraphicsYHalf=MouseGraphicsY/2
Function CameraMouse3D(Camera,X#,Y#,Z#)
TFormPoint X#,Y#,Z#,0,Camera
ProjectedX3D#=TFormedX()/TFormedZ()*Screen3DWidth
ProjectedY3D#=TFormedY()/TFormedZ()*Screen3DWidth
ProjectedZ3D#=Sgn(TFormedZ())
End Function
Function CameraCoords3D(Camera,ScreenX#,ScreenY#,Z#)
TFormPoint (ScreenX#*Z#)/Screen3DWidth,(ScreenY#*Z#)/Screen3DWidth,Z#,Camera,0
ProjectedX3D#=TFormedX()
ProjectedY3D#=TFormedY()
ProjectedZ3D#=TFormedZ()
End Function

Graphics3D 640,480,0,2
SetBuffer BackBuffer()

Local Camera=CreateCamera()
Local Light=CreateLight()
RotateEntity Light,90,0,0

Local Cube=CreateCube()
RotateEntity Cube,20,50,50
PositionEntity Cube,0,0,5

Local Angle#

While Not KeyHit(1)

Angle#=(Angle#+2) Mod 360
PositionEntity Cube,Cos(Angle#)*2,Sin(Angle#)*2,5

CameraProject3D(Camera,EntityX(Cube),EntityY(Cube),EntityZ(Cube))

RenderWorld

Text 50,50,Int(ProjectedX3D)+"..."+Int(ProjectedY3D)

Flip
Wend




Ich hoffe es finden sich ein paar, die das nützlich finden Smile


Grüße,
Chrise
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.
  • Zuletzt bearbeitet von Chrise am Fr, Jan 15, 2010 19:36, insgesamt 2-mal bearbeitet

Mr.Keks

BeitragDo, Jan 14, 2010 22:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Tipp [auch, wenn das hier das Codearchiv ist]: TFormPoint macht ziemlich genau das, was du da mit den Pivots gehackt hast Wink.
MrKeks.net

Chrise

BeitragFr, Jan 15, 2010 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh ja, stimmt Mr.Keks! Vielen Dank, habs ausgebessert Smile
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group