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