Fly test en OpenGL

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Fly test en OpenGL

Message par kernadec »

bsr threedslider
merci, mais je teste à la vitesse 12x ton code
car si OpenGL à des difficultés avec ce code
qu'est ce que ca va donner avec une multitude d objets. :mrgreen:
j avais déjà repris un code de cube adapter pour CanvasGadget()
et sous Windows c'est bien sur plus lent
mais bon, mais j'ai pas de déformations de la structure pendant la rotation.
viewtopic.php?p=168459&hilit=cube#p168459
Cordialement


Code : Tout sélectionner


InitEngine3D()
InitKeyboard()
InitSprite()

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)
SetFrameRate(30)
  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_(12.0, 0.5, 1.0, 0.2)   ; vitesse de rotation a 12
	glTranslatef_(-1/4,-1/4,0)
	
  Delay(10) 
 FlipBuffers()

 ExamineKeyboard()
 
Until KeyboardPushed(#PB_Key_Escape) Or quit = 1


Avatar de l’utilisateur
threedslider
Messages : 452
Inscription : dim. 01/juil./2018 22:38

Re: Fly test en OpenGL

Message par threedslider »

Petite correction et là c'est mieux pour toi

Code : Tout sélectionner

InitKeyboard()
InitSprite()

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)


SetFrameRate(30) 
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_(12.0, 0.5, 1.0, 0.2)   ; vitesse de rotation a 12
	glTranslatef_(-1/4,-1/4,0)
	
  Delay(10) 
 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 »

bsr threedslider
merci, c'est pareil 8O
eurêka :mrgreen:
j'ai compris ce qui se passe, quand il inverse la rotation il y a une erreur de perspective
dans cette rotation les faces qui devrait être au fond sont au premier plan du cube
il faut inverser la perspective pour cette rotation dans le sens des aiguilles d'une montre.
Cordialement
Répondre