Cube3D

Généralités sur la programmation 3D
Anonyme

Message par Anonyme »

Tant que je donne envie de faire des triangles, tout va bien :D

@+
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

D'ailleurs en cherchant à toucher aux Sprite3D j'ai fouiné du côté de DirectX (a cause du pb library descriptor qui y fait référence lol) et j'ai réussi à coder une fonction ClipSprite3D :D

(ca en ouvre des perspectives nan ? =)

Dri :D
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Pour le clipSprite3d il y a aussi un excellent code de S.M.

http://purebasic.hmt-forum.com/viewtopic.php?t=4265


Et c'est vrai que ça en ouvre des perspectives :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

comtois a écrit :Pour le clipSprite3d il y a aussi un excellent code de S.M.

http://purebasic.hmt-forum.com/viewtopic.php?t=4265


Et c'est vrai que ça en ouvre des perspectives :)
J'ai pondu exactement le même code que lui XD
Des fois j'devrais pas me lever le matin :lol:

au moins j'aurais le mérite d'avoir comme lui palié le manque et d'avoir trouvé la solution tout seul ^^ (en même temps c'était simple <_<)

Dri :lol:
TersaKen
Messages : 58
Inscription : dim. 05/févr./2006 16:15

Message par TersaKen »

Je me suis enfin mis au Pure Basic ( il en a fallu du temps ), et j'ai commencé a coté le tout debut d'un moteur 3D, c'est a dire , l'affichage d'un cube, sans gestion des " objets " etc ... J'étais finalement rendu assez loin en DB , mais je me suis retrouvé bloqué a cause des lenteurs de ce dernier [ affichage cube utilisant comme arrete des droites calcules a l'aide de l'algo de Bresenham ~ 40 fps, ce qui est peu ! ]
J'ai mis un certains temps a m'apercevoir que Pure utilisait les radians :evil:
Mais finalement, ça ne complique pas trop les choses, mis a part l'utilisation de chiffre avec de nombreuses decimales ( Pi, 2Pi etc ... )
Bref ! Voici ce que j'ai commencé a faire

Code : Tout sélectionner

; Trium Engine

; initialisation materiel

If InitSprite() And InitKeyboard() : Else : End : EndIf 

If OpenScreen(800,600,16,"Trium ") = 0 
 End
 EndIf 
 
 SetFrameRate(0) 
 
 

; creations tableaux / variables 

 Structure Vertex
 
    x1.f
    y1.f
    z1.f
    
    x2.w
    y2.w
   
    
 
 EndStructure  
 
Dim Vertice.Vertex(100) 

; structure du cube  
 
  Vertice(0)\x1 = -100 : Vertice(0)\y1 = -100 : Vertice(0)\z1 = -100
  Vertice(1)\x1 =  100 : Vertice(1)\y1 = -100 : Vertice(1)\z1 = -100
  Vertice(2)\x1 =  100 : Vertice(2)\y1 =  100 : Vertice(2)\z1 = -100
  Vertice(3)\x1 = -100 : Vertice(3)\y1 =  100 : Vertice(3)\z1 = -100
  
  Vertice(4)\x1 = -100 : Vertice(4)\y1 = -100 : Vertice(4)\z1 = 100
  Vertice(5)\x1 =  100 : Vertice(5)\y1 = -100 : Vertice(5)\z1 = 100
  Vertice(6)\x1 =  100 : Vertice(6)\y1 =  100 : Vertice(6)\z1 = 100
  Vertice(7)\x1 = -100 : Vertice(7)\y1 =  100 : Vertice(7)\z1 = 100 

Declare Display_()
Declare Ligne(a,b)
Declare Rotation_Y(a,b.f)
Declare Rotation_Z(a,b.f)
Declare Rotation_X(a,b.f)

; boucle





Repeat
                ClearScreen(0,0,0)
                 
                 For x = 0 To 7
                    rotation_y(x,0.01)
                 Next x   
              
                 display_()
    
                 ligne(0,1): ligne(1,2)
                 ligne(2,3): ligne(3,0)
                 ligne(4,5): ligne(5,6)
                 ligne(6,7): ligne(7,4)
                 ligne(0,4): ligne(1,5)
                 ligne(2,6): ligne(3,7)
                 

    
                 FlipBuffers()
                 
                 
                 
                
               ExamineKeyboard()

Until KeyboardPushed(#PB_Key_Escape) 

; procedures

Procedure  Display_()

  StartDrawing(ScreenOutput()) 
     For x = 0 To 7
    
       vertice(x)\x2 = (256*Vertice(x)\x1)/(Vertice(x)\z1+250) + 400
       vertice(x)\y2 = (256*Vertice(x)\y1)/(Vertice(x)\z1+250) + 300
                
                   
                  
     Next x 
   
   StopDrawing()

  
EndProcedure 

Procedure Ligne(a,b)

   StartDrawing(ScreenOutput())
     FrontColor(26, 23, 229)
     LineXY( vertice(a)\x2,vertice(a)\y2,vertice(b)\x2,vertice(b)\y2 )
   StopDrawing()
  
  
EndProcedure

Procedure rotation_Y(a,b.f)

 
 
  Longueur.f = Sqr( Pow(vertice(a)\x1,2) + Pow(vertice(a)\z1,2) )
  angle.f    = ACos(vertice(a)\x1 / Longueur.f)
  If vertice(a)\z1 < 0 : angle.f = 6.28318530-angle.f : EndIf 
  angle.f     = angle.f + b.f
  vertice(a)\x1 = Cos(angle.f)*Longueur.f
  vertice(a)\z1 = Sin(angle.f)*Longueur.f
  
  

EndProcedure


Procedure rotation_X(a,b.f)

 
 
  Longueur.f = Sqr( Pow(vertice(a)\z1,2) + Pow(vertice(a)\y1,2) )
  angle.f    = ACos(vertice(a)\z1 / Longueur.f)
  If vertice(a)\y1 < 0 : angle.f = 6.28318530-angle.f : EndIf 
  angle.f     = angle.f + b.f
  vertice(a)\z1 = Cos(angle.f)*Longueur.f
  vertice(a)\y1 = Sin(angle.f)*Longueur.f
  
  

EndProcedure

Procedure rotation_Z(a,b.f)

 
 
  Longueur.f = Sqr( Pow(vertice(a)\x1,2) + Pow(vertice(a)\y1,2) )
  angle.f    = ACos(vertice(a)\x1 / Longueur.f)
  If vertice(a)\y1 < 0 : angle.f = 6.28318530-angle.f : EndIf 
  angle.f     = angle.f + b.f
  vertice(a)\x1 = Cos(angle.f)*Longueur.f
  vertice(a)\y1 = Sin(angle.f)*Longueur.f
  
  

EndProcedure





:wink:
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

TersaKen a écrit :Je me suis enfin mis au Pure Basic ( il en a fallu du temps )
Oui tu as mis le temps :D
Et alors tes premières impressions ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
TersaKen
Messages : 58
Inscription : dim. 05/févr./2006 16:15

Message par TersaKen »

Mes impressions ?
Et bien Pure se trouve etre extremement rapide, et j'en suis entierement satisfait, j'étais sur le point d'abandonner mon projet,
Pure Basic, est arrivé, tel un messie ( ça m'a un peu rebuté d'apprendre un nouveau langage, mais finalement c'est assez rapide, même si je ne maitrise que les commandes de bases, c'est suffisant pour ce que je veux en faire ).

Si j'arrive a mes faims, je pense acheter une license :angel:

enfin Bref,
J'ai reussi a faire une fonction triangle, qui fonctionnent avec des " dots " et ça s'avere etre plutot rapide :)
Voici une demonstration rapide ici sur un espace 3D.

:wink:
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

PureBasic ne fait que des heureux :P
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

comtois a écrit :PureBasic ne fait que des heureux :P
Chui pas sûr que la concurence apprécie :P

Dri :lol:
TersaKen
Messages : 58
Inscription : dim. 05/févr./2006 16:15

Message par TersaKen »

Voici un cube ... montrant ma fonction triangle et le tri de face :) a telecharger ici :!:
Anonyme

Message par Anonyme »

TersaKen a écrit :Voici un cube ... montrant ma fonction triangle et le tri de face :) a telecharger ici :!:
je vois pas de fonctions, juste l'exe :?

@+ :wink:
Triss
Messages : 3
Inscription : mer. 22/mars/2006 15:09

Message par Triss »

j'utilise blitz3D, et j'allais peut être me mettre a Purebasic, qui promet avec la version 4 et son moteur3D basé sur ogre, de bonne capacités 3d. Mais arg, je suis tombé sur ce post, ces cinquantaines de lignes pour faire tourner un cube, ça fait fuir.
Je pense rester sur blitz qui fait tourner un cube avec 13 lignes de codes :

Graphics3D 800,600,32,1
SetBuffer BackBuffer()
camera=CreateCamera()
light=CreateLight()
RotateEntity light,90,0,0
cube=CreateCube()
PositionEntity cube,0,0,5
While Not KeyDown( 1 )
TurnEntity cube,0.6,0.5,0.45
RenderWorld
Flip
Wend
End

Je suis désolé si c'est démoralisant, mais bon, je me mettrai peut-être à purebasic, si quelqun me fait tourner un cube en moins de 20 lignes de code avec.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Ce que t'as pas du comprendre c'est que là il dessine tout lui même pour faire son cube (on pourrait appeller ca un cube2D)

En pure je pourrais difficilement te faire tourner un cube en 20 lignes, en revanche un mesh pas de problèmes...
(y'a pas encore de formes par défaut genre cube sphere etc)

Dri ;)
Triss
Messages : 3
Inscription : mer. 22/mars/2006 15:09

Message par Triss »

ah, merci, cool, bon ptêtre je vais aprofondir la chose alors. Je suis curieux de voir si la partie 3D de la version 4 vaudra le coup.
Anonyme

Message par Anonyme »

Tu n'es pas le seul :D
Répondre