POUR DÉPLACER DES OBJETS 3D DANS UNE SCÈNE WINDOWS 3D

alfrai Messages postés 69 Date d'inscription mardi 11 avril 2006 Statut Membre Dernière intervention 23 juillet 2013 - 3 mars 2013 à 02:04
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 - 9 avril 2013 à 09:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/55010-pour-deplacer-des-objets-3d-dans-une-scene-windows-3d

pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
9 avril 2013 à 09:56
Shenron666 : En août 2008, M. Cyril Doillon, déjà cité dans mon commentaire du 10/03/2013, a publié un document ayant pour titre : "La géométrie en OpenGL : vers les VertexBufferObject" Il y compare les avantages et inconvénients de la méthode de dessin immédiat ( glBegin, glEnd, glVertex, ... ), de celle des Vertex Array et de celle des Vertex Buffer Object. En ce qui concerne le dessin immédiat, il explique bien que cela comporte un grand nombre d'inconvénients très gênants pour des applications "tempsréel" en raison d'échanges très nombreux entre CPU et GPU. Mais il cite aussi les avantages de ces fonctions, lesquelles sont dites ailleurs "obsolètes" et "dépréciées", et je cite : - Permet de définir indépendamment chacune des informations des vertex - Permet d'augmenter la lisibilité du code - Regroupe clairement chaque rendu par type de primitives. Le commentaire de CptPingu indiquait déjà cela. J'en déduis que cette utilisation n'est pas "peu lisible" pour tout le monde. J'aimerais bien voir la "traduction" de mon code avec les VBO bien que mon vrai sujet concerne le placement des objets dans la scène, leur affichage est nécessaire mais accessoire ici.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
7 avril 2013 à 21:01
Tu as le droit de ne pas être d'accord mais je maintient mes propos :
Le code serai plus lisible sans toutes ces fonctions dépréciées.
et mes commentaires ne gênent en rien ceux qui veulent s'exprimer, ils sont toujours aussi libres de le faire.
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
7 avril 2013 à 09:41
Merci Shorzy. Je peux même dire cela autrement. Le fait d'appeler deux fois, deux fois seulement, la fonction glGetDouble() à chaque affichage de chaque objet de la scène doit augmenter les échanges entre CPU et GPU ce qui peut diminuer les performances. Il serait peut-être plus judicieux de faire directement ces calculs matriciels sans passer par OpenGL pour cela, ce qui est très facile à faire maintenant que l'on sait la méthode utilisée. Voici donc un commentaire qui aurait pu valablement être fait concernant ce démonstrateur. C'est autre chose que de critiquer les fonctions directes glBegin(), glEnd, glVertex3d(),... utilisées ici pour afficher un triangle et un rectangle. Utiliser pour cela les VBO complique le démonstrateur et ne change rien à mon sujet. Ce qui est dommage, c'est de penser que des propos hors sujet peuvent gêner ceux qui auraient voulu s'exprimer au sujet de la méthode exposée.
shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013
24 mars 2013 à 15:27
J'aime bien, et je soutient PGL10 (10/10) !!!
"Aujourd'hui on en prends plein la Gueule pour pas un rond !!!"
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
23 mars 2013 à 08:44
CptPingu : merci beaucoup. A partir de ce démonstrateur j'ai pu assez facilement développer Polymoff : un compositeur de scènes 3d. Les fonctions présentées ici y sont essentielles pour placer et déplacer les objets de la scène.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 mars 2013 à 19:34
Bonjour.

Certes il utilise des commandes dépréciées, mais je comprends son choix. Les nouvelles API sont bien mieux, et plus efficaces à "haut niveau", mais pour réaliser une simple action basique, c'est tout de même un peu "overkill". Son code utilise peu d'OpenGL, et il a voulu mettre l'emphase sur son code, plutôt que sur l'optimisation du code OpenGL.
Le code présenté ici, est destiné aux débutants, et leur mettre d'emblée un vbo avec données entrelacées, un shader, et faire translation et rotation soi même via des matrices, est peut être meilleur, mais absolument incompréhensible pour un débutant... De plus, le code pour faire tout ceci, aurait été plus long que le code qu'il voulait présenter, ce qui aurait été un comble !

La note donnée est particulièrement rude. Un simple commentaire: "fait en OpenGL 1.x, voir OpenGL > 3.x pour une meilleur façon de faire", aurait été suffisant.
Je vais exceptionnellement mettre un 10 (je ne note pas, normalement), pour remonter la note, qui est à mon sens un petit peu trop sous noté (je rappelle que l'OpenGL n'est pas la majeur partie du code présenté, mais un simple "à côté". Il n'a pas eu la prétention de présenter un jeu ou un moteur graphique).
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
19 mars 2013 à 11:16
Le problème est que les instructions gl* rendent le code illisible
il serait plus pertinent d'avoir la définition des formes dans des tableaux ou des fichiers externes
et d'utiliser les VBO pour l'affichage

comme vous dites, les utilisateurs opengl connaissent les instructions gl*
mais ils savent aussi qu'il ne faut plus les utiliser
et il ne faudrait pas former les nouveaux venus sur une API obsolète
d'où mon commentaire
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
19 mars 2013 à 10:27
Le commentaire de Shenron666 a peu d'intérêt dans ce contexte. En effet ce que je montre ici est une méthode pour effectuer la mise à l'échelle, les translations et les rotations de l'objet affiché dans ses axes propres et non pas dans ceux de la scène où il se trouve. Pour cela, à chaque objet on associe un coefficient de zoom et deux matrices 4x4, l'une accumule les translations et l'autre les rotations. Ce programme montre comment s'en servir. Je crois que je l'avais bien expliqué. C'est une question qui est souvent posée dans les forums et qui, habituellement, ne reçoit pas de réponses appropriées. Certes les instructions glVertex3d(), glColor(), ... sont dépréciées mais tous les utilisateurs d'OpenGL les connaissent. Elles ne sont pas essentielles ici, elles ne sont là que pour démontrer que la méthode utilisée fonctionne comme on le souhaite. Leur emploi permet au plus grand nombre de visiteurs de comprendre facilement le fonctionnement de ce démonstrateur. De plus, j'avais d'avance souhaité la bienvenue à toute méthode plus perfectionnée.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
17 mars 2013 à 18:05
Votre code respecte les normes opengl 1.x, je vous conseille de vous former dès maintenant sur opengl 3.x minimum
les instructions du pipeline fixe sont désormais obsolètes (glVertex, glColor, etc...)
pgl10 Messages postés 380 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 29 octobre 2023 11
10 mars 2013 à 20:24
A : http://raptor.developpez.com/tutorial/opengl/skybox/ on trouve la publication de M. Cyril Doillon sur le "skybox" que j'ai utilisée et adaptée ici.
alfrai Messages postés 69 Date d'inscription mardi 11 avril 2006 Statut Membre Dernière intervention 23 juillet 2013
3 mars 2013 à 02:04
Merci pour le code !