Das "Geheimnis" ist, dass du ja vorher die Koordinaten aus 3D in 2D umrechnest, also
hast du auch die nötigen Z-Werte.
Hab mal nen kleinen Code geschrieben, der das veranschaulicht:
Code: Alles auswählen
InitSprite()
InitSprite3D()
InitKeyboard()
OpenScreen(800, 600, 32, "")
s2D = CreateSprite(#PB_Any, 64, 64, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(s2D))
Box(0, 0, 64, 64, RGB(50, 50, 200))
For I = 0 To 5
Line(2, I*10, 64, 0, RGB(255, 255, 255))
Line(I*10, 2, 0, 64, RGB(255, 255, 255))
Next
StopDrawing()
s3D = CreateSprite3D(#PB_Any, s2D)
ScreenMidX = 400
ScreenMidY = 300
z1 = 2
z2 = 4
z3 = 4
z4 = 2
x1 = ScreenMidX - (400 / z1)
y1 = ScreenMidY + (300 / z1)
x2 = ScreenMidX - (400 / z2)
y2 = ScreenMidY - (300 / z2)
x3 = ScreenMidX + (400 / z3)
y3 = ScreenMidY - (300 / z3)
x4 = ScreenMidX + (400 / z4)
y4 = ScreenMidY + (300 / z4)
Repeat
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Space)
WithZValues = (1 - WithZValues)
EndIf
ClearScreen(0, 0, 0)
Start3D()
If (WithZValues = 1)
;MIT z-Werten
TransformSprite3D(s3D, x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4)
Else
;Ohne z-Werte
TransformSprite3D(s3D, x1, y1, 1, x2, y2, 1, x3, y3, 1, x4, y4, 1) ;1=Standard = alle z-Werte gleich
EndIf
DisplaySprite3D(s3D, 0, 0)
Stop3D()
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(255, 255, 255)
Locate (20, 20): DrawText("[SPACE] = Switch with/without Z-Values")
StopDrawing()
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
Probiert mal mit den 4 Z-Werten rum, die ja nur die Entfernung zur Kamera angeben...