|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Nouveau Membre du Club
![]() Lycéen Inscription : avril 2011 Messages : 83 ![]() |
Bonjour à tous
Je m'intéresse en ce moment aux vbos et je doit dire que malgré de nombreux tutos je galère encore pas mal et je me heurte à un problème d'affichage pour ne serait-ce qu'un cube. Je ne vois en effet aucun point s'afficher lorsque j'utilise les vbos, ce qui n'est pas le cas avec une méthode "classique" glBegin(...) (mon problème ne vient donc pas d'un mauvais positionnement de la caméra ou quelque chose dans le genre). Voici mon code : Code :
Le problème est donc lors de l'affichage, mais je ne sais pas où (voici mon code) : Code :
J'espère avoir été relativement clair, si vous avez des questions n'hésitez pas |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() |
std::list est un très mauvais choix pour un VBO car les données ne sont pas dans un espace mémoire contigü.
Utilise des std::vector qui eux garantissent la contigüité des données en mémoire. De plus, donner le pointeur directement ne fera pas non plus ton affaire, je te conseille de passer un pointeur sur le premier élément de ton vector : & (*m_vertexBuffer)[0]
__________________
Si vous ne trouvez plus rien, cherchez autre chose... Chef de projet (et unique exécutant pour l'instant) pour Castor 3D |
|
|
40
|
|
|
#3 | ||
![]() ![]() ![]() Alexandre LaurentÉtudiant Inscription : mai 2008 Messages : 6 560 ![]() |
Bonjour,
Code :
Je vous conseille d'utiliser un débogueur, du style gDEBugger (qui est maintenant gratuit). Il vous permettra de voir le contenu des buffers envoyés à OpenGL et même de les afficher selon les stride / offset (ça ne peut qu'aider).
__________________
Vous souhaitez participer à la section Jeux ? Contactez-moi ![]() La rubrique a aussi un blog ! Ma page sur DVP Mon Portfolio Qui connaît l'erreur, connaît la solution. |
||
|
|
01
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Lycéen Inscription : avril 2011 Messages : 83 ![]() |
Je viens de trouver un problème important grâce au debugger que tu m'as indiqué (je t'en remercie d'ailleurs cet outil m'a l'air d'être bien adapté
). En effet, lors de l'initialisation dynamique des buffers, je donnais une taille de sizeof(vertexBuffer.size()) à la place de vertexBuffer.size() (j'avais oublié d'enlevé le sizeof car je testais d'autres choses). Les vbo ne contenaient en effet pas assez de données (d'après le debugger). J'ai également changé les list en vector même si il était évident que cela ne changerait rien au problème même si c'est toujours utile |
|
|
00
|
|
|
#5 | ||
![]() ![]() Guillaume BelzBiochimiste Inscription : novembre 2008 Messages : 2 866 ![]() |
Citation:
Est ce que tu réalises ce que tu récupère avec le sizeof suivant : Citation:
Utiliser un vector n'est pas optionnel ici Il semble qu'il te manque des bases en C++ et en gpu. Tu peux lire le tutoriel que j'ai donné Bon courage
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP. Ma page personnelle avec la liste de mes articles - Mon blog sur la programmation des GPU. Je suis régulièrement sur le chat pour les questions C++/Qt. |
||
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Lycéen Inscription : avril 2011 Messages : 83 ![]() |
En fait je dupliquais les buffers :
la liste (maintenant le vector) passé(e) en argument était pointée à l'intérieur de la classe afin de récupérer la taille du buffer, et ses données étaient recopiées à l'intérieur d'un tableau dynamique alloué par new[taille du vector passé en argument] permettant de le passer en argument lors de la construction du VBO (je ne passais pas l'adresse du vector (de la liste) car je ne savais pas que les données dans un vector étaient contigues, ce qui explique pourquoi je pensais que mettre des vector à la place de liste ne changerait rien Je suis peut être en train de me tromper en disant cela, si c'est le cas dites le moi car mon niveau n'est pas très élevé, surtout en ce qui concerne opengl que je n'ai pas encore eu l'occasion d'utiliser réellement Pour ce qui concerne la taille des buffers passée en argument lors de la construction du vbo, j'ai effectivement oublié le sizeof(type de données). Maintenant les vbo sont bien construits et contiennent les bonnes données mais pourtant toujours rien ne s'affiche. Avez-vous une explication ? (encore une ^^) Je peux vous repasser le code si vous le souhaitez |
|
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Lycéen Inscription : avril 2011 Messages : 83 ![]() |
Ca y est j'ai trouvé
J'ai regardé la doc opengl et je me suis rendu compte que le troisième paramètre de la fonction glvertexpointer (ou glcolorpointer) n'était pas la taille du tableau mais "l'espace" entre chaque vertex dans le buffer ![]() Maintenant le cube s'affiche correctement sujet résolu merci pour votre aide ![]()
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com