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 :

Ecran de veille integrant OpenGl


Sujet :

OpenGL

  1. #1
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut Ecran de veille integrant OpenGl
    Bonjour,

    J'essaye d'intégrer OpenGl dans un écran de veille.
    J'ai trouvé un sujet : http://www.developpez.net/forums/sho...d.php?t=586624 auquel j'essaye de participer.

    J'ai essayé l'exemple que Melem a fourni.

    Ensuite, je tente d'y intégrer OpenGl pour afficher pour l'instant un repère tridimensionnel. J'ai mis sur le sujet le code principal de l'écran de veille. Mais il ne m'affiche qu'un ecran noir.

    Y aurait il quelqu'un qui pourrait m'aider ?

    Merci d'avance.
    Flo

  2. #2
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Il n'y a pas vraiment assez de code pour trouver ton erreur, mais voici un petite liste des erreurs "classique" pour un ecran noir:
    * redessin de la fenetre non-appelé
    * swapbuffer oublié
    * mauvais placement de la caméra (ou des objets)
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  3. #3
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    voici le reste du 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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #include "Include.h"
    double a=0;
     
    void SetupPixelFormat(HDC hDC)
    { 	 
      	PIXELFORMATDESCRIPTOR pfd =
    { 	 
    	sizeof(PIXELFORMATDESCRIPTOR), 	//taille du descripteur de format
    1, 	//version
    PFD_SUPPORT_OPENGL |
    PFD_DRAW_TO_WINDOW |
    PFD_DOUBLEBUFFER, 	//Propriété
    PFD_TYPE_RGBA, 	//Mode de couleurs
    16, 	//Bits de couleur
    0, 0, 0, 0, 0, 0, 	//Paramètres des couleurs
    0,0, 	//Paramètres alpha
    0,0, 0, 0, 0, 	//Paramètres du buffer d'accumulation
    32, 	//Bits de profondeur
    0, 	//Bits du buffer stencil
    0, 	//Nombre de buffers auxiliaires
    0, 	//ignoré (obsolète)
    0, 	//réservé/code>
    0, 	//ignoré (obsolète)
    0, 	//Couleur de transparence
    0 	//Ignoré (obsolète)
      	}; 	 
     
    int pixelFormat;
    pixelFormat = ChoosePixelFormat(hDC, &pfd);
    if (!pixelFormat)
    { 	
     
     
     
    MessageBox
    (
    WindowFromDC(hDC),
    "Mode graphique non supporté",
    "Problème",
    MB_ICONERROR | MB_OK
    );
    exit(1);
    	/*Vérifie si un PixelFormat du type demandé existe*/
    } 	
    if (!SetPixelFormat(hDC, pixelFormat, &pfd))
    { 	  	 
     
     
    MessageBox
    (
    WindowFromDC(hDC),
    "Mode graphique non supporté",
    "Problème",
    MB_ICONERROR | MB_OK
    );
    exit(1);
    	/*Applique le PixelFormat. Arrête si erreur*/
    } 	
    }
     
     
    void Draw()
    {
     
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    gluLookAt(3,2,3,0,0,0,0,1,0); 
     
    glBegin(GL_LINES);
      glVertex2i(0,0);glVertex2i(0,1);
      glVertex2i(0,0);glVertex2i(1,0);
      glVertex2i(0,0);glVertex3i(0,0,1);
    glEnd();
    glLoadIdentity();
    SwapBuffers(hDC); 	// glutSwapBuffers(); pour glut
    } 	
     
    void Reshape(int width, int height)
    { 	
        float r;
        r=width/height;
     
    	glViewport(0,0,width,height);
      	glMatrixMode(GL_PROJECTION);
      	glLoadIdentity();
      	gluPerspective(45.,r,0.1,100.);
    } 	
     
    void InitGL()
    {
    }
    Pour info, les coordonnées de caméra sont tiré d'un tutoriel (http://www-evasion.imag.fr/Membres/A...l/opengl3.html)

  4. #4
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Tu as oublié de spécifier une couleur pour ton repère donc tu va dessiner "noir" sur "noir" je pense.

    De plus, préfère glVertex3f à glVertex2i. (il me semble qu'il y a un soucis avec les entiers sur certaines carte graphique..)

    Enfin, il est préférable de faire le glLoadIdentity avant le gluLookAt pour réinitialiser la matrix ModelView.

    Essaye déjà avec tout ça ...
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  5. #5
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    J'ai testé avec

    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
     
    void Draw()
    {
     
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(3,2,3,0,0,0,0,1,0); 
    glBegin(GL_LINES);
      glColor3d(1,0,0);
      glVertex3f(0,0,0);glVertex3f(0,1,0);
      glVertex3f(0,0,0);glVertex3f(1,0,0);
      glVertex3f(0,0,0);glVertex3f(0,0,1);
    glEnd();
     
    SwapBuffers(hDC); 	// glutSwapBuffers(); pour glut
    }
    Pas mieux

  6. #6
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Essaye ça sans grande conviction :
    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
     
     
    void Draw()
    {
     
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(3.0f,2.0f,3.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f); 
    glBegin(GL_LINES);
      glColor3f(1.0f,0.0f,0.0f);
      glVertex3f(0.0f,0.0f,0.0f);glVertex3f(0.0f,1.0f,0.0f);
      glVertex3f(0.0f,0.0f,0.0f);glVertex3f(1.0f,0.0f,0.0f);
      glVertex3f(0.0f,0.0f,0.0f);glVertex3f(0.0f,0.0f,1.0f);
    glEnd();
     
    SwapBuffers(hDC); 	// glutSwapBuffers(); pour glut
    }
    Met un breakpoint dans ta fonction Draw pour voir si tu passe bien dedans
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  7. #7
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    en faite, il execute la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BOOL WINAPI RegisterDialogClasses(HANDLE  hInst)
    Puis ca quitte avec l'erreur (-1) !


  8. #8
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Citation Envoyé par Flob91 Voir le message
    en faite, il execute la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BOOL WINAPI RegisterDialogClasses(HANDLE  hInst)
    Puis ca quitte avec l'erreur (-1) !



    Il faut regarder pourquoi ca retourne -1, mais ça, je vais pas pouvoir t'aider plus que ça ... va voir du coté du forum API Windows si tu a un soucis...
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  9. #9
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Merci beaucoup de ton aide.

    I'll be back !

  10. #10
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Bon j'ai trouvé mon erreur (enfin on m'a aidé...).
    J'essaye de faire un cube coloré.

    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
    void Draw()
    {
     
            //        gl_rand_rect(&r);
            glClear(GL_COLOR_BUFFER_BIT);
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            gluLookAt(5,5,5,0,0,0,0,1,0);
            glBegin(GL_QUADS);
    glColor3d(1,0,0);
    glVertex3i(1,1,1);
    glVertex3i(1,-1,1);
    glVertex3i(-1,-1,1);
    glVertex3i(-1,1,1);
     
    glColor3d(0,1,1);
    glVertex3i(-1,1,1);
    glVertex3i(-1,-1,1);
    glVertex3i(-1,-1,-1);
    glVertex3i(-1,1,-1);
    	//4 faces
     
    glColor3d(1,1,0);
    glVertex3i(-1,1,-1);
    glVertex3i(-1,1,1);
    glVertex3i(1,1,1);
    glVertex3i(1,1,-1);
    	//5 faces
     
    glColor3d(1,0,1);
    glVertex3i(-1,-1,-1);
    glVertex3i(-1,-1,1);
    glVertex3i(1,-1,1);
    glVertex3i(1,-1,-1);
     
    glColor3d(0,0,1);
    glVertex3i(1,1,1);
    glVertex3i(1,-1,1);
    glVertex3i(1,-1,-1);
    glVertex3i(1,1,-1);
     
    glColor3d(0,1,0);
    glVertex3i(1,1,-1);
    glVertex3i(1,-1,-1);
    glVertex3i(-1,-1,-1);
    glVertex3i(-1,1,-1);
     
            glEnd();
            glFlush();
    }
    ps : j'ai mis le Draw() dans WM_TIMER

    Mais il n'affiche qu'une seule fois (après il disparait) le cube dans le coin droite en bas...

    [EDIT] De plus de l'afficher n'importe ou, il m'affiche un pseudo cube totalement pas cube....(en essayant de centrer la vu avec glulookat(...)
    J'ai essayer avec le repère tridimensionnel ca m'affiche également n'importe quoi

  11. #11
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Ca marche ou pas ?

    Par contre, il n'est pas nécessaire d'appeler deux fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    glClear(GL_COLOR_BUFFER_BIT); //<========= a supprimer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    Le deuxième est suffisant. En plus, ca coute très cher d'effacer deux fois l'écran.
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  12. #12
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 162
    Points : 172
    Points
    172
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gluLookAt(5,5,5,0,0,0,0,1,0);
    Pour que ca soit correcte il faut calculer correctement le vecteur up.
    Mais ca va pas resoudre ton probleme

  13. #13
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Citation Envoyé par goast Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gluLookAt(5,5,5,0,0,0,0,1,0);
    Pour que ca soit correcte il faut calculer correctement le vecteur up.
    Mais ca va pas resoudre ton probleme
    Il n'y a rien a calculé pour le vecteur up . C'est juste un choix d'orientation de la caméra. C'est généralement ce qui donne le vecteur "up" de ton repère.
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  14. #14
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 162
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par raptor70 Voir le message
    Il n'y a rien a calculé pour le vecteur up . C'est juste un choix d'orientation de la caméra. C'est généralement ce qui donne le vecteur "up" de ton repère.
    le vecteur up doit etre orthodonal au vecteur directeur de la camera si non il y a distortions des points qui sont eloigné du centre de la vue

  15. #15
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Citation Envoyé par goast Voir le message
    le vecteur up doit etre orthodonal au vecteur directeur de la camera si non il y a distortions des points qui sont eloigné du centre de la vue
    Absolument pas, cette distorsion est due au reglage de gluPersepective (ou glFrustrum).

    gluLookAt se contente de positionner la caméra dans ton univers 3D indépendamment de ta vue. gluLookAt correspond en fait à un ensemble de glTranslation et glRotate, ce qui tout à fait indépendant du rendu proprement dit.
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  16. #16
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    Merci de vos conseils,

    J'ai finalement trouvé avec l'aide Melem.

    MErci quand meme de votre aide.

  17. #17
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Je viens de voir le post, pourtant, tu avais bien mis ta fonction "Reshape" dans le code que tu nous avais donné .. mais apparemment pas appelé la première fois ...

    C'est alors ?
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  18. #18
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    tu pourrais partager la solution qu'on t'a apporté ?
    ça concernerait pas un glLoadIdentity(); oublié avant le gluLookAt ?
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  19. #19
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    y a pas de probleme pour a solution,
    je suis pas chez moi, je metterais la solution demain sans faute

    Bye

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

Discussions similaires

  1. Arret Ecran de veille
    Par Scyrius dans le forum Windows
    Réponses: 3
    Dernier message: 15/10/2005, 14h50
  2. Detecter la fin d'un ecran de veille
    Par fredderf dans le forum MFC
    Réponses: 12
    Dernier message: 13/06/2005, 17h08
  3. Désactiver ecran de veille
    Par Syriac dans le forum Windows
    Réponses: 3
    Dernier message: 26/11/2004, 14h09
  4. ecran de veille
    Par Gandalf_new dans le forum MFC
    Réponses: 2
    Dernier message: 16/03/2004, 12h20
  5. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25

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