如何沿着指定的棱来旋转方块
我想做一个斜坡然后再画一个方块从上面滚下载。滚这个动作就牵涉到要沿着方块的不同棱来旋转。。我不知道该怎么做
void DisPlay()
{
glLoadIdentity();
//这里画地面
Map();
glTranslatef(); //移动到指定的坐标来画方块
glRotatef(R,1,0,0); //旋转
DrawBox(); //画正方体
}
这样写后他只会按照他的一条边旋转。因为方块每翻一次下次再翻时就应该沿着另一条棱来转了。。该怎么实现呢
[解决办法]
好像有三个问题要解决呀
1、按哪个棱进行旋转
2、求出这个棱向量
3、求出旋转角度大小。
[解决办法]
像楼主这种场景复杂,移动也比较复杂的方法。我的那种枚举每一种情况的方法就不适合了。
不过我觉得主要的几步是:
1、求出旋转轴
2、出求能平移旋转轴到原点的平移向量。
2、判断旋转角度大小(总量)
[解决办法]
看来楼主的矩阵学的不扎实啊~或许是opengl的矩阵不好理解吧,我学gl时总是学不会矩阵,后来用了D3D,里面的矩阵乘法这些都是自己写,才学会了矩阵。
楼主不妨休息下,想想矩阵乘法,不是可以合并两个变换吗?
[解决办法]
glMultMatrix
不知道是不是这个...
我当初学opengl的时候, 就是不知道怎么把矩阵堆栈上两个矩阵相乘, 所以就改学D3D了..
所以对于opengl我无法帮你太多, 我只擅长Direct3D
[解决办法]
楼主有时间看看opengl reference:
http://www.opengl.org/sdk/docs/man/
[解决办法]
D3D中有四个函数D3DXMatrixRotationX/Y/Z/AXIS
是分别构造能绕X轴,Y轴,Z轴,指定向量旋转的矩阵。
如果你的BOX的棱是与坐标轴平行的(AABB),那你只需要
D3DXMatrixRotationX/Y/Z这三个函数即可。
比如你想绕一个棱进行旋转。你要知道这个棱与哪个轴平行。
比如是X轴,你就可以用D3DXMatrixRotationX生成矩阵来指定这个
BOX按X轴旋转了。但如果你想绕BOX的棱旋转的话,就需要生成一个
平移矩阵,把那个棱平移到X轴,再旋转,再平移回去。
如果BOX不是AABB的,那就用D3DXMatrixRotationAxis进行旋转。
不过你还要先得出三个矩阵。
matT1, matR, matT2
旋转轴的话,就用二个顶点坐标相减得到的向量(过原点)
平移矩阵的话,你需要把BOX的棱平移到那个过原点的旋转向量。
我没有试过,不过我想是不是就是把BOX棱其中的一个顶点
平移回原点啊?其中就是其中一个顶点的坐标的负数-vec3Vertex1
啊?