假设我使用glRotate
根据一些任意用户输入翻译当前视图(即,如果按下左键,则rtri+=2.5f
)
glRotatef(rtri,0.0f,1.0f,0.0f);
然后我在旋转位置绘制三角形:
glBegin(GL_TRIANGLES); // Drawing Using Triangles
glVertex3f( 0.0f, 1.0f, 0.0f); // Top
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glEnd(); // Finished Drawing The Triangle
如何获得生成的翻译顶点以用于碰撞检测?或者我是否必须自己手动应用转换,从而加倍工作?
我问的原因是我不介意实施显示列表。
答案 0 :(得分:3)
用于碰撞检测的对象通常不是用于显示的对象。它们通常更简单,更快捷 所以,是的,这样做的方法是保持你手动使用的转换,但是由于对象不同,你不会加倍工作。
答案 1 :(得分:0)
您的游戏循环应该看起来像(使用c ++语法):
void Scene::Draw()
{
this->setClearColor(0.0f, 0.0f, 0.0f);
for(std::vector<GameObject*>::iterator it = this->begin(); it != this->end(); ++it)
{
this->updateColliders(it);
glPushMatrix();
glRotatef(it->rotation.angle, it->rotation.x, it->rotation.y, it->rotation.z);
glTranslatef(it->position.x, it->position.y, it->position.z);
glScalef(it->scale.x, it->scale.y, it->scale.z);
it->Draw();
glPopMatrix();
}
this->runNextFrame(this->Draw, Scene::MAX_FPS);
}
因此,例如,如果我使用带有立方体的基本盒子对撞机,则绘制方法将:
**类Scene继承自矢量类
我希望它会有所帮助! :)