Page 1 sur 2

OpenGL - Tutoriaux - 22 leçons !

Publié : dim. 07/janv./2007 22:56
par Flype
Un membre du forum anglais hagibaba publie depuis quelques temps
des tutoriaux OpenGL directement traduit des tutoriaux de Nehe Productions.

Pour les curieux, j'ai compilé une petite archive toute prête pour essayer.

NeHe Productions :
http://nehe.gamedev.net/
http://nehe.gamedev.net/data/lessons/le ... ?lesson=01

Traduction PB4 par hagibaba :
Leçon 01: http://www.purebasic.fr/english/viewtopic.php?t=25195
Leçon 02: http://www.purebasic.fr/english/viewtopic.php?t=25196
Leçon 03: http://www.purebasic.fr/english/viewtopic.php?t=25197
Leçon 04: http://www.purebasic.fr/english/viewtopic.php?t=25198
Leçon 05: http://www.purebasic.fr/english/viewtopic.php?t=25199
Leçon 06: http://www.purebasic.fr/english/viewtopic.php?t=25250
Leçon 07: http://www.purebasic.fr/english/viewtopic.php?t=25251
Leçon 08: http://www.purebasic.fr/english/viewtopic.php?t=25252
Leçon 09: http://www.purebasic.fr/english/viewtopic.php?t=25285
Leçon 10: http://www.purebasic.fr/english/viewtopic.php?t=25295
Leçon 11: http://www.purebasic.fr/english/viewtopic.php?t=25315
Leçon 12: http://www.purebasic.fr/english/viewtopic.php?t=25316
Leçon 13: http://www.purebasic.fr/english/viewtopic.php?t=25317
Leçon 14: http://www.purebasic.fr/english/viewtopic.php?t=25343
Leçon 15: http://www.purebasic.fr/english/viewtopic.php?t=25344
Leçon 16: http://www.purebasic.fr/english/viewtopic.php?t=25354
Leçon 17: http://www.purebasic.fr/english/viewtopic.php?t=25369
Leçon 18: http://www.purebasic.fr/english/viewtopic.php?t=25371
Leçon 19: http://www.purebasic.fr/english/viewtopic.php?t=25381
Leçon 20: http://www.purebasic.fr/english/viewtopic.php?t=25396
Leçon 21: http://www.purebasic.fr/english/viewtopic.php?t=25417
Leçon 22: http://www.purebasic.fr/english/viewtopic.php?t=25549
Leçon 23: à suivre...


Archive - ZIP - 1240Ko ( Sources + Includes + Datas ) :
NeheProduction.zip

Publié : lun. 08/janv./2007 0:44
par flaith
Merci pour l'archive :D

Publié : lun. 08/janv./2007 12:47
par comtois
Oui c'est cool , du coup je vais tester, sinon j'avais la flemme de télécharger les fichiers manquants :)

Merci Flype

Publié : lun. 08/janv./2007 13:50
par Flype
oui moi aussi j'avais la flemme et puis çà m'a pris d'un coup
alors je me suis dit autant en faire profiter tout le monde.

Publié : sam. 13/janv./2007 16:39
par Flype
ajout des leçons 11 à 18.

Publié : lun. 15/janv./2007 16:19
par Flype
ajout des leçons 19 à 20.

Publié : jeu. 25/janv./2007 6:15
par Flype
ajout des leçons 21 à 22.

Publié : sam. 27/janv./2007 18:42
par comtois
Merci pour la compil Flype , j'adore le jeu de la leçon 21, simple et efficace.
Par contre j'ai deux carrés blancs avec la leçon 22 ? je suis le seul ?
J'ai vu que hagibaba avait corrigé tous ses codes sources pour prendre en compte les images au format 1,4, 8 et 24 bits.
hagibaba a écrit :The new LoadBMP procedure supports 1,4,8 and 24 bits.

Publié : sam. 27/janv./2007 19:58
par flaith
comtois a écrit :Merci pour la compil Flype , j'adore le jeu de la leçon 21, simple et efficace.
Pareil :)
comtois a écrit :Par contre j'ai deux carrés blancs avec la leçon 22 ? je suis le seul ?
Pareil aussi !

Publié : sam. 27/janv./2007 20:40
par comtois
C'est normal , dans le post d'origine il y a ça :
This shows how to do multi-texturing, "fake" bump mapping and textures with an alpha channel.
Press M key for multi-texturing, B key for bump mapping, E for emboss effect, F key for filters, Arrows to rotate cube, Pageup/Pagedown to zoom.

Note: i don't think multi-texturing is working at the moment.

Publié : dim. 23/sept./2007 13:51
par Guimauve
J'étudie à fond les exemples et en gérénal ça va. Sauf qu'il y a une procédure que je ne comprends pas trop sa raison d'être. C'est celle-ci :

Code : Tout sélectionner

Procedure.l WndProc(hWndParam.l, uMsg.l, wParam.l, lParam.l)
  
  Select uMsg 
    
    Case #WM_ACTIVATE
      If HIWORD(wParam)=0 
        active=#True 
      Else
        active=#False ;Program Is No Longer Active
      EndIf
      ProcedureReturn 0 ;Return To The Message Loop
      
    Case #WM_SYSCOMMAND ;Intercept System Commands
      Select wParam ;Check System Calls
        Case #SC_SCREENSAVE ;Screensaver Trying To Start?
          ProcedureReturn 0 ;Prevent From Happening
        Case #SC_MONITORPOWER ;Monitor Trying To Enter Powersave?
          ProcedureReturn 0 ;Prevent From Happening
      EndSelect
      
    Case #WM_CLOSE ;Did We Receive A Close Message?
      PostQuitMessage_(0) ;Send A Quit Message
      ProcedureReturn 0 ;Jump Back
      
    Case #WM_KEYDOWN ;Is A Key Being Held Down?
      keys(wParam)=#True ;If So, Mark It As TRUE
      ProcedureReturn 0 ;Jump Back
      
    Case #WM_KEYUP ;Has A Key Been Released?
      keys(wParam)=#False ;If So, Mark It As FALSE
      ProcedureReturn 0 ;Jump Back
      
    Case #WM_SIZE ;Resize The OpenGL Window
      ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)) ;LoWord=Width, HiWord=Height
      ProcedureReturn 0 ;Jump Back
      
  EndSelect
  
  ;Pass All Unhandled Messages To DefWindowProc
  ProcedureReturn DefWindowProc_(hWndParam,uMsg,wParam,lParam)
  
EndProcedure
À première vue cette procédure travaille en arrière plan. La question qui me semble la plus évidente :

Pourquoi gérer une partie des messages reçu par la fenètre par l'intermédiare de cette procédure et l'autre partie dans la boucle principale du programme avec les commandes PeekMessage_(), TranslateMessage_() et DispatchMessage_() ?

Merçi à l'avance.

A+
Guimauve

Publié : dim. 23/sept./2007 14:01
par Ollivier
C'est une manière de structurer et de ne pas s'encombrer par le superflu. S'il y a des filtres à rajouter dans la routine principale, tout ce qui est coupure et mise en veille ne s'en trouve pas affecté.

Publié : dim. 23/sept./2007 14:11
par Guimauve
Donc si je comprend bien, je pourrais sans problème simplifier cette procédure comme ceci :

Code : Tout sélectionner

Procedure.l WndProc(hWndParam.l, uMsg.l, wParam.l, lParam.l)
  
  Select uMsg
    
    Case #WM_SYSCOMMAND ;Intercept System Commands
      Select wParam ;Check System Calls
        Case #SC_SCREENSAVE ;Screensaver Trying To Start?
          ProcedureReturn 0 ;Prevent From Happening
        Case #SC_MONITORPOWER ;Monitor Trying To Enter Powersave?
          ProcedureReturn 0 ;Prevent From Happening
      EndSelect
      
    Case #WM_CLOSE ;Did We Receive A Close Message?
      PostQuitMessage_(0) ;Send A Quit Message
      ProcedureReturn 0 ;Jump Back
      
  EndSelect
  
  ;Pass All Unhandled Messages To DefWindowProc
  ProcedureReturn DefWindowProc_(hWndParam,uMsg,wParam,lParam)
  
EndProcedure
Et gérer le reste dans la boucle principale.

A+
Guimauve

Publié : dim. 23/sept./2007 17:22
par Ollivier
Pour ma part, je te conseillerais de vérifier quelle partie de code utilise le tableau Keys() avant de virer ça. Ptêt que Flype pourra te renseigner plus clairement sur cette procédure.

Publié : dim. 23/sept./2007 19:21
par Guimauve
Et bien quand la fenètre est ouverte elle reçoit les informations depuis le clavier et la souris.
Le tableau Keys() sert à savoir si une touche du clavier à été pressé ou non. Puisque cette
procédure s'exécute en arrière plan, elle ne peut que travailler sur des variables globales.
Ça fonctionne bien, le problème c'est que l'architecture du code ne correspond pas à
mes standards de programmation à savoir : RIEN EN GLOBAL

Je cherche un moyen de soit de la réduire le plus possible ou voir même la supprimer du
code. De toute façon, je ne pourrai pas travailler la dessus avant la fin de semaine prochaine.

A+
Guimauve