Seite 1 von 1

3d Kegel

Verfasst: 03.07.2005 17:14
von Batze
Vor kurzem hatte ich mal ein par Beispiele für SetMeshData() gezeigt, die auf allgemeine Zustimmung trafen.
(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
Und, Verbesserungsvorschläge !?

Verfasst: 03.07.2005 17:19
von Green Snake
cool, nicht schlkecht herr specht.
gefällt mir :allright:

habe ich gleich in mein code archiv geschmissen :lol: