IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

wxWidgets et OpenGL


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut wxWidgets et OpenGL
    Bonjour,

    J'esseye de faire une application graphique avec wxWidgets qui contient de l'opengl et que l'ont puisse redimensionner la fenêtre.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #include "main.h"
     
    MyFrame_main::MyFrame_main() : wxFrame(NULL, -1, "Hello GL World", wxPoint(-1, -1), wxSize(1024,790), wxDEFAULT_FRAME_STYLE)
    {
    	MyGLCanvas = new wxGLCanvas(this, -1, wxPoint(0,0));
    	wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
    	sizer->Add(MyGLCanvas, 1, wxALL|wxEXPAND, 0);
    	SetSizer(sizer);
    	SetAutoLayout(true);
    	Layout();
     
    	Show(true);
     
    	MyGLCanvas->SetCurrent();
    	wxSafeYield();
     
    	initialization ();
    	drawScene();
     
    	MyGLCanvas->SwapBuffers();
    }
     
    void MyFrame_main::initialization()
    {
    	glShadeModel(GL_SMOOTH);
    	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    	glClearDepth(1.0f);
    	glEnable(GL_DEPTH_TEST);
    	glDepthFunc(GL_LEQUAL);
    	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    }
     
    void MyFrame_main::drawScene()
    {	
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glLoadIdentity();
     
    	glTranslatef(-1.5f,0.0f,-6.0f);
    	glBegin(GL_TRIANGLES);
    		glVertex3f( 0.0f, 1.0f, 0.0f);
    		glVertex3f(-1.0f,-1.0f, 0.0f);
    		glVertex3f( 1.0f,-1.0f, 0.0f);
    	glEnd();
     
    	glFlush();
    }
     
    void MyFrame_main::onResize(wxSizeEvent& event)
    {
    	Layout();
    	GetSize(&width, &height);
     
    	glViewport(0, 0, width, height);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
     
    	gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
     
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    }
     
    BEGIN_EVENT_TABLE(MyFrame_main, wxFrame)
    	EVT_SIZE(MyFrame_main::onResize)
    END_EVENT_TABLE()
     
    IMPLEMENT_APP(Ini);
    bool Ini::OnInit()
    {
    	MyFrame_main *frame = new MyFrame_main();
    	frame->Show(TRUE);
     
    	return true;
    }
    Et le main.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #ifndef WXRAD_MAIN_H
    #define WXRAD_MAIN_H
     
    #include <math.h>
    #include <gl\glu.h>	
     
    #include <wx/wx.h>
    #include <wx/glcanvas.h>
     
    class Ini: public wxApp
    {
    	public:
    		virtual bool OnInit();
    };
     
    class MyFrame_main: public wxFrame
    {
    	public:
    		MyFrame_main();
    		void onResize(wxSizeEvent& event);
     
    		void initialization();
    		void drawScene();
    	private:
    		wxGLCanvas *MyGLCanvas;
    		int width, height;
    	protected:
    		DECLARE_EVENT_TABLE()
    };
     
    DECLARE_APP(Ini);
     
    #endif
    Tout ce passe bien (l'application m'affiche un triangle) mais quand je redimentionne, la taille du wxGLCanvas ne semble pas bouger, pourquoi ?

    NB: Je me suis inspiré de http://nehe.gamedev.net/data/lessons....asp?lesson=01 pour faire ce code.
    NB2: Ce n'est que mon deuxième jour avec OpenGL...alors soyer simple dans vos explications si l'erreur vient d'OpenGl

    Merci d'avance...

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    a priori, le code openGL semble bon. par contre je ne vois qu'un seul appel à drawScene. il faudrais :
    • soit utiliser une boucle qui rafraichi la fenetre regulierement
    • soit mettre un appel a drawScene à la fin de onResize
    • soit utiliser un evenement repaint (je ne me souvient plus trop comment on le fait avec wxWidget mais ca doit bien exister)
    voila, avec ca ca devrais marcher
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut
    Merci ça fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. makefile pour integrer wxWidgets et OpenGL
    Par Siempre Adelante-> dans le forum wxWidgets
    Réponses: 0
    Dernier message: 13/03/2008, 20h47
  2. wxwidget et opengl
    Par ADABLA dans le forum OpenGL
    Réponses: 0
    Dernier message: 26/12/2007, 20h03
  3. Réponses: 8
    Dernier message: 04/06/2007, 11h51
  4. wxwidgets et openGL
    Par hansaplast dans le forum OpenGL
    Réponses: 3
    Dernier message: 15/03/2006, 15h32
  5. wxWidget + OpenGL
    Par shenron666 dans le forum OpenGL
    Réponses: 2
    Dernier message: 23/02/2006, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo