OpenGL : scintillement

dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 - 27 juil. 2004 à 19:25
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 - 5 août 2004 à 18:14
bonjour,

Je debute avec l'openGL en c++ et je n'utilise pas glut.

En fait mon prog dessine des lignes blanches dans une fenetre mais les lignes ne s'afiche que de temps en tps...

voici la fonction dessinat dans la fenetre:

void Draw()
{

glClear(GL_COLOR_BUFFER_BIT);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0,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();

SwapBuffers(DC);
}

quelqu'un peut m'expliquer d'ou vient le scintillement?

merci

12 réponses

dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
27 juil. 2004 à 19:27
j'ai oublié: le rendu est en double buffering
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 juil. 2004 à 20:25
tu fera attention de ne pas doubler les commande opengl

met uniquement
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

sinon tu initialise 2 fois le tampon de couleurs

pour tes lignes, tu dois au moins appeler la commande
glBegin(GL_LINES);

a chaque fois que tu dessine 2 vertex ou alors invoque une seule fois

glBegin(GL_LINE_STRIP);
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
27 juil. 2004 à 20:30
en fait je suis pas sur qu'il faille repeter glBegin(GL_LINES); mais c'est à essayer
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
27 juil. 2004 à 22:51
j'ai fait les modifs que tu m'a suggeré maos ca ne fonctionne pas ca scintille toujours...
Ca vient peut etre du vieux pc sur lequl je bosse...
J'attends qu'un copain teste ce prog sur un pc plus performant...mais je doute fort que ca fonctionne vu que certain progs opeGL fonctionnent bien sur ma becane...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
28 juil. 2004 à 04:51
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glHint(GL_POINT_SMOOTH_HINT,GL_NICEST);

essey meme GL_LINE_.... si ca existe
car ca ca rend le rendu sont les scintillement

sinon si tu utilise dans ton prog des texture alors ca vien de la le prob et la il foudra faire d'autre chose ;)
aller @+ et bonne chance
Life is Short 8-)
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
28 juil. 2004 à 16:30
C'st difficile de te comprendre xarier...
Je vois pas opu il faut mettre:

glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glHint(GL_POINT_SMOOTH_HINT,GL_NICEST);

je les ai mis avant glBegin(GL_LINES);

mais ca change absolument rien!
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
28 juil. 2004 à 18:01
ben tu les met dans la partie de l'initialisation de l'opengl

sinon tu ma pas dit si tu utilise des texture ???
Life is Short 8-)
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
29 juil. 2004 à 18:16
j'tilise aucune texture et ca fonctionne pas!
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
29 juil. 2004 à 18:21
alors la pardon mais pour qu'on puisse t'aider il nous faut la source :)
Life is Short 8-)
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
31 juil. 2004 à 15:20
ok je la met en entier:

#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>

HDC DC;
HGLRC RC;

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és
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é
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*/
}
}

LRESULT CALLBACK WinProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam )
{
switch(uMsg)
{
case WM_CLOSE:
wglMakeCurrent(NULL, NULL);
if (RC) wglDeleteContext(RC);
ReleaseDC(hwnd,DC);
PostQuitMessage(0);
break;
//Libère RC et DC et ferme le programme
case WM_CREATE:
DC=GetDC(hwnd);
SetupPixelFormat(DC);
RC = wglCreateContext(DC);
if (!RC) SendMessage(hwnd,WM_CLOSE,0,0);
wglMakeCurrent(DC, RC);
break;
//Récupère le DC et le RC
default:
return DefWindowProc(hwnd,
uMsg,
wParam,
lParam);
break;
//Sinon, fait le truc habituel
}
}

void Draw()
{

glMatrixMode(GL_MODELVIEW);
gluLookAt(0,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();

SwapBuffers(DC);
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HINSTANCE HInst = hInstance; //HInst est un variable globale de type HINSTANCE



WNDCLASS WindowClass =
{ 0, //Style
WinProc, //Procédure pour la gestion des messages
0, //octets supplémentaires à allouer à la classe
0, //octets supplémentaires à allouer à la fenêtre
HInst, //Handle du programme
0, //Icône
0, //Curseur
0, //Couleur d'arrière-plan
NULL, //Pointeur sur le menu associé à la classe
"La classe!" //Nom de la classe fenêtre
};
if (!RegisterClass(&WindowClass)) exit(1);


HWND OpenGLWindow = CreateWindow
( "La classe!", //Classe de la fenêtre
"Fenêtre OpenGL", //Nom de la fenêtre
WS_VISIBLE | WS_BORDER, //Caractéristiques
0, //Position x
0, //Position y
800, //Largeur
600, //Hauteur
0, //Handle de la fenêtre mère
0, //Identifiant de la fenêtre fille
HInst, //HINSTANCE du programme
NULL /*Chaine de caractère envoyée
en paramètre lors de la création
de la fenêtre*/
);

MSG msg;
do
{
while (PeekMessage(&msg,OpenGLWindow,0,0,PM_NOREMOVE))
{
if(!GetMessage(&msg,OpenGLWindow,0,0)) exit(0);
DispatchMessage(&msg);

Draw();

}
}

while(1);

}

J'espere que vous pouvez m'aider....
0
xarier Messages postés 688 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 19 mai 2005
31 juil. 2004 à 15:36
salut voila depuis la premiere vue j'ai constater que ta pas initaliser opengl( quel projection tu veut utiliser/quel sont les parametre a activer aussi ta pas vider la matrix model view avant de l'utiliser.....)alors je pense que c ca ton prob
2eme chez moi il n y pas d'effet de scintillement mais c juste que c vraimment lent
aller @+
Life is Short 8-)
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
5 août 2004 à 18:14
ouais merci de tes conseils xarier... je crois que je vais lire un utre tuto parce que celui qui m'a permis d'ecrire ce code doit etre incomplet et ne parle pas de tt ca!! Je suis donc un peu perdu!

pour ta deuxieme remarque: ca doit dependre du PC parce que par exemple chez un pote , le prog lutte trop pour afficher qqchose...

@+
0
Rejoignez-nous