(oh cooler Satz, warum schreib ich sowas nie in Aufsätzen?

Hier hab ich nun auch noch einen Code für eine Sinnvolle Anwendung:
Code: Alles auswählen
;Fenster für 3D
If InitEngine3D() = 0 : End : EndIf
InitSprite()
Procedure Open3DWindow(ID, Width, Height, Titel.s)
OpenWindow(ID, 10, 35, Width, Height+20, #PB_Window_MinimizeGadget, Titel)
CreateStatusBar(0, WindowID(ID))
AddStatusBarField(50)
OpenWindowedScreen(WindowID(ID), 0, 0, Width, Height, 0, 0, 0)
ClearScreen(0,0,0)
FlipBuffers()
Add3DArchive("3D-Data", #PB_3DArchive_FileSystem)
EndProcedure
Procedure Write_V(X.f, Y.f, Z.f)
Shared *Vertix
Static *Mem
PokeF(*Vertix + *Mem , X)
PokeF(*Vertix + *Mem + 4, Y)
PokeF(*Vertix + *Mem + 8, Z)
*Mem + 12
EndProcedure
Procedure Write_F(A.w, b.w, C.w)
Shared *Face
Static *Mem
PokeW(*Face + *Mem , A)
PokeW(*Face + *Mem + 2, b)
PokeW(*Face + *Mem + 4, C)
*Mem + 6
EndProcedure
Procedure Write_T(X.f, Y.f)
Shared *Texture
Static *Mem
PokeF(*Texture + *Mem , X)
PokeF(*Texture + *Mem + 4, Y)
*Mem + 8
EndProcedure
;******************************************************************************************************
*Vertix = AllocateMemory( 408)
*Face = AllocateMemory( 384)
*Texture = AllocateMemory( 272)
#Pi = 3.14159
#F = 0.0625 * #Pi
Write_V(0 , 0 , 0)
Write_T(0.5, 0.5)
For i = 1 To 32
Write_V( Sin(i * #F), Cos(i * #F), 0)
If i <> 32
Write_F( 0, i+1, i)
Write_F( 33, i,i+1)
Else
Write_F( 0, 1, i)
Write_F( 33, i, 1)
EndIf
Write_T( Sin(i * #F) / 2 + 0.5, Cos(i * #F) / 2 + 0.5)
Next
Write_V(0,0,-2)
Write_T(0.5,0.5)
;******************************************************************************************************
Open3DWindow(0, 800, 600, "3D")
CreateCamera(0,0,0,100,100)
CameraLocate(0, 0,0,-8)
CameraLookAt(0, 0,0, 0)
CreateTexture(0, 256, 256)
StartDrawing(TextureOutput(0))
For i=0 To 255
Circle(128,128,255-i, RGB(i,i,i))
Next
StopDrawing()
CreateMesh(0)
SetMeshData(0, 0, *Vertix, 34)
SetMeshData(0, 1, *Face, 64)
SetMeshData(0, 2, *Texture, 34)
CreateEntity(0, MeshID(0), CreateMaterial(0, TextureID(0)))
;CreateEntity(0, MeshID(0), CreateMaterial(0, LoadTexture(0, "berg.jpg"))) ; Mit Bergtextur siehts noch cooler aus!
#MSpeed = 5
Repeat
RenderWorld()
FlipBuffers()
Event = WindowEvent()
Select Event
Case 513 : MoveMode = 1 : AltM = WindowMouseX() / #MSpeed
Case 514 : MoveMode = 0
EndSelect
If MoveMode = 1
M = WindowMouseX() / #MSpeed
RotateEntity(0, M - AltM, 0, 0)
AltM = M
EndIf
Until Event = #PB_Event_CloseWindow