Sebe hat geschrieben:Nice!
Wie genau hast du das denn nun gemacht?
Also hier erst mal der Code
Kann sein das er bei dir/euch nicht mehr geht weil er mit 3.3 geschrieben ist oder das manche dinge überflüssig sind.
Das ist der Ansatz für die Kugel ich habe noch andere dinge hinzugefügt.
Wie schon gesagt, Licht, Effekte, ...
1. Bild laden und in kleine Quadrate teilen und diese als Sprite3D laden.
2. gleichmäßig die Punkte der Bild platzieren (360° um die Kugel und dann vom Äquator jeweils 90°) also ist es noch ein Rechteck.
3. Immer 4 Punkte für die Kugel berechnen und ein Sprite3D transformen.
Wenn ich dir die Formel da unten noch mal erläutern soll sag bescheid
Code: Alles auswählen
InitSprite()
InitSprite3D()
InitKeyboard()
OpenScreen(1024, 768, 32, "Kugel")
Structure P
Px.l
Py.l
x.f
y.f
EndStructure
NewList P.P()
Procedure Punkt(Px, Py, x.f, y.f)
AddElement(P())
P()\Px = Px ; X-Sprite (0..36)
P()\Py = Py ; Y-Sprite (0..18)
P()\x = x ; Winkel ( 0 .. 3600 )
P()\y = y ; Höhe ( -r .. r )
EndProcedure
b.f = 3.14159265/180 ; Bogenmaß
Poly = 12 ; Anzahl der Polygone durch 96
r.l = 200 ; Radius der Kugel in Pixel
q.f = 36/Poly/4*10 ; Konstante für später
Sprite$ = "textur_mond.bmp"
If LoadSprite(0, Sprite$) ; das Bild muss 540 * 270 sein
DisplaySprite(0, 0, 0)
For x = 0 To Poly*4
For y = 0 To Poly*2
GrabSprite(4000, x*540/Poly/4, y*270/Poly/2, 270/Poly/2, 270/Poly/2, #PB_Sprite_Texture)
SaveSprite(4000, "C:\Quadrat_Kugel.bmp")
If LoadSprite(x*100+y, "C:\Quadrat_Kugel.bmp", #PB_Sprite_Texture)
CreateSprite3D(x*100+y, x*100+y)
Else
End
EndIf
Next y
Next x
DeleteFile("C:\Quadrat_Kugel.bmp")
Else
End
EndIf
; Erstellen der Punkte auf der Kugel
For x = 0 To Poly*4 :
For y = -Poly To Poly
Punkt(x, y+Poly, x*36/Poly/4*10, y*36/Poly/4*10)
Next y
Next x
Repeat
Kreis = Kreis + 1 ; rotation
If Kreis >= 3600 : Kreis = Kreis - 3600 : EndIf
ClearScreen(0,0,0)
Start3D()
ResetList(P())
While NextElement(P())
If P()\Px < Poly*4 :
; Berechung der 4 Punkte für TransformSprite3D
x1 = 512+Sin((P()\x+Kreis )*b)*Sqr(Pow(r,2)-Pow(Sin((P()\y )*b)*r,2))
x2 = 512+Sin((P()\x+Kreis+q)*b)*Sqr(Pow(r,2)-Pow(Sin((P()\y )*b)*r,2))
x3 = 512+Sin((P()\x+Kreis+q)*b)*Sqr(Pow(r,2)-Pow(Sin((P()\y+q)*b)*r,2))
x4 = 512+Sin((P()\x+Kreis )*b)*Sqr(Pow(r,2)-Pow(Sin((P()\y+q)*b)*r,2))
y1 = 384+Sin((P()\y )*b)*r
y2 = 384+Sin((P()\y )*b)*r
y3 = 384+Sin((P()\y+q)*b)*r
y4 = 384+Sin((P()\y+q)*b)*r
TransformSprite3D(P()\Px*100+P()\Py, x1, y1, x2, y2, x3, y3, x4, y4)
DisplaySprite3D(P()\Px*100+P()\Py, 0, 0, 255)
EndIf
Wend
Stop3D()
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
End