Page 1 sur 5

Cube3D

Publié : lun. 23/janv./2006 23:17
par Anonyme
Voici mon premier code en 3D! :D
J'ai toujours voulu faire un cube :D

j'ai repris un code en C que vous pouvez trouvez ici :http://membres.lycos.fr/heulin/3D/Plan3D.html

Code : Tout sélectionner

Structure World3D
x.f
y.f
z.f
EndStructure

Dim Point3D.World3D(8)
Dim Point2D.World3D(8)
Dim Sommet.World3D(8)

#Xoff = 512
#Yoff = 384
#Zoff = 250

Dim Matrice.f(3,3)

; /****************************************************************************/
; /* Rotation() : effectue la rotation des points Sommets -> Point3D           */
; /****************************************************************************/

Procedure Rotation(Xa.f,Ya.f,Za.f)


  matrice(0,0) = Cos(Za)*Cos(Ya)
  matrice(1,0) = Sin(Za)*Cos(Ya) 
  matrice(2,0) = -Sin(Ya)

  matrice(0,1) = Cos(Za)*Sin(Ya)*Sin(Xa) - Sin(Za)*Cos(Xa)
  matrice(1,1) = Sin(Za)*Sin(Ya)*Sin(Xa) + Cos(Xa)*Cos(Za)
  matrice(2,1) = Sin(Xa)*Cos(Ya)

  matrice(0,2) = Cos(Za)*Sin(Ya)*Cos(Xa) + Sin(Za)*Sin(Xa)
  matrice(1,2) = Sin(Za)*Sin(Ya)*Cos(Xa) - Cos(Za)*Sin(Xa) 
  matrice(2,2) = Cos(Xa)*Cos(Ya)
  
  
  For i = 0 To 7
    Point3D(i)\x = matrice(0,0)*Sommet(i)\x + matrice(1,0)*Sommet(i)\y + matrice(2,0)*Sommet(i)\z
    Point3D(i)\y = matrice(0,1)*Sommet(i)\x + matrice(1,1)*Sommet(i)\y + matrice(2,1)*Sommet(i)\z
    Point3D(i)\z = matrice(0,2)*Sommet(i)\x + matrice(1,2)*Sommet(i)\y + matrice(2,2)*Sommet(i)\z
  Next i  
  
EndProcedure


; /****************************************************************************/
; /* Projection() : projette en perspective les points après rotation.        */
; /****************************************************************************/


Procedure Projection()
For i = 0 To 7
 Point2D(i)\x=(Point3D(i)\x*256)/(Point3D(i)\z+#Zoff)+#Xoff;
 Point2D(i)\y=(Point3D(i)\y*256)/(Point3D(i)\z+#Zoff)+#Yoff;
Next i
EndProcedure


; /****************************************************************************/
; /* Initialiser() : initialise les coordonnees des sommets du cube           */
; /****************************************************************************/
Procedure Initialiser()

  Sommet(0)\x = -100 : Sommet(0)\y = -100 : Sommet(0)\z = -100
  Sommet(1)\x =  100 : Sommet(1)\y = -100 : Sommet(1)\z = -100
  Sommet(2)\x =  100 : Sommet(2)\y =  100 : Sommet(2)\z = -100
  Sommet(3)\x = -100 : Sommet(3)\y =  100 : Sommet(3)\z = -100
  Sommet(4)\x =  100 : Sommet(4)\y = -100 : Sommet(4)\z =  100
  Sommet(5)\x = -100 : Sommet(5)\y = -100 : Sommet(5)\z =  100
  Sommet(6)\x = -100 : Sommet(6)\y =  100 : Sommet(6)\z =  100
  Sommet(7)\x =  100 : Sommet(7)\y =  100 : Sommet(7)\z =  100

EndProcedure


Procedure ligne(a.l,b.l,couleur.l)
  LineXY(Point2D(a)\x,Point2D(a)\y,Point2D(b)\x,Point2D(b)\y,couleur);
EndProcedure


Procedure Update()
Static Couleur.l

Couleur = RGB(100,100,255)

 StartDrawing(ScreenOutput())
  For i = 0 To 7

; Circle(Point2D(i)\x,Point2D(i)\y,3,Couleur)
; 
; Locate(Point2D(i)\x,Point2D(i)\y) 
; DrawText(Str(i))
; 
; 
;  ligne(0,1,couleur)
;  ligne(1,2,couleur)
;  ligne(2,3,couleur)
;  ligne(3,0,couleur)
;  ligne(4,5,couleur)
;  ligne(5,6,couleur)
;  ligne(6,7,couleur)
;  ligne(7,4,couleur)
;  ligne(0,5,couleur)
;  ligne(1,4,couleur)
;  ligne(2,7,couleur)
;  ligne(3,6,couleur)


  Next i
 StopDrawing()
EndProcedure





InitSprite () :InitSprite3D() : InitKeyboard () : InitMouse () 
OpenScreen (1024,768,32, "" ) 



;Création de faces (sprite3D())

CreateSprite(0,64,64,#PB_Sprite_Texture)
 StartDrawing(SpriteOutput(0))
  Box(0,0,64,64,$82E67D)
   StopDrawing()
    CreateSprite3D(0,0)

CreateSprite(1,64,64,#PB_Sprite_Texture)
 StartDrawing(SpriteOutput(1))
  Box(0,0,64,64,$0552FA)
   StopDrawing()
    CreateSprite3D(1,1)

CreateSprite(2,64,64,#PB_Sprite_Texture)
 StartDrawing(SpriteOutput(2))
  Box(0,0,64,64,$FD0202)
   StopDrawing()
    CreateSprite3D(2,2)

CreateSprite(3,64,64,#PB_Sprite_Texture)
 StartDrawing(SpriteOutput(3))
  Box(0,0,64,64,$00FFFF)
   StopDrawing()
    CreateSprite3D(3,3)
    
 CreateSprite(4,64,64,#PB_Sprite_Texture)
 StartDrawing(SpriteOutput(4))
  Box(0,0,64,64,$FDFF02)
   StopDrawing()
    CreateSprite3D(4,4)   
    
 CreateSprite(5,64,64,#PB_Sprite_Texture)
 StartDrawing(SpriteOutput(5))
  Box(0,0,64,64,$B3FF4C)
   StopDrawing()
    CreateSprite3D(5,5)   

Initialiser()


Repeat 
ExamineKeyboard () : ExamineMouse() : ClearScreen (0,0,0)

Start3D()


Xangle.f + 0.01 
Yangle.f + 0.03
ZAngle.f + 0.01
  
Sprite3DQuality(1)


DisplaySprite3D(0,0,0)
DisplaySprite3D(1,0,0)
DisplaySprite3D(2,0,0)
DisplaySprite3D(3,0,0)
DisplaySprite3D(4,0,0)
DisplaySprite3D(5,0,0)



TransformSprite3D(0,Point2D(0)\x,Point2D(0)\Y,Point2D(1)\x,Point2D(1)\Y,Point2D(2)\x,Point2D(2)\Y,Point2D(3)\x,Point2D(3)\Y)
TransformSprite3D(1,Point2D(1)\x,Point2D(1)\Y,Point2D(4)\x,Point2D(4)\Y,Point2D(7)\x,Point2D(7)\Y,Point2D(2)\x,Point2D(2)\Y)
TransformSprite3D(2,Point2D(4)\x,Point2D(4)\Y,Point2D(5)\x,Point2D(5)\Y,Point2D(6)\x,Point2D(6)\Y,Point2D(7)\x,Point2D(7)\Y)
TransformSprite3D(3,Point2D(5)\x,Point2D(5)\Y,Point2D(0)\x,Point2D(0)\Y,Point2D(3)\x,Point2D(3)\Y,Point2D(6)\x,Point2D(6)\Y)
TransformSprite3D(4,Point2D(5)\x,Point2D(5)\Y,Point2D(4)\x,Point2D(4)\Y,Point2D(1)\x,Point2D(1)\Y,Point2D(0)\x,Point2D(0)\Y)
TransformSprite3D(5,Point2D(3)\x,Point2D(3)\Y,Point2D(2)\x,Point2D(2)\Y,Point2D(7)\x,Point2D(7)\Y,Point2D(6)\x,Point2D(6)\Y)

Rotation(Xangle,Yangle,Zangle)
 Projection()
  Update()


Stop3D()
FlipBuffers () 
Until KeyboardPushed ( #PB_Key_Escape ) 
C'est pas du très propres mais il y a de bonne base de 3D
@++ :wink:

Publié : mar. 24/janv./2006 0:13
par Frenchy Pilou
Maintenant il faut en mettre plein l'écran de toutes les tailles :lol:
Mal de mer assuré :D

Publié : mar. 24/janv./2006 7:00
par Droopy
il n'y a pas de facettes sur ton rubisk cube 8)

Publié : ven. 27/janv./2006 17:08
par Anonyme
Je cherche de quelle facon je pourrais calculer les sommets d'une sphère
Je n'arrive pas trop à mettre en pratique une procedure qui automatise
les coordonées des sommets. car les saisirs à la main... :?

Publié : ven. 27/janv./2006 17:13
par CameleonTH
Ta essayer avec les cos et sin.
Mais je sais pas comment faire avec.

Publié : ven. 27/janv./2006 17:26
par comtois
Cpl.Bator a écrit :Je cherche de quelle facon je pourrais calculer les sommets d'une sphère
Je n'arrive pas trop à mettre en pratique une procedure qui automatise
les coordonées des sommets. car les saisirs à la main... :?

Code : Tout sélectionner

; Comtois le 03/12/2005
; Pb 3.94 et Lib 3D beta (Ogre 1.03)

;-Constantes
;/ Ecran
#ScreenWidth = 800 
#ScreenHeight = 600
#ScreenDepth = 32
#PB_Mesh_Vertex       = 1 << 0
#PB_Mesh_Color        = 1 << 1
#PB_Mesh_Normal       = 1 << 2
#PB_Mesh_UVCoordinate = 1 << 3
#PB_Mesh_Face         = 1 << 4
;{- Initialisation
If InitEngine3D() = 0
   MessageRequester( "Erreur" , "Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll" , 0 )
   End
ElseIf InitSprite() = 0 Or InitKeyboard() = 0 
   MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
   End
ElseIf OpenScreen( #ScreenWidth , #ScreenHeight , #ScreenDepth , "M3D_Matrix3D" ) = 0
   MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
   End
EndIf
;}

Add3DArchive("", #PB_3DArchive_FileSystem)

Structure Vertex
	px.f
	py.f
	pz.f
	nx.f
	ny.f
	nz.f
	
	cr.f
	cg.f
	cb.f
	
	U.f
	V.f
EndStructure

Structure Facette
	P1.Vertex
	P2.vertex
	P3.Vertex
	P4.Vertex
EndStructure
Structure FTriangle
	f1.w
 	f2.w
 	f3.w
EndStructure
Structure Face
	f1.w
 	f2.w
 	f3.w
 	f4.w
 	f5.w
 	f6.w 
EndStructure	
ProcedureDLL CreateMeshSphere(No,m,p)
	;m = méridien 
	;p = parallèle
	;Le rayon est égal à 1 .
	
	If m<3 Or p<2 	
		ProcedureReturn 0
	EndIf
	NbSommet=2+((m+1)*p) 
	*Mem=AllocateMemory(SizeOf(Vertex)*Nbsommet)
	For i=0 To m
		theta.f =i*3.14159*2.0/m
		ctheta.f=Cos(theta)
		stheta.f=Sin(theta)
		For j=1 To p
			alpha.f =j*3.14159/(p+1)
			calpha.f =Cos(alpha)
			salpha.f=Sin(alpha)
			
			*PtrV.Vertex = *Mem + SizeOf(Vertex) * ((i*p) + (j-1))
			*PtrV\px=salpha*ctheta
			*PtrV\py=salpha*stheta
			*PtrV\pz=calpha
			
			*PtrV\nx=0.0
			*PtrV\ny=0.0
			*PtrV\nz=0.0
					
			*PtrV\cr=1.0
			*PtrV\cg=1.0
			*PtrV\cb=1.0						
			
			*PtrV\u=Theta/(2.0*3.14159)
			*PtrV\v=alpha/3.14159

		Next j
	Next i	
	*PtrV.Vertex = *Mem + SizeOf(Vertex) * ((m+1)*p)
	;Pole sud  
	*PtrV\px=0
	*PtrV\py=0	  
	*PtrV\pz=-1
	*PtrV\nx=0.0
	*PtrV\ny=0.0
	*PtrV\nz=0.0
			
	*PtrV\cr=1.0
	*PtrV\cg=1.0
	*PtrV\cb=1.0						
	
	*PtrV\u=0
	*PtrV\v=0
	*PtrV + SizeOf(Vertex)
	;Pole nord
	*PtrV\px=0
	*PtrV\py=0	  
	*PtrV\pz=1
	*PtrV\nx=0.0
	*PtrV\ny=0.0
	*PtrV\nz=0.0
			
	*PtrV\cr=1.0
	*PtrV\cg=1.0
	*PtrV\cb=1.0						
	
	*PtrV\u=0
	*PtrV\v=0
	
	;Les facettes
	NbTriangle=2*m*p
	*MemF=AllocateMemory(SizeOf(FTriangle)*2*m*p)
	*PtrF.FTriangle=*MemF
	For i=0 To m-1
		For j=1 To p-1
			*PtrF\f1=((i + 1) * p) + j 
			*PtrF\f2=((i + 1) * p) + (j - 1)
			*PtrF\f3=(i * p) + (j - 1)
			*PtrF + SizeOf(FTriangle)
			*PtrF\f1=i * p + j 
			*PtrF\f2=((i + 1) * p) + j 
			*PtrF\f3=(i * p) + (j - 1)
			*PtrF + SizeOf(FTriangle)
		Next j		
	Next i
	
	
	For i=0 To m-1
		*PtrF\f3=(m + 1) * p + 1
		*PtrF\f2=(i + 1) * p  
		*PtrF\f1=i * p  
		*PtrF + SizeOf(FTriangle)
	Next i		
		
	For i=0 To m-1
		*PtrF\f3=(m + 1) * p 
		*PtrF\f2=i * p + (p - 1)  
		*PtrF\f1=(i + 1) * p + (p - 1)  
		*PtrF + SizeOf(FTriangle)
	Next i		
	

    If CreateMesh(No)
		Flag = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color  
		SetMeshData(No,Flag         ,*Mem,NbSommet)
		SetMeshData(No,#PB_Mesh_face,*MemF,NbTriangle)
		ProcedureReturn 1
	Else
		ProcedureReturn 0	
	EndIf
	
EndProcedure	


CreateMeshSphere(0,15,13)
CreateTexture(0,128, 128) 
StartDrawing(TextureOutput(0))
  Box(0,0,TextureWidth(0),TextureHeight(0),RGB(0,100,220))
StopDrawing()  

;-Matière
CreateMaterial(0,TextureID(0))

CreateEntity(0,MeshID(0),MaterialID(0))
ScaleEntity(0,60,60,60)

;- Camera
CreateCamera(0, 0, 0 , 100 , 100)
MoveCamera(0,0,0,-200)
CameraRenderMode(0,#PB_Camera_Wireframe)
CameraLookAt(0,EntityX(0),EntityY(0),EntityZ(0))



;- Light
AmbientColor(RGB(185,185,185))
CreateLight(0,RGB(255,255,255))
Repeat
	ClearScreen(0,0,0)
	RotateEntity(0,0.5,0.5,0.5)
  	RenderWorld()
  	FlipBuffers()
	ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_Escape) 

Publié : ven. 27/janv./2006 17:30
par Dr. Dri
Mais il travaille avec des quadrilatères, pas des triangles...

Dri

Publié : ven. 27/janv./2006 17:43
par Anonyme
@Dri, les deux sont bons.
si tu regarde bien mon code tu verras que Sommets(0,1,2,3) Correspond a une face, Sommet(0,2,3) à un triangle de la face, & (1,2,3) à l'autre triangle.

@Comtois , Merci je vais étudier cela.

Publié : ven. 27/janv./2006 17:44
par comtois
Dr. Dri a écrit :Mais il travaille avec des quadrilatères, pas des triangles...

Dri
Ben il mettra des triangles , ça lui changera les idées :)

sinon c'est des facettes , chaque facette est constituée de deux triangles .
il regroupe deux triangles pour constituer un quadrilatère.


[EDIT]

Ben voila c'est confirmé, les triangles conviennent :)

Publié : ven. 27/janv./2006 17:49
par Dr. Dri
comtois a écrit :Ben il mettra des triangles , ça lui changera les idées :)
Je disais ca parce qu'il utilise les Sprite3D

Dri ;)

Publié : ven. 27/janv./2006 17:55
par Anonyme
j'ai juste utiliser les sprites 3d car ils permettent une déformation grace à leurs sommets, j'ai pas encore fait une fonction de remplissage de polygones, ni le z-buffer pour trier & cacher les facettes.
En revanche , le code de comtois est pas simple à étudier ^^

Publié : sam. 28/janv./2006 1:15
par comtois
Cpl.Bator a écrit :En revanche , le code de comtois est pas simple à étudier ^^
Oui ça manque de commentaire :)

Bon je vais essayer d'expliquer un peu .

la première partie consiste à calculer les sommets ou vertices ou les points si tu préfères.La postion de chaque point est stocké dans un tableau à une dimension

Code : Tout sélectionner

 NbSommet=2+((m+1)*p)
 *Mem=AllocateMemory(SizeOf(Vertex)*Nbsommet)
Dans la structure Vertex il y a des choses dont tu n'as pas besoin , comme

Code : Tout sélectionner

         *PtrV\nx=0.0
         *PtrV\ny=0.0
         *PtrV\nz=0.0
               
         *PtrV\cr=1.0
         *PtrV\cg=1.0
         *PtrV\cb=1.0       
C'est pour le calcul des normales et de la couleur.D'ailleurs dans cet exemple , je ne l'utilise pas non plus.

Bref tu trouves la position de chaque point dans

Code : Tout sélectionner

         *PtrV\px
         *PtrV\py
         *PtrV\pz
Maintenant comment reconstituer un triangle avec ça ?
En t'aidant de la suite du code , le calcul des facettes.
Les facettes sont constituées de 2 triangles , et les pôles Nord et Sud de triangles ( les calottes qui ferment la sphère)
Bref il n'y a que des triangles et ils sont stockés dans un autre tableau à une dimension.Je pense que c'est ce tableau que tu devras exploiter.

Code : Tout sélectionner

   ;Les facettes
   NbTriangle=2*m*p
   *MemF=AllocateMemory(SizeOf(FTriangle)*2*m*p)
Le calcul des facettes :

Code : Tout sélectionner

   *PtrF.FTriangle=*MemF
   For i=0 To m-1
      For j=1 To p-1
         *PtrF\f1=((i + 1) * p) + j
         *PtrF\f2=((i + 1) * p) + (j - 1)
         *PtrF\f3=(i * p) + (j - 1)
         *PtrF + SizeOf(FTriangle)
         *PtrF\f1=i * p + j
         *PtrF\f2=((i + 1) * p) + j
         *PtrF\f3=(i * p) + (j - 1)
         *PtrF + SizeOf(FTriangle)
      Next j      
   Next i
on retrouve les deux triangles.
Premier Triangle
*PtrF\f1=((i + 1) * p) + j
*PtrF\f2=((i + 1) * p) + (j - 1)
*PtrF\f3=(i * p) + (j - 1)
SEcond Triangle
*PtrF\f1=i * p + j
*PtrF\f2=((i + 1) * p) + j
*PtrF\f3=(i * p) + (j - 1)
ça correspond à un index sur le tableau des vertices calculés précédemment .
Exemple Pour i=0 et j=1 avec p = 30,Le premier triangle sera
*PtrF\f1=((0 + 1) * p) + 1
*PtrF\f2=((0 + 1) * p) + (1 - 1)
*PtrF\f3=(0 * p) + (1 - 1)
*PtrF\f1=p+1
*PtrF\f2=p
*PtrF\f3=0
On obtient
*PtrF\f1=31
*PtrF\f2=30
*PtrF\f3=0
Et ensuite pour connaitre la position du point 31
*PtrV.Vertex = *Mem + SizeOf(Vertex) * 31
Pour le point 30
*PtrV.Vertex = *Mem + SizeOf(Vertex) * 30
Et ainsi de suite

Le calcul des pôles , c'est des triangles

Code : Tout sélectionner

   ;Pole 
   For i=0 To m-1
      *PtrF\f3=(m + 1) * p + 1
      *PtrF\f2=(i + 1) * p 
      *PtrF\f1=i * p 
      *PtrF + SizeOf(FTriangle)
   Next i      
   ;Pole   
   For i=0 To m-1
      *PtrF\f3=(m + 1) * p
      *PtrF\f2=i * p + (p - 1) 
      *PtrF\f1=(i + 1) * p + (p - 1) 
      *PtrF + SizeOf(FTriangle)
   Next i       
J'espère que je n'ai pas trop raconté de bêtises , il est tard :)

Publié : sam. 28/janv./2006 13:36
par comtois
j'ai supprimé ce qui ne servait à rien dans la structure Vertex
et cette fois ci j'utilise un tableau , c'est la même chose que précédemment.

Tu ne devrais avoir besoin que du tableau Sommets() , et ensuite pour construire tes triangles tu calcules les index comme dans le calcul des facettes , tu n'as peut-être pas besoin de stocker les index , tu peux construire tes triangles au fur et à mesure.

Code : Tout sélectionner

; Comtois le 03/12/2005
; Pb 3.94 et Lib 3D beta (Ogre 1.03)

;-Constantes
;/ Ecran
#ScreenWidth = 800
#ScreenHeight = 600
#ScreenDepth = 32
#PB_Mesh_Vertex       = 1 << 0
#PB_Mesh_Color        = 1 << 1
#PB_Mesh_Normal       = 1 << 2
#PB_Mesh_UVCoordinate = 1 << 3
#PB_Mesh_Face         = 1 << 4
;{- Initialisation
If InitEngine3D() = 0
   MessageRequester( "Erreur" , "Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll" , 0 )
   End
ElseIf InitSprite() = 0 Or InitKeyboard() = 0
   MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
   End
ElseIf OpenScreen( #ScreenWidth , #ScreenHeight , #ScreenDepth , "M3D_Matrix3D" ) = 0
   MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 )
   End
EndIf
;}

Add3DArchive("\", #PB_3DArchive_FileSystem)

Structure Vertex
   px.f
   py.f
   pz.f
   U.f
   V.f
EndStructure

Structure Facette
   P1.Vertex
   P2.vertex
   P3.Vertex
   P4.Vertex
EndStructure
Structure FTriangle
   f1.w
    f2.w
    f3.w
EndStructure
Structure Face
   f1.w
    f2.w
    f3.w
    f4.w
    f5.w
    f6.w
EndStructure   
ProcedureDLL CreateMeshSphere(No,m,p)
   ;m = méridien
   ;p = parallèle
   ;Le rayon est égal à 1 .
   
   If m<3 Or p<2    
      ProcedureReturn 0
   EndIf
   NbSommet=2+((m+1)*p)
   Dim Sommets.Vertex(NbSommet-1)
   For i=0 To m
      theta.f =i*3.14159*2.0/m
      ctheta.f=Cos(theta)
      stheta.f=Sin(theta)
      For j=1 To p
         alpha.f =j*3.14159/(p+1)
         calpha.f =Cos(alpha)
         salpha.f=Sin(alpha)
         Index = (i*p) + (j-1)
         Sommets(Index)\px = salpha*ctheta
         Sommets(Index)\py = salpha*stheta
         Sommets(Index)\pz = calpha
         Sommets(Index)\u = Theta/(2.0*3.14159)
         Sommets(Index)\v = alpha/3.14159

      Next j
   Next i   
   Index = (m+1)*p
   ;Pole sud 
   Sommets(Index)\px=0
   Sommets(Index)\py=0    
   Sommets(Index)\pz=-1
   Sommets(Index)\u=0
   Sommets(Index)\v=0

   Index + 1
   ;Pole nord
   Sommets(Index)\px=0
   Sommets(Index)\py=0    
   Sommets(Index)\pz=1
   Sommets(Index)\u=0
   Sommets(Index)\v=0
   
   ;Les facettes
   NbTriangle=2*m*p
   *MemF=AllocateMemory(SizeOf(FTriangle)*2*m*p)
   *PtrF.FTriangle=*MemF
   For i=0 To m-1
      For j=1 To p-1
         *PtrF\f1=((i + 1) * p) + j
         *PtrF\f2=((i + 1) * p) + (j - 1)
         *PtrF\f3=(i * p) + (j - 1)
         *PtrF + SizeOf(FTriangle)
         *PtrF\f1=i * p + j
         *PtrF\f2=((i + 1) * p) + j
         *PtrF\f3=(i * p) + (j - 1)
         *PtrF + SizeOf(FTriangle)
      Next j      
   Next i
   
   
   For i=0 To m-1
      *PtrF\f3=(m + 1) * p + 1
      *PtrF\f2=(i + 1) * p 
      *PtrF\f1=i * p 
      *PtrF + SizeOf(FTriangle)
   Next i      
      
   For i=0 To m-1
      *PtrF\f3=(m + 1) * p
      *PtrF\f2=i * p + (p - 1) 
      *PtrF\f1=(i + 1) * p + (p - 1) 
      *PtrF + SizeOf(FTriangle)
   Next i      
   

    If CreateMesh(No)
      Flag = #PB_Mesh_Vertex |  #PB_Mesh_UVCoordinate 
      SetMeshData(No,Flag         ,Sommets(),NbSommet)
      SetMeshData(No,#PB_Mesh_face,*MemF,NbTriangle)
      ProcedureReturn 1
   Else
      ProcedureReturn 0   
   EndIf
   
EndProcedure   


CreateMeshSphere(0,15,13)
CreateTexture(0,128, 128)
StartDrawing(TextureOutput(0))
  Box(0,0,TextureWidth(0),TextureHeight(0),RGB(0,100,220))
StopDrawing() 

;-Matière
CreateMaterial(0,TextureID(0))

CreateEntity(0,MeshID(0),MaterialID(0))
ScaleEntity(0,60,60,60)

;- Camera
CreateCamera(0, 0, 0 , 100 , 100)
MoveCamera(0,0,0,-200)
CameraRenderMode(0,#PB_Camera_Wireframe)
CameraLookAt(0,EntityX(0),EntityY(0),EntityZ(0))



;- Light
AmbientColor(RGB(185,185,185))
CreateLight(0,RGB(255,255,255))
Repeat
   ClearScreen(0,0,0)
   RotateEntity(0,0.5,0.5,0.5)
     RenderWorld()
     FlipBuffers()
   ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape) 

Publié : sam. 28/janv./2006 23:44
par Anonyme
Merci Comtois, je part Lundi 3 à 4 semaine, donc j'étudirais cela à mon retour, merci encore.

@+

Publié : dim. 29/janv./2006 12:32
par Dr. Dri
@Cpl.Bator
Tu m'as donné envie de reprendre mon T3D (Triangle3D) ^^
Cette fois je vais le faire avec des Sprite3D ^^

Dri :D