我正在構建一個使用OpenGL的第一人稱射擊遊戲,並且我試圖讓槍模在鏡頭前浮動。我使用資源反編譯器(轉換爲.obj並加載)從Fallout 3中撕掉了一個模型。在OpenGL中構建一個FPS:我的槍正在被裁剪成截錐體
然而,這是它看起來像在屏幕上:
半槍的三角形剪裁到似乎是圓臺。
我把它放在我的鏡頭前是這樣的:
glPushMatrix();
glLoadIdentity();
glTranslatef(m_GunPos.x, m_GunPos.y, m_GunPos.z);
glRotatef(m_GunRot.x, 1, 0, 0);
glRotatef(m_GunRot.y, 0, 1, 0);
glRotatef(m_GunRot.z, 0, 0, 1);
glScalef(m_GunScale.x, m_GunScale.y, m_GunScale.z);
m_Gun->Render(NULL);
glPopMatrix();
所以我保存原始GL_MODELVIEW
矩陣,裝載單位矩陣,翻譯我的槍稍微是我的相機的右側,使其。這是我對SceneNode的渲染例程:
glPushMatrix();
if (m_Model) { m_Model->Render(&final); }
if (m_Children.size() > 0)
{
for (std::vector<SceneNode*>::iterator i = m_Children.begin(); i != m_Children.end(); ++i)
{
(*i)->Render(&final);
}
}
glPopMatrix();
因此它呈現自己的模型和任何子SceneNode。最後,實際的網格渲染看起來像這樣:
if (m_Material)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_Material->m_TexDiffuse);
}
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(Vec3), &m_Vertex[0]);
glNormalPointer(GL_FLOAT, sizeof(Vec3), &m_Normal[0]);
glTexCoordPointer(2, GL_FLOAT, 0, &m_UV[0]);
glDrawArrays(GL_TRIANGLES, 0, m_Vertex.size());
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
是否有任何方法可以關閉剪裁只槍?其他遊戲如何做到這一點?
在此先感謝。
戀戀使用glu_teapot還有隊友:) – 2010-02-12 13:14:55
其實這就是猶他茶壺我已經有一段時間了的高分辨率版本。它使用我自己的.obj加載器加載。 :) – knight666 2010-02-16 15:39:35