-1

我写了一个简单的程序,它由两个碰撞的立方体组成。当我移动它们并测试碰撞时,它工作得很好,但是当我旋转一个立方体时,碰撞就搞砸了。我知道发生这种情况是因为 openGL 不会更改我的对象坐标,那么,我该如何实现呢?

我尝试像这样计算新坐标:

new.x = coordinates.x * cos(degrees) - coordinates.y * sin(degrees);
new.y = coordinates.x * sin(degrees) + coordinates.y * cos(degrees);

但是 new.x 和 new.y 是不对的。

我也试过这个,将模型视图乘以 (new.x, new.y, 0, 1):

GLdouble modelview[16], NEWVERTEX[4];
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);

nmview[0] = modelview[0] * new.x + modelview[4] * new.y + modelview[8] * 0 + modelview[12] * 1;
nmview[1] = modelview[1] * new.x + modelview[5] * new.y + modelview[9] * 0 + modelview[13] * 1;
nmview[2] = modelview[2] * new.x + modelview[6] * new.y + modelview[10] * 0 + modelview[14] * 1;
nmview[3] = modelview[3] * new.x + modelview[7] * new.y + modelview[11] * 0 + modelview[15] * 1; 
4

1 回答 1

1

第一:OpenGL是一个本地化的光栅化器,它只知道点、线和三角形。在 OpenGL 中没有几何对象,也没有场景。

第二:从第一个开始,OpenGL 不进行碰撞检测,并且在 OpenGL 端的对象中没有任何东西可以“改变”。您必须自己进行碰撞检测或使用 3rd 方库实现事物。场景中的所有变化都通过使用 OpenGL 重新绘制整个事物来反映。


PS:这个问题有点像FAQ。

于 2013-02-27T23:56:52.620 回答