Ich versuche Suzanne (von Blender) in OpenGL 3.3 zu rendern, aber die Pufferdaten scheinen nicht korrekt zu sein. Ich bekomme diese:glBufferData und glBufferSubData Offset
https://gyazo.com/ab82f9acb6854a49fccc527ed96cc4e8
ich auch eine Kugel mit einer einfachen Textur zu machen versucht:
https://gyazo.com/85c1e87fcc4eab128ca37b1a0cb1deaa
Mein Importeur fügt die Vertexdaten in ein std :: vector als einzelne Schwimmer:
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]);
}
I Setup der Array-Puffer, wie folgt:
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);
Und dann füge ich die aktuellen Daten mit 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());
ich auch die Indizes in der gleichen Art und Weise einsetzen (GL_ELEMENT_ARRAY_BUFFER natürlich).
ich zeigen Sie dann auf die Informationen:
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()));
Mein Vertex-Shader in den Daten wie dies geschieht:
layout(location = 0) in vec3 position;
layout(location = 1) in vec2 texCoord;
layout(location = 2) in vec3 normals;
Bin ich die Versätze vermasseln?
EDIT: Ich fand das größte Problem! Ich schrieb ein externes Lua-Programm, um die Obj-Dateien in ein Format zu konvertieren, das leichter zu importieren war, aber es endete damit, dass ich mit den Daten herumhantierte und die Indizes auf den "f #/#/# #/#/# #/#/# "so sah die Datei so aus (x-> y-> x) anstelle von (x-> y-> z)
Auch ein paar andere Fehler behoben dank der Antworten unten!
Guter Fang! Ich bin froh, dass du es zum Laufen gebracht hast. – Exide
Vielen Dank für Ihre Hilfe! Alles funktioniert jetzt. : D Ich erkannte, dass wenn ich ein "Drahtmodell" des Netzes zeichnete, ich GL_LINE_LOOP statt glPolygonMode (GL_FRONT_AND_BACK, GL_LINE) verwendete; Daher die zusätzlichen Flächen auf der Innenseite des Netzes. Hier ist der Beweis: P https://gyazo.com/928640e745bfe3041798954f3f32079a – sheep