Wavefront OBJ 3Dオブジェクトファイルを処理するパーサーを使用していますが、OpenGLへの読み込みが正しく行われているかどうかはよくわかりません。
つまり、基本的に私がしていることは、Wavefront OBJファイルを読み取り、すべてのデータを解析することです。
通常、OpenGL ES 1.1では、データをロードするときに次のことを行います。
glBegin(GL_TRIANGLES);
glNormal3f(normals[faces[i].normal[0]].v[0], normals[faces[i].normal[0]].v[1], normals[faces[i].normal[0]].v[2]);
glVertex3f(vertices[faces[i].vertex[0]].v[0], vertices[faces[i].vertex[0]].v[1], vertices[faces[i].vertex[0]].v[2]);
glNormal3f(normals[faces[i].normal[1]].v[0], normals[faces[i].normal[1]].v[1], normals[faces[i].normal[1]].v[2]);
glVertex3f(vertices[faces[i].vertex[1]].v[0], vertices[faces[i].vertex[1]].v[1], vertices[faces[i].vertex[1]].v[2]);
glNormal3f(normals[faces[i].normal[2]].v[0], normals[faces[i].normal[2]].v[1], normals[faces[i].normal[2]].v[2]);
glVertex3f(vertices[faces[i].vertex[2]].v[0], vertices[faces[i].vertex[2]].v[1], vertices[faces[i].vertex[2]].v[2]);
glEnd();
OpenGL ES 2.0に関しては、運がなくても頂点をフォローしようとしました。
glBufferData(GL_ARRAY_BUFFER, obj.vertices.size()*sizeof(float), &(obj.vertices[0].v), GL_STATIC_DRAW);
私のデータ構造:
struct vertex {
std::vector<float> v;
}
ベクトルは、v
頂点のオフコースごとに作成され{x,y,z}
ます。
class waveObj {
public:
std::vector<vertex> vertices;
std::vector<vertex> texcoords;
std::vector<vertex> normals;
std::vector<vertex> parameters;
std::vector<face> faces;
}
struct face {
std::vector<int> vertex;
std::vector<int> texture;
std::vector<int> normal;
};
2.0のOpenGLES1.1で行ったように、データをロードするにはどうすればよいですか?
v
また、個別の位置()ではなく、ベクトル()をロードすることも可能float x,y,z
ですか?