OpenGL 3.3でSuzanne(Blenderから)をレンダリングしようとしていますが、バッファデータが正しくないようです。私が手にこの:glBufferDataとglBufferSubDataオフセット
https://gyazo.com/85c1e87fcc4eab128ca37b1a0cb1deaa
マイ輸入者は、単一のフロートとしてのstd ::ベクトルに頂点データを挿入します。私も、単純なテクスチャーで球をレンダリングしようとした
https://gyazo.com/ab82f9acb6854a49fccc527ed96cc4e8
:
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]);
}
私のセットアップは、配列バッファは、次のように
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);
そして私も同じ方法(もちろんGL_ELEMENT_ARRAY_BUFFER)のインデックスを挿入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());
を使用して実際のデータを挿入します。
私はその情報を指す:
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()));
マイ頂点シェーダは、このようなデータになります:
layout(location = 0) in vec3 position;
layout(location = 1) in vec2 texCoord;
layout(location = 2) in vec3 normals;
私はオフセットを台無しだろうか?
編集: 私は最大の問題を理解しました。私はobjファイルをインポートしやすいフォーマットに変換する外部のLuaプログラムを書いたが、データを使いこなし、 "f#/#/##/#/##/#/ (x-> y-> z)の代わりにこのファイル(x-> y-> z)のように見えるようにしました。
また、以下の応答のおかげでいくつかのエラーが修正されました!
良いキャッチ!あなたがうまく働くことができてうれしいです。 – Exide
ご協力いただきありがとうございます!すべてが今働いています。 :D私は、メッシュの "ワイヤフレーム"を描いているときに、glPolygonMode(GL_FRONT_AND_BACK、GL_LINE)の代わりにGL_LINE_LOOPを使用していたことに気づきました。したがって、余分な面はメッシュの内側にあります。ここに証拠があります:P https://gyazo.com/928640e745bfe3041798954f3f32079a – sheep