Problème pour OpenGL, besoin d'aide ?

Généralités sur la programmation 3D
Avatar de l’utilisateur
threedslider
Messages : 380
Inscription : dim. 01/juil./2018 22:38

Problème pour OpenGL, besoin d'aide ?

Message par threedslider »

J'ai voulais coder de façon minimun pour OpenGL avec Purebasic 5.73, voici le code :

Code : Tout sélectionner

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  CompilerIf Subsystem("OpenGL") = #False
    MessageRequester("Error", "Please set the subsystem to OpenGL")
    End
  CompilerEndIf
CompilerEndIf

InitEngine3D()
InitKeyboard()


OpenWindow(0, 0, 0, 800, 600, "Hello world for test with OpenGL", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 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_POLYGON)
    glColor3f_(1.0, 0.0, 0.0)
		glVertex3f_(0.0, 0.0, 0.0)
		glVertex3f_(0.5, 0.0, 0.0)
		glVertex3f_(0.5, 0.5, 0.0)
		glVertex3f_(0.0, 0.5, 0.0)
glEnd_()
   
glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_();
gluPerspective_(45.0, 800/600, 1.0, 60.0)
glMatrixMode_(#GL_MODELVIEW)
glTranslatef_(0, 0, -4)
glShadeModel_(#GL_SMOOTH)
glEnable_(#GL_DEPTH_TEST)
glEnable_(#GL_CULL_FACE)     
glViewport_(0, 0, 800, 600)
 
 FlipBuffers()
 
 ExamineKeyboard()
 
Until KeyboardPushed(#PB_Key_Escape) Or quit = 1
Il fonctionne mais le carré rouge se déplace puis disparait rapidement... je vois pas comment corriger ça, pourriez vous m'aider svp ? Est il bien codé ?
Avatar de l’utilisateur
threedslider
Messages : 380
Inscription : dim. 01/juil./2018 22:38

Re: Problème pour OpenGL, besoin d'aide ?

Message par threedslider »

Bon apparemment personne ne veut m'aider donc je me suis débrouillé, donc c'est bon maintenant il marche bien, c'est tout bête faut juste déplacer la gl transformation en dehors de repeat, voilà, voici la correction :

Code : Tout sélectionner

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  CompilerIf Subsystem("OpenGL") = #False
    MessageRequester("Error", "Please set the subsystem to OpenGL")
    End
  CompilerEndIf
CompilerEndIf

InitEngine3D()
InitKeyboard()


OpenWindow(0, 0, 0, 800, 600, "Hello world for test with OpenGL", #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)
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_POLYGON)
    glColor3f_(1.0, 0.0, 0.0)
		glVertex3f_(0.0, 0.0, 0.0)
		glVertex3f_(0.5, 0.0, 0.0)
		glVertex3f_(0.5, 0.5, 0.0)
		glVertex3f_(0.0, 0.5, 0.0)
	glEnd_()
   
 FlipBuffers()
 
 ExamineKeyboard()
 
Until KeyboardPushed(#PB_Key_Escape) Or quit = 1
Avatar de l’utilisateur
case
Messages : 1527
Inscription : lun. 10/sept./2007 11:13

Re: Problème pour OpenGL, besoin d'aide ?

Message par case »

pas evident j'y connais rien en open gl et plus globalement en 3D;)
ImageImage
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Problème pour OpenGL, besoin d'aide ?

Message par Marc56 »

Ce n'est pas qu'on ne veut pas, mais qu'on ne sait pas.
Moi non plus, je ne fais pas de 3D, ni même de 2D
:wink:
Avatar de l’utilisateur
threedslider
Messages : 380
Inscription : dim. 01/juil./2018 22:38

Re: Problème pour OpenGL, besoin d'aide ?

Message par threedslider »

Ok ok.. désolé pour tout le monde mais cela m'a donné l’impression de ne pas m'aider mais je comprends mieux, oui c'est pas une tache facile :?

Voici un code qui fait la rotation pour le carré rouge :

Code : Tout sélectionner

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  CompilerIf Subsystem("OpenGL") = #False
    MessageRequester("Error", "Please set the subsystem to OpenGL")
    End
  CompilerEndIf
CompilerEndIf

InitEngine3D()
InitKeyboard()


OpenWindow(0, 0, 0, 800, 600, "Hello world for test with OpenGL", #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)
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_POLYGON)
    glColor3f_(1.0, 0.0, 0.0)
		glVertex3f_(0.0, 0.0, 0.0)
		glVertex3f_(0.5, 0.0, 0.0)
		glVertex3f_(0.5, 0.5, 0.0)
		glVertex3f_(0.0, 0.5, 0.0)
	glEnd_()
		
	glTranslatef_(1/4,1/4,0)
	glRotatef_(1.0, 0, 0, 1.0)
	glTranslatef_(-1/4,-1/4,0)
 
 FlipBuffers()
 
 ExamineKeyboard()
 
Until KeyboardPushed(#PB_Key_Escape) Or quit = 1
J'espère que j'ai apporté ma contribution pour vous et que vous avez appris quelque chose :mrgreen:

Happy coding !
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Problème pour OpenGL, besoin d'aide ?

Message par Micoute »

C'est vrai qu'on n'est pas très nombreux sur ce forum d'entraide, il y a eut une époque ou ça foisonnait de compétences, mais l'esprit gaulois n'aidant pas, les maîtres se sont retirés, nous laissant seuls. Merci pour le partage
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
threedslider
Messages : 380
Inscription : dim. 01/juil./2018 22:38

Re: Problème pour OpenGL, besoin d'aide ?

Message par threedslider »

Micoute a écrit : dim. 12/sept./2021 7:02 C'est vrai qu'on n'est pas très nombreux sur ce forum d'entraide, il y a eut une époque ou ça foisonnait de compétences, mais l'esprit gaulois n'aidant pas, les maîtres se sont retirés, nous laissant seuls.
Dommage ! Car on aimerait bien qu'ils nous aident un peu pour des gens qui ont la difficulté à créer avec Purebasic :lol: ... Peut être avec la PB 6.00 les maitres vont revenir ou des nouveaux utilisateurs ^^. Restons ensemble et aidons les uns des autres car unions font la force :D
Micoute a écrit : dim. 12/sept./2021 7:02 Merci pour le partage
De rien, je me sens un peu utile pour vous, merci, tu es le bienvenue à le modifier si tu le souhaites ou juste appris pour toi qui te serviras plus tard même si tu le crées pas encore tes propres systèmes en OpenGL.
Avatar de l’utilisateur
threedslider
Messages : 380
Inscription : dim. 01/juil./2018 22:38

Re: Problème pour OpenGL, besoin d'aide ?

Message par threedslider »

case a écrit : sam. 11/sept./2021 15:52 pas evident j'y connais rien en open gl et plus globalement en 3D;)
T'inquiètes à l'avenir je vais peut être faire plus de tuto sur l'utilisation en OpenGL pour ceux qui veulent apprendre la 3D ^^
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: Problème pour OpenGL, besoin d'aide ?

Message par G-Rom »

Micoute a écrit : dim. 12/sept./2021 7:02 C'est vrai qu'on n'est pas très nombreux sur ce forum d'entraide, il y a eut une époque ou ça foisonnait de compétences, mais l'esprit gaulois n'aidant pas, les maîtres se sont retirés, nous laissant seuls. Merci pour le partage
Rien a voir avec l'esprit gaulois. le Forum FR est mort depuis longtemps. des topics sur opengl , y 'en a eu de pas mal de monde, y compris moi même.
ces derniers temps , le forum était blindé de bots , j'ai reçu pas mal de mail pour des vieux topics... cela n'aide pas aux retours des "vieux", c'est plus casse pied qu'autre chose. difficile donc de trouvé une information cohérente dans le bordel.


@threeslider

Initengine3D() est superflu , initialise plutôt les spites. la première commande initialise ogre3D , tu n'en as pas besoin pour faire de l'opengl.
faire un clear color avec un alpha de 0 n'a pas de sens non plus. l'opengl que tu utilises est "obsolète" , voici un lien FR : http://www.opengl-tutorial.org/fr/beginners-tutorials/

dans ton code , tu dessines en premier des vertex , puis tu change de mode ( projection ) du charge l'identité , la perspective , tu passes en vue locale , du translate , tu actives des flags opengl , du défini un viewport , c'est pas bon tout ca , à la première frame , tout est foireux. les glenable() , pas besoin de le changer toute les frames , une seule fois cela suffit. opengl est une machine à état.
ton code corrigé :

Code : Tout sélectionner

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  CompilerIf Subsystem("OpenGL") = #False
    MessageRequester("Error", "Please set the subsystem to OpenGL")
    End
  CompilerEndIf
CompilerEndIf

InitKeyboard()
InitSprite()

OpenWindow(0, 0, 0, 800, 600, "Hello world for test with OpenGL", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600)

; INIT DES STATE OPENGL
glShadeModel_(#GL_SMOOTH)
glEnable_(#GL_DEPTH_TEST)
glEnable_(#GL_CULL_FACE)     


Repeat
glClearColor_(0.7, 0.7, 0.7, 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
   



; TA CAMERA
glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_()
; TU PEU AUSSI TRANSLATE ICI OU FAIRE DES ROTATES
gluPerspective_(45.0, 800/600, 1.0, 60.0)
  

;LE / LES OBJETS
glMatrixMode_(#GL_MODELVIEW)
glLoadIdentity_();
glTranslatef_(0, 0, -1)
glBegin_(#GL_POLYGON)
    glColor3f_(1.0, 0.0, 0.0)
		glVertex3f_(0.0, 0.0, 0.0) ; centre de ton écran
		glVertex3f_(0.5, 0.0, 0.0)
		glVertex3f_(0.5, 0.5, 0.0)
		glVertex3f_(0.0, 0.5, 0.0)
glEnd_()
   


 
 FlipBuffers()
 
 ExamineKeyboard()
 
Until KeyboardPushed(#PB_Key_Escape) Or quit = 1
Avatar de l’utilisateur
threedslider
Messages : 380
Inscription : dim. 01/juil./2018 22:38

Re: Problème pour OpenGL, besoin d'aide ?

Message par threedslider »

@G-Rom : Merci c'est plus clean, dans Purebasic c'est vrai que je suis un peu confus pour le iniengine3d() (car OpenGL n'est pas documenté pour Purebasic...) qui sert uniquement pour ogre3d. C'est pas si foireux que sa il marche quand même peut être il est pas bien codé mais bon Purebasic utilise OpenGL de façon bizarre c'est pas comme C/C++ dont ils sont plus flexible... Moi je suis intéressé par OpenGL de Purebasic plus que ogre parce je connais bien plus que ogre. Par contre je suis encore plus confus quand tu utilise initsprite() :? ... Est ce que c'est pas plutôt pour la 2D sprite ?
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: Problème pour OpenGL, besoin d'aide ?

Message par G-Rom »

Salut, quand je dit foireux, c'est uniquement à la première frame, je me suis mal exprimé. il faut juste prendre des bonnes habitudes avec opengl.
Pour initsprite() c'est pour OpenWindowedScreen(). le compilo couine sans.
Répondre