|
|
GLvoid OpenGL::Render() const
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存
glMatrixMode(GL_MODELVIEW); // 选择模型观察矩阵
glLoadIdentity(); // 重置当前的模型观察矩阵
glPushMatrix(); // 保存当前模型观察矩阵
// 设置照相机视野
GlobalCamera.SetCameraView();
// 计算照相机的平截头体
GlobalCamera.CaculateFrustum();
// 绘制模型
glPushMatrix(); // 保存当前模型观察矩阵
// 重置当前的模型观察矩阵
glLoadIdentity();
// 偏移到指定位置
glTranslatef(m_MD2Model.GetPosition().x, m_MD2Model.GetPosition().y, m_MD2Model.GetPosition().z);
// 旋转
glRotatef(90.0f, -1.0f, 0.0f, 0.0f);
glRotatef(-90.0f, 0.0f, 0.0f, 1.0f);
// 自定义旋转
glRotatef(g_fRotate, 0.0f, 0.0f, 1.0f);
// 计算照相机的平截头体
GlobalCamera.CaculateFrustum();
// 计算模型AABB
m_MD2Model.CaculateAABB(m_MD2Model.GetCurrentRenderFrame());
// 变换模型AABB
m_MD2Model.TransformAABB();
// 检测模型的可见性
if (GlobalCamera.GetFrustum().IsAABBVisiable( m_MD2Model.GetAABB() ) == GL_TRUE)
{
// 绘制动作
m_MD2Model.RenderModelAction(g_ActionType, g_fAddPercent, 0);
// 绘制MD2模型
//m_MD2Model.RenderFrame(0);
++g_uiRenderModelNumber; // 计数绘制的模型数
}
glPopMatrix(); // 恢复模型观察矩阵
// 绘制模型的AABB
m_MD2Model.RenderAABB();
glPopMatrix(); // 恢复模型观察矩阵
}
请问:为什么这段代码并没能对模型对象进行正确的AABB视截体剔除?仔细思考了很久,改了又改,可是还是不对. |
|