j'ai tenté (en vain) de convertir un petit code vb de création de mesh avec addvertex, un peu comme j'avais bidouillé avec opengl, mais il y des paramétres sur la fonction qui sont restés obscurs...
en vb ça donne :
Mesh.AddVertex x, 0, z, 0, 0, 0 (tout simple)
la fonction qui m'a semblé le plus proche
;TVMesh_AddVertex.l(*mesh.TVMesh,x.f,y.f,z.f,nx.f,ny.f,nz.f,tu1.f,tv1.f,tu2.f=0.0,tv2.f=0,color.l=0)
arg!
TVMesh_AddVertex.l(*mesh, x, 0, z, 0, 0, 0, 0, 0, 0, 0, 0)
le code vb convertit en pb (j'ai bidouillé l'exemple 2 qui me paraissait le plus proche )
Code : Tout sélectionner
; ------------------------------------------------------------
; TV3D exemples
;
; Exemple 2 : exemple pour creation ;manuel; de mesh
; Historique :
; xx/03/09 19:16 TMyke
;
; ------------------------------------------------------------
; Include files
IncludePath "Includes\" : IncludeFile "pbTV3D.pbi"
EnableExplicit
Global hwnd.l
Global *engine.TVEngine
Global *global_scene.TVScene
Global *tv_input.TVInputEngine
Global *mesh.TVMesh
Global *camera.TVCamera
Global Quit.l, i.l
Declare updateCamera()
Procedure.l MyCylinder(Radius.f, Height.f, Sides.f)
Protected Theta.f ;Current Angle
Protected Inc.f ;Angular increment
Protected x.f ;x coord
Protected y.f ;y coord
Protected z.f ;z coord
Protected i.l ;Integer
;Mesh.SetPrimitiveType TV_TRIANGLESTRIP
;TVMesh_SetPrimitiveType(*mesh.TVMesh,ePrimitiveType.l)
TVMesh_SetPrimitiveType(mesh,#TV_TRIANGLESTRIP)
;Cylinder Precision
Inc = 2 * #PI / Sides ;where each side has two triangles
Theta = 0
For i = 0 To Sides
;Calculate Vertices
x = Radius * Cos(Theta)
y = Height
z = Radius * Sin(Theta)
;Vertex at the top of the cylinder
;Mesh.AddVertex x, 0, z, 0, 0, 0
;TVMesh_AddVertex.l(*mesh.TVMesh,x.f,y.f,z.f,nx.f,ny.f,nz.f,tu1.f,tv1.f,tu2.f=0.0,tv2.f=0,color.l=0)
TVMesh_AddVertex.l(*mesh, x, 0, z, 0, 0, 0, 0, 0, 0, 0, 0)
;Vertex at the bottom of the cylinder
;Mesh.AddVertex x, y, z, 0, 0, 0
TVMesh_AddVertex.l(*mesh, x, y, z, 0, 0, 0, 0, 0, 0, 0, 0)
Theta = Theta + Inc
Next
ProcedureReturn *mesh
EndProcedure
;----------------------------------------------------------
; ouverture d'une fenetre
*engine = TVGraphics3D(800, 600)
;----------------------------------------------------------
; TV3D n'est pas seulement un moteur 3D, mais un moteur de
; jeux. Donc, on lui spécifie la creation d'une scene, ce qui
; initialise en quelque sortie tous les éléments du moteur 3D
*global_scene = TVScene_Create()
TVScene_SetBackgroundColor( 0.1, 0.1, 0.2)
; limitation du frame rate à la fréquence de rafraichissement de l'écran
TVEngine_SetVSync(*global_scene , #True)
*mesh = MyCylinder(10,10,3)
;----------------------------------------------------------
; creation d'un Mesh, vide, que l'on appel "cube",
; ; rataché à notre scene
; *cube = TVScene_CreateMeshBuilder("cube")
; creation dessus d'un simple cube
; on veut voir nos face quelque soit 'orientation
; TVMesh_SetCullMode(*cube, #TV_DOUBLESIDED)
; ; ajout d'une face
; TVMesh_AddFace(*cube, 0)
; ; ajout d'un certain nombre de vertices
; For i = 0 To 11
; TVMesh_AddVertexEx(*cube, ?Vertex+32*i, 32)
; Next
;----------------------------------------------------------
; creation d'une camera
*camera = TVCamera_Create()
TVCamera_SetPosition(*camera, 0,0,-5)
;----------------------------------------------------------
; creation d'un device Input pour la gestion des entré (souris et clavier ici)
TVInput_Create()
TVInput_Initialize( #True, #True)
;
Repeat
TVMesh_RotateY(*mesh, 0.01,0)
; gestion touche et freecamera
updateCamera()
; boucle de rendu
TVEngine_Clear(*engine, #False)
TVMesh_Render(*mesh)
TVEngine_RenderToScreen(*engine)
Until Quit=1
; end
Global angx.f, angy.f, mDown.l
Procedure updateCamera()
Protected mx.l, my.l
Protected bt1.L, bt2.l, bt3.l, bt4.l, btroll.l
TVInput_GetMouseState(@mx , @my , @bt1 , @bt2, @bt3, @bt4 , @btroll )
If bt1
If mDown=0
mDown=11
Else
angx = mx*0.15
angy = my*0.15
TVCamera_Turn(*camera, DEG2RAD(angy), DEG2RAD(angx), 0)
EndIf
Else
mDown=0
EndIf
If TVInput_IsKeyPressed.l(#TV_KEY_UP)
TVCamera_MoveRelative(*camera,0.005 * TVEngine_AccurateTimeElapsed.f(*engine),0,0, #True)
EndIf
If TVInput_IsKeyPressed.l(#TV_KEY_DOWN)
TVCamera_MoveRelative(*camera,-0.005 * TVEngine_AccurateTimeElapsed.f(*engine),0,0, #True)
EndIf
If TVInput_IsKeyPressed.l(#TV_KEY_ESCAPE)
Quit=1
EndIf
EndProcedure
pat