glVertexAttribPointer
で使用されているオフセット値が期待どおりに機能しない理由を理解しようとしています。
コードはhttp://glbase.codeplex.com/で入手できます。
私の頂点データはこれです:
glBase::Vector3 data1[]={
glBase::Vector3(-0.4f,0.8f,-0.0f), //Position
glBase::Vector3(1.0f,0.0f,0.0f), //Color
glBase::Vector3(-.8f,-0.8f,-0.0f), //Position etc
glBase::Vector3(0.0f,1.0f,0.0f),
glBase::Vector3(0.0f,-0.8f,-0.0f),
glBase::Vector3(0.0f,0.0f,1.0f)
};
そして、属性バインディングは次のように行われます:
program.bindVertexAttribs<float>(vbo1,0, "in_Position", 3, 6, 0);
program.bindVertexAttribs<float>(vbo1,1, "in_Color", 3, 6, 12);
bindVertexAttribs 関数は次のように定義されます。
template<typename T>
void bindVertexAttribs(const VertexBufferObject& object, GLint location,const std::string& name, unsigned int width, unsigned int stride, unsigned int offset)
{
object.bind();
glBindAttribLocation(m_ID, location, name.c_str());
glVertexAttribPointer(location, width, GL_FLOAT, GL_FALSE, stride*sizeof(T),(GLvoid *)offset);
glEnableVertexAttribArray(location);
}
このコードは私のマシン (ATI 5850、12.10 ドライバー) では正しくレンダリングされず、次のようにレンダリングされます。
属性バインディングを次のように変更すると:
program.bindVertexAttribs<float>(vbo1,0, "in_Position", 3, 6, 12);
program.bindVertexAttribs<float>(vbo1,1, "in_Color", 3, 6, 0);
私はこのように正しいレンダリングを取得します:
位置はデータ配列の最初の 3 つの float であり、色は次の 3 つの float であり、その後再び位置付けられるなど、これは私には意味がありません。明らかな何かが欠けていますか?