Je tente de rendre Suzanne (à partir de Blender) dans OpenGL 3.3, mais les données du tampon ne semblent pas correctes. Je reçois ceci:GlBufferData et glBufferSubData Offset
https://gyazo.com/ab82f9acb6854a49fccc527ed96cc4e8
J'ai aussi essayé de rendre une sphère avec une simple texture:
https://gyazo.com/85c1e87fcc4eab128ca37b1a0cb1deaa
Mon importateur insère les données de sommet dans un std :: vecteur flotteurs simples:
if(line.substr(0,2) == "v ")
{
/** Vertex position */
std::istringstream s(line.substr(2));
float v[3];
s >> v[0]; s >> v[1]; s >> v[2];
this->vertices.push_back(v[0]);
this->vertices.push_back(v[1]);
this->vertices.push_back(v[2]);
}
je configurer le tampon de matrice comme suit:
glGenBuffers(1, &this->vbo);
glBindBuffer(GL_ARRAY_BUFFER, this->vbo);
glBufferData(GL_ARRAY_BUFFER,
sizeof(float)*(this->vertices.size()+this->textures.size()+this->normals.size()),
NULL,
GL_STATIC_DRAW);
Et puis-je insérer les données réelles à l'aide glBufferSubData
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float)*this->vertices.size(), this->vertices.data());
glBufferSubData(GL_ARRAY_BUFFER, sizeof(float)*this->vertices.size(), sizeof(float)*this->textures.size(), this->textures.data());
glBufferSubData(GL_ARRAY_BUFFER, sizeof(float)*(this->vertices.size()+this->textures.size()), sizeof(float)*this->normals.size(), this->normals.data());
insérer également les indices de la même manière (GL_ELEMENT_ARRAY_BUFFER bien sûr).
Je signale alors l'information:
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), (GLvoid*)0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), (GLvoid*)(sizeof(float)*this->v.size()));
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), (GLvoid*)(sizeof(float)*this->v.size()+this->vt.size()));
Mon vertex shader prend dans les données comme ceci:
layout(location = 0) in vec3 position;
layout(location = 1) in vec2 texCoord;
layout(location = 2) in vec3 normals;
Suis-je en plissant les compensations?
EDIT: J'ai trouvé le plus gros problème! J'ai écrit un programme Lua externe pour convertir les fichiers obj en un format plus facile à importer, mais il a fini par jouer avec les données et en dupliquant les indices sur le "f #/#/# #/#/# #/#/# "donc le fichier ressemblait à ceci (x-> y-> x) au lieu de (x-> y-> z)
Correction d'autres erreurs grâce aux réponses ci-dessous!
Bonne prise! Je suis content que vous ayez réussi à le faire fonctionner. – Exide
Merci beaucoup pour votre aide! Tout fonctionne maintenant. : D J'ai réalisé que lorsque je dessinais un "wireframe" du mesh, j'utilisais GL_LINE_LOOP au lieu de glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); D'où les visages supplémentaires à l'intérieur de la maille. Voici la preuve: P https://gyazo.com/928640e745bfe3041798954f3f32079a – sheep