3D モデルのテクスチャを取得するのに問題があります。テスト目的で基本的なプリミティブを使用しており、より多くのエンジン固有のコードに取り組んでいるため、3D モデルに飛び込んでいます。ただし、glDrawElements 関数に問題があります。テクスチャをクワッドに描画できるため、テクスチャが正しく読み込まれていることがわかっています (コメントの glBegin に注意してください)。ただし、glDrawElements を使用すると、テクスチャが描画されません。テクスチャの一部の色 (黄色) が表示されます。テクスチャリング コードを削除すると、3D モデルが最後に設定された色に戻るため、何かを行っています。おそらく glVertexAttributePointer と関係があるのではないかと考えています。これらの関数が何をしているのかがわかります。
glMatrixMode(GL_MODELVIEW);
glMultMatrixf(m_Props.WorldMatrix.data);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(VertexPTN), 0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(VertexPTN), (const GLvoid*)12);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(VertexPTN), (const GLvoid*)20);
glBindBuffer(GL_ARRAY_BUFFER, pExtra->GetVB());
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, pExtra->GetIB());
glScalef(0.05, 0.05, 0.05);
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, pTexExtra->GetTexture());
glDrawElements(GL_TRIANGLES, pExtra->GetIndexCount(), GL_UNSIGNED_INT, 0);
/*glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(0.0f, 0.0f, 0.0f);
glTexCoord2f(0, 1); glVertex3f(10.0f, 0.0f, 0.0f);
glTexCoord2f(1, 1); glVertex3f(10.0f, 10.0f, 0.0f);
glTexCoord2f(1, 0); glVertex3f(0.0f, 10.0f, 0.0f);
glEnd();*/
glDisable(GL_TEXTURE_2D);
glDisableVertexAttribArray(2);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(0);
私の VertexPTN クラスは、Position、Texture Coordinate、Normal の単なるコンテナです。したがって、クラス内のベクトルの配置が進むと想定しています。Vector3f、Vector2f、Vector3f、glVertexAttributePointer の最後のパラメーターを 0、12、20 に設定します。
私が見逃しているものについて誤解はありますか?私は実際には openGL のプロではありませんが、セットアップと基本的なレンダリングについてはある程度理解しています。未設定の GL 状態で、テクスチャがメッシュにレンダリングされない原因は何ですか?