WxWidgets/Opengl/Linux - C++ - Programmation
Marsh Posté le 17-07-2006 à 12:17:47
Il ne faudrait pas calculer les normales aux faces pour que cullface soit efficace ?
Marsh Posté le 17-07-2006 à 12:18:43
sinon les inits d'indices, de sommets et les glenable devraient plutot etre dans ton main, pas dans ta fonction de rendu.
Marsh Posté le 17-07-2006 à 19:48:53
Merci pour tes réponses.
Bon voici mon code en peu mieux programmé
Code :
|
Il y a un petit changement par rapport à mon code précédent : Si j'active ou non le "GL_CULL_FACE" , mon cube s'affiche mal, savez-vous pourquoi ?.
Marsh Posté le 17-07-2006 à 21:27:09
petite précision : normalement non, si tu ne précises pas de normale particulière, cullface marche toujours ! la normale qui est prise est la normale qui est "vissée" quand on tourne dans le sens des sommets du polygones.
[edit] vissée... enfin, ca dépend si on a choisi "gl_back" ou "gl_front"
[reEdit] Je dis une conerie, pardon... en fait, la normale n'a rien à voir avec cullface !!! la regle que j'ai cité plus haut est vraie quelle que soit la normale spécifiée on peut avoir le droit de metre une normale dans le mauvais sens par rapport à celle par défaut !!!
Marsh Posté le 17-07-2006 à 21:33:02
Par contre, aparement dans ton code, tu te fais chi**r à mettre tous les nombres dans le tableau un par un... on peut faire plus facilement :
au lieu de
indices[0]=1.0f; .... indices[n]=12.0f;
tu peux mettre:
indices = {1.0f, ....... , 12.0f};
...plus simple
Marsh Posté le 17-07-2006 à 21:59:43
Grrrr j'avais perdu la mémoire et donc j'avais esseyé : indices[] = {1.0f, ....... , 12.0f}; et ça ne voulait pas fonctionner , lol
J'ai pas tout compris à ton message sur les normales mais bon...si je désactive le GL_CULL_FACE, le programme foire quand meme
Pour info: Si j'affiche que la face "front" et "right" et bien la face "right" est toujours visible lors de la rotation alors qu'elle devrait être temps en temps caché par la face "front" : est-ce un problème de test de profondeur ?!
Marsh Posté le 17-07-2006 à 22:08:25
mon message sur les normales dit juste que ya pas besoin de spécifier les normales (comme le disait darkalt3) pour que glCullface marche
faudrait que tu montre un screenshot, mais faut croire que oui, c'est un pb de test de profondeur... reste a savoir prquoi ...
Marsh Posté le 17-07-2006 à 22:15:42
essaye de changer de place le bloc avec glEnable(GL_DEPTH_TEST)
Marsh Posté le 17-07-2006 à 22:41:59
J'ai l'impression que toutes les fonctions d'opengl se trouvant dans le constructeur myGLCanvas ne fonctionne pas !
Si je met glEnable(GL_DEPTH_TEST) dans la condition "if(redefineProjection)" : ça fonctionne....
Pareil pour glClearColor...en fait il ne fonctionne pas sauf si je le met dans la condition !!
J'ai déjà du ajouter la condition "if(redefineProjection)" parce que les fonctions d'Opengl ne voulait pas fonctionner dans "myGLCanvas:: onSize" !!!
Savez-vous pourquoi la fonction Opengl ne fonctionne que dans myGLCanvas:: onIdle ?!
Marsh Posté le 17-07-2006 à 22:45:20
quand sont executées ces fonctions ???
c'est multithreadé ? faut savoir qu'on peut pas executer des fonctions opengl dans differents threads
Marsh Posté le 17-07-2006 à 22:54:48
Hum, il faudrait demander à un gars plus doué que moi en wxWidgets...mais je pense quand même qu'il y a des thread : si quelqu'un peut confirmer.
Merci icareo
Marsh Posté le 17-07-2006 à 10:09:10
Bonjour,
Voici mon code source qui est cencé m'afficher un cube qui tourne:
Ce code fonctionne très bien sur Linux et sur Windows.
Mais si j'enlève les 2 lignes suivantes, le code ne fonctionne plus sur Linux (et il fonctionne toujours sur Windows), pourquoi ?
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
Voici le résultat sur Linux : http://zenux.free.fr/cube.jpg (certaines faces semble transparente, d'autre non...!!)
Merci d'avance...
Message édité par casafa le 17-07-2006 à 10:14:03