今、私はオブジェクトを回転させています。それを「mainBody」と呼びましょう。しかし、mainBody にはいくつかのアタッチメントが取り付けられています。私は親子システムを使用していません。本体には添付ファイルの配列があり、mainBody 描画関数でそれらを描画します。
本体からの glPopMatrix() は、装備アイテムが描画された後に実行されます。
過去に pushMatrix(); を使用してこれを行うことができたことは知っています。および popMatrix(); しかし、今はうまくいかないようです。
私は c++、opengl、および glm を使用しています。
ここに私が今持っているものを示すいくつかのコードがあります:
{
setupStartModelMatrix(); //<---- Has glPushMatrix();
setupModelviewMatrix(); //<--- has all the gml stuff
drawMainBody();
}
if(mNumberOfEquipementOwned != 0)
{
for(int i = 0; i < mNumberOfEquipementOwned; i++)
{
//obj is retrieved with a function
obj->render();
}
}
setupEndModelMatrix(); // <--- Has glPopMatrix();
}
そしてglmコード
void GameObject::setupModelviewMatrix()
{
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f);
glm::mat4 Model = glm::scale( glm::mat4(1.0f), glm::vec3(1.0f));
glm::mat4 ViewTranslate = glm::translate( glm::mat4(1.0f), glm::vec3(mPosition.x, mPosition.y, mPosition.z));
glm::mat4 ViewRotateX = glm::rotate( ViewTranslate, mRotation.x, glm::vec3(1.0f, 0.0f, 0.0f));
glm::mat4 ViewRotateY = glm::rotate( ViewRotateX, mRotation.y, glm::vec3(0.0f, 1.0f, 0.0f));
glm::mat4 View = glm::rotate( ViewRotateY, mRotation.z, glm::vec3(0.0f, 0.0f, 1.0f));
glm::mat4 MVP = View * Model;
glUniformMatrix4fv( 0, 1, GL_FALSE, glm::value_ptr(MVP));
glLoadMatrixf(glm::value_ptr(MVP));
}
そして描画装置コード
void Gun::render()
{
glPushMatrix();
setupModelviewMatrix();
mMesh->render();
glPopMatrix();
}