Page 1 sur 2

Fly test en OpenGL

Publié : sam. 02/déc./2023 7:31
par threedslider
Suite :wink:

Code : Tout sélectionner

;;;
;;;  Created by threedslider -- 12/02/2023
;;;

move.f = 0

Procedure fly(x, iter)
  Shared move
  
      helix_x.f =   iter*50 * (Exp((Cos(x)-x)/200))  * Cos(move+Sin(x*2)) 
      helix_y.f =   iter*50 * (Cos((Sin(move-x)-Cos(x))/200))  * Sin(move+x) 
      

    glBegin_(#GL_POINTS)
    glColor3f_(1.0, 0.3, 1.0)
    glVertex3f_( helix_x*0.3,  helix_y*0.3 , 0.3) 
   
    glEnd_();
    
    glPointSize_(2.0)
    
    If iter = 0
      iter = 0
    Else
      fly(x, iter-1)
    EndIf
    
    
EndProcedure
  

InitSprite()
InitKeyboard()


OpenWindow(0, 0, 0, 800, 600, "OpenGL : fly for test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)


glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_() 
gluPerspective_(45.0, 800/600, 1.0, 60.0)
glMatrixMode_(#GL_MODELVIEW)
glTranslatef_(0, 0, -50)
glShadeModel_(#GL_SMOOTH)
glEnable_(#GL_LIGHT0)
glEnable_(#GL_LIGHTING)
glEnable_(#GL_COLOR_MATERIAL)
glEnable_(#GL_DEPTH_TEST)
glEnable_(#GL_CULL_FACE)   
glViewport_(0, 0, 800, 600)

x.i = 0

Repeat
glClearColor_(0.1, 0.1, 0.1, 0) ; background color
  glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
  Repeat
    event = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        quit = 1
     EndSelect
   Until event = 0
   
    
    For x = 0 To 860
      
      move  =move + 1/100000
      
    fly(x,4)  
      
      
     
    Next 
   
       
   
 FlipBuffers()
 
 ExamineKeyboard()
 
Until KeyboardPushed(#PB_Key_Escape) Or quit = 1


Re: Fly test en OpenGL

Publié : sam. 02/déc./2023 8:57
par SPH
Quelques points hazardeux, et hop : une anim :D

Re: Fly test en OpenGL

Publié : dim. 03/déc./2023 9:24
par threedslider
Merci :mrgreen:

Re: Fly test en OpenGL

Publié : dim. 03/déc./2023 10:11
par SPH

Code : Tout sélectionner

glVertex3f_( helix_x*0.3,  helix_y*0.3 , 0.3) 
Tu utilises une instruction 3D. As-tu un exemple de code reliant les pointes d'un cube avec glPointSize ?
Je voudrais savoir où se trouve la 3D la dedans...

Re: Fly test en OpenGL

Publié : dim. 03/déc./2023 10:49
par threedslider
Oui, je reprends l'ancien cube que j'avais fait et modifier afin te montrer l'exemple que tu souhaites savoir :mrgreen:

Voici le code :

Code : Tout sélectionner


InitEngine3D()
InitKeyboard()


OpenWindow(0, 0, 0, 800, 600, "OpenGL : Cube for test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)


glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_() 
gluPerspective_(45.0, 800/600, 1.0, 60.0)
glMatrixMode_(#GL_MODELVIEW)
glTranslatef_(-1/4, 0, -4)
;glShadeModel_(#GL_SMOOTH)
glPolygonMode_(#GL_FRONT_AND_BACK, #GL_LINE )
glEnable_(#GL_LIGHT0)
glEnable_(#GL_LIGHTING)
glEnable_(#GL_COLOR_MATERIAL)
glEnable_(#GL_DEPTH_TEST)
;glEnable_(#GL_CULL_FACE)   
glViewport_(0, 0, 800, 600)


Repeat
glClearColor_(0.7, 0.7, 0.7, 0) ; background color
  glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
  Repeat
    event = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        quit = 1
     EndSelect
   Until event = 0
   
   
   glBegin_(#GL_POINTS)
    glColor3f_(1.0, 0.0, 0.0)
    glVertex3f_( 0.5, 0.5, 0.5) 
    glVertex3f_(-0.5,-0.5,-0.5) 
    glVertex3f_( -0.5, 0.5, 0.5) 
    glVertex3f_(-0.5,-0.5, 0.5)
    glVertex3f_( 0.5, -0.5, 0.5) 
    glVertex3f_(0.5,-0.5,-0.5)
    glVertex3f_(0.5,0.5,-0.5)
    glVertex3f_(-0.5,0.5,-0.5)
    glEnd_()
    
    glPointSize_(8.0)
    
   glBegin_(#GL_QUADS)
    glColor3f_(0.3, 0.3, 1.0)
    glNormal3f_( 0.0, 0.0, 1.0)
    glVertex3f_( 0.5, 0.5, 0.5) 
    glVertex3f_(-0.5, 0.5, 0.5)
    glVertex3f_(-0.5,-0.5, 0.5) 
    glVertex3f_( 0.5,-0.5, 0.5)

    glNormal3f_( 0.0, 0.0,-1.0)
    glVertex3f_(-0.5,-0.5,-0.5) 
    glVertex3f_(-0.5, 0.5,-0.5)
    glVertex3f_( 0.5, 0.5,-0.5) 
    glVertex3f_( 0.5,-0.5,-0.5)

    glNormal3f_( 0.0, 1.0, 0.0)
    glVertex3f_( 0.5, 0.5, 0.5) 
    glVertex3f_( 0.5, 0.5,-0.5)
    glVertex3f_(-0.5, 0.5,-0.5)
    glVertex3f_(-0.5, 0.5, 0.5)

    glNormal3f_( 0.0,-1.0, 0.0)
    glVertex3f_(-0.5,-0.5,-0.5)
    glVertex3f_( 0.5,-0.5,-0.5)
    glVertex3f_( 0.5,-0.5, 0.5) 
    glVertex3f_(-0.5,-0.5, 0.5)

    glNormal3f_( 1.0, 0.0, 0.0)
    glVertex3f_( 0.5, 0.5, 0.5) 
    glVertex3f_( 0.5,-0.5, 0.5)
    glVertex3f_( 0.5,-0.5,-0.5) 
    glVertex3f_( 0.5, 0.5,-0.5)

    glNormal3f_(-1.0, 0.0, 0.0)
    glVertex3f_(-0.5,-0.5,-0.5) 
    glVertex3f_(-0.5,-0.5, 0.5)
    glVertex3f_(-0.5, 0.5, 0.5) 
    glVertex3f_(-0.5, 0.5,-0.5)
    glEnd_();
		
	glTranslatef_(1/4,1/4,0)
	glRotatef_(1.0, 0.5, 1.0, 0.2)
	glTranslatef_(-1/4,-1/4,0)
	
 
 FlipBuffers()
 
 ExamineKeyboard()
 
Until KeyboardPushed(#PB_Key_Escape) Or quit = 1

C'est ça que tu recherches comme technique ?

Re: Fly test en OpenGL

Publié : dim. 03/déc./2023 12:30
par SPH
Excellentissime !

C'est exactement ce que je voulais.
Je me pencherais dessus après mon éditeur de polygones.

Merci :arrow: :D

Re: Fly test en OpenGL

Publié : lun. 04/déc./2023 11:27
par falsam
j'aime bien ces deux tests.

Petit commentaire.
Ton dernier code génère une erreur de compilation car il manque InitSprite().

D'une manière générale, il est inutile de mettre glClearColor_() dans la boucle de tes codes.
Déclare la couleur d'arrière plan avant le repeat.

Tu gagneras en fluidité.

Je vais continuer à suivre ton expérience OpenGL avec PureBasic. Merci 👍

Re: Fly test en OpenGL

Publié : lun. 04/déc./2023 13:14
par threedslider
falsam a écrit : lun. 04/déc./2023 11:27 j'aime bien ces deux tests.
Merci !
falsam a écrit : lun. 04/déc./2023 11:27Petit commentaire.
Ton dernier code génère une erreur de compilation car il manque InitSprite().

D'une manière générale, il est inutile de mettre glClearColor_() dans la boucle de tes codes.
Déclare la couleur d'arrière plan avant le repeat.

Tu gagneras en fluidité.
Oui j'ai fixé merci.
falsam a écrit : lun. 04/déc./2023 11:27 Je vais continuer à suivre ton expérience OpenGL avec PureBasic. Merci 👍
De rien, oui je vais voir ce que je peux faire plus loin ^^

Re: Fly test en OpenGL

Publié : lun. 04/déc./2023 14:40
par threedslider
Re suite :mrgreen:

Code : Tout sélectionner

;;;
;;;  Created by threedslider -- 12/04/2023
;;;

move.f = 0

Procedure fly(x)
  Shared move
  
      helix_x.f =   50 * (Exp((Cos(x)-x)/200))  * Cos(move+Sin(move-x*2)) 
      helix_y.f =   50 * Sin(x) 
      

    glBegin_(#GL_POINTS)
    glColor3f_(1.0, 0.3, 1.0)
    glVertex3f_( helix_x*0.3,  helix_y*0.3 , 0.3) 
   
    glEnd_();
    
    glPointSize_(2.0) 
    
EndProcedure
  

InitSprite()
InitKeyboard()


OpenWindow(0, 0, 0, 800, 600, "OpenGL : Fly 2 for test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)


glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_() 
gluPerspective_(45.0, 800/600, 1.0, 60.0)
glMatrixMode_(#GL_MODELVIEW)
glTranslatef_(0, 0, -50)
glShadeModel_(#GL_SMOOTH)
glEnable_(#GL_LIGHT0)
glEnable_(#GL_LIGHTING)
glEnable_(#GL_COLOR_MATERIAL)
glEnable_(#GL_DEPTH_TEST)
glEnable_(#GL_CULL_FACE)   
glViewport_(0, 0, 800, 600)

x.i = 0

glClearColor_(0.1, 0.1, 0.1, 0) ; background color

Repeat

  glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
  Repeat
    event = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        quit = 1
     EndSelect
   Until event = 0
   
    
    For x = 0 To 860
      
      move  =move + 1/100000
      
    fly(x)  
      
      
     
    Next 
   
       
   
 FlipBuffers()
 
 ExamineKeyboard()
 
Until KeyboardPushed(#PB_Key_Escape) Or quit = 1

Et ça aussi :

Code : Tout sélectionner

;;;
;;;  Created by threedslider -- 12/04/2023
;;;

move.f = 0

Procedure fly(x)
  Shared move
  
      helix_x.f =   50 * (Exp((Cos(x)-x)/200))  * Cos(Sin(move-x*2))
      helix_y.f =   50 * Sin(x) 
      
      

    glBegin_(#GL_POINTS)
    glColor3f_(1.0, 0.3, 1.0)
    glVertex3f_( helix_x*0.3,  helix_y*0.3 , 0.3) 
    glVertex3f_( -helix_x*0.3,  helix_y*0.3 , 0.3)    
    glEnd_();
    
    glPointSize_(2.0) 
    
EndProcedure
  

InitSprite()
InitKeyboard()


OpenWindow(0, 0, 0, 800, 600, "OpenGL : Fly 3 for test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)


glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_() 
gluPerspective_(45.0, 800/600, 1.0, 60.0)
glMatrixMode_(#GL_MODELVIEW)
glTranslatef_(0, 0, -50)
glShadeModel_(#GL_SMOOTH)
glEnable_(#GL_LIGHT0)
glEnable_(#GL_LIGHTING)
glEnable_(#GL_COLOR_MATERIAL)
glEnable_(#GL_DEPTH_TEST)
glEnable_(#GL_CULL_FACE)   
glViewport_(0, 0, 800, 600)

x.i = 0


glClearColor_(0.1, 0.1, 0.1, 0) ; background color
Repeat

  glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
  Repeat
    event = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        quit = 1
     EndSelect
   Until event = 0
   
    
    For x = 0 To 860
      
      move  =move + 1/100000
      
    fly(x)  
      
      
     
    Next 
   
       
   
 FlipBuffers()
 
 ExamineKeyboard()
 
Until KeyboardPushed(#PB_Key_Escape) Or quit = 1


Re: Fly test en OpenGL

Publié : mar. 05/déc./2023 7:36
par kernadec
bjr threedslider
Merci pour cet exemple.
Mais je vois qu'en passant la vitesse de rotation à 12
la perspective dans OpenGL n' est pas au mieux de sa forme
lors de changements de rotations :?
avec un dessin aussi simple ca devrait être mieux que ca! 8O

Cordialement

Code : Tout sélectionner

glRotatef_(12.0, 0.5, 1.0, 0.2)   ; vitesse de rotation a 12

Re: Fly test en OpenGL

Publié : mar. 05/déc./2023 9:31
par threedslider
@kernadec : tu peux mettre SetFrameRate(30) avant repeat et change au plus bas le Delay(10) : FlipBuffers ... Voilà ça devrait marcher pour toi :mrgreen:

Re: Fly test en OpenGL

Publié : mer. 06/déc./2023 6:07
par kernadec
bjr threedslider
merci, donc j ai modifié le code comme tu me l'as indiqué.
pour la phase de rotation de gauche à droite ok c est bon :D
mais quand il passe en rotation de droite a gauche le cube a des aspects de trapèze, bref c'est plus un cube :?:
Cordialement

Re: Fly test en OpenGL

Publié : mer. 06/déc./2023 10:07
par threedslider
Bonjour kernadec,

Je crois c'est une interprétation par ton cerveau donc la vue tu peux interpréter de gauche à droite et de fois de droite à gauche... Moi aussi ça m'arrive de l’interpréter comme ça :mrgreen: ... Mais en général c'est de gauche à droite qui faut interpréter :wink:

Re: Fly test en OpenGL

Publié : mer. 06/déc./2023 10:47
par threedslider
C'est comme un effet de cube de Necker : https://fr.wikipedia.org/wiki/Cube_de_Necker

C'est une illusion optique

Re: Fly test en OpenGL

Publié : mer. 06/déc./2023 10:49
par threedslider
Même ça tu interprète comment de gauche ou de droite ?

http://labix.org/snippets/cube