
PS: habe erst mal aus der Winterlandschaft ne Wüste mit Kaktenen gemacht

danke für die frage wollte ich auch drauf kommen !ZeHa hat geschrieben:Danke für die kurze Beschreibung, aber wie realisierst Du das mit den Sprite3D-Befehlen?!
...ein Sprite3D ist nur ein 4-Punkt-Polygon...Viele Kollegen hat geschrieben:... wie realisierst Du das mit den Sprite3D-Befehlen?!
ja ja aber wenn ich mit TransformSprite3D verzerrt es sich und mit ZoomSpirte3D aleine geht es nicht . mmmmKaeru Gaman hat geschrieben:...ein Sprite3D ist nur ein 4-Punkt-Polygon...Viele Kollegen hat geschrieben:... wie realisierst Du das mit den Sprite3D-Befehlen?!
geradezu prädestiniert für die klassische landschaftsdarstellung...
früher hat man sowas händisch proggen müssen, und ahnung von matritzenrechnung haben...
mit Sprite3D ist das schon viel einfacher...
Doch, das geht. Der Wunderbefehl, dessen Potenzial die meisten PBler leider nicht kennen,STARGÅTE hat geschrieben:... denn NUR mit Sprite3D-Befehlen geht das nicht so einfach
ist ja klar das es mit TransformSprite3D() geht aber mein problem ist :Ypser hat geschrieben:Doch, das geht. Der Wunderbefehl, dessen Potenzial die meisten PBler leider nicht kennen,STARGÅTE hat geschrieben:... denn NUR mit Sprite3D-Befehlen geht das nicht so einfach
heisst TransformSprite3D(). Alles andere ist Mathematik, bei der mir damals übrigens TomCat
(kennt ihr vll. aus dem engl. Forum) geholfen hat. Von ihm war die "PureRacerDemo".
Die Schattierung erledigt eine Procedure, die Danilo vor einiger Zeit geschrieben hat,
als es um TransformSprite3D() ging. Ich hatte damals an einer Grafik-Engine für Rennspiele gearbeitet,
und eine Diskussion über die Einsatzfähigkeit des aktuellen TransformSprite3D() angestossen,
aus der die 4 optionalen Z-Parameter hervorgingen. Dadurch wurden solche Projekte eigentlich
erst möglich (mit Sprite3Ds).![]()
Diese Z-Parameter ermöglichen korrekte Verzerrungen, wenn man die Werte entsprechend berechnet.
Und ja, man kann die für "Punkte" absolut frei platzieren. Der DisplaySprite3D()-Befehl
bekommt am Ende als X/Y-Parameter nur 0,0.
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)