Page 2 sur 5

Publié : dim. 29/janv./2006 15:00
par Anonyme
Tant que je donne envie de faire des triangles, tout va bien :D

@+

Publié : dim. 29/janv./2006 16:00
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

Publié : dim. 29/janv./2006 16:19
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 :)

Publié : dim. 29/janv./2006 16:36
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:

Publié : mar. 14/févr./2006 20:32
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:

Publié : mer. 15/févr./2006 12:36
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 ?

Publié : mar. 07/mars/2006 18:29
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:

Publié : mar. 07/mars/2006 19:00
par comtois
PureBasic ne fait que des heureux :P

Publié : mar. 07/mars/2006 19:25
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:

Publié : dim. 12/mars/2006 15:52
par TersaKen
Voici un cube ... montrant ma fonction triangle et le tri de face :) a telecharger ici :!:

Publié : mar. 21/mars/2006 17:05
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:

Publié : mer. 22/mars/2006 15:19
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.

Publié : mer. 22/mars/2006 15:28
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 ;)

Publié : mer. 22/mars/2006 19:12
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.

Publié : mer. 22/mars/2006 19:41
par Anonyme
Tu n'es pas le seul :D