Fly test en OpenGL

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Fly test en OpenGL

Message 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

Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Fly test en OpenGL

Message par SPH »

Quelques points hazardeux, et hop : une anim :D

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Fly test en OpenGL

Message par threedslider »

Merci :mrgreen:
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Fly test en OpenGL

Message 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...

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Fly test en OpenGL

Message 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 ?
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Fly test en OpenGL

Message par SPH »

Excellentissime !

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

Merci :arrow: :D

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Fly test en OpenGL

Message 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 👍
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Fly test en OpenGL

Message 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 ^^
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Fly test en OpenGL

Message 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

Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Fly test en OpenGL

Message 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
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Fly test en OpenGL

Message 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:
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Fly test en OpenGL

Message 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
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Fly test en OpenGL

Message 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:
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Fly test en OpenGL

Message par threedslider »

C'est comme un effet de cube de Necker : https://fr.wikipedia.org/wiki/Cube_de_Necker

C'est une illusion optique
Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Fly test en OpenGL

Message par threedslider »

Même ça tu interprète comment de gauche ou de droite ?

http://labix.org/snippets/cube
Répondre