我在思考一种在OpenGL中定义旋转的简单方法。我理解如何绕任意给定轴线旋转,并且我知道我可以依次绕每个轴线旋转。但这些都没有真正帮助我的问题。
我想要做的是将一个物体旋转,使其看向某个(给定的)方向。因此,我已经知道了一堆旋转的结果...如何直接到达目标呢?
我能否为任何对象定义一个lookAt方向?
U = normalize( T - T · Y )
L = U × T
Lx Ux Tx 0
Ly Uy Ty 0
Lz Uz Tz 0
0 0 0 1
将其传递给OpenGL,使用glMultMatrix(固定功能)或将其乘以您自己管理的堆栈并使用glUniformMatrix(着色器)提供它。
请注意,glMultMatrix按以下顺序索引矩阵元素。
0 4 8 c
1 5 9 d
2 6 a e
3 7 b f
我终于成功解决了我的问题,而且它运行得非常好。感谢datenwolf!
//direction is the direction you want the object to point at
//up- first guess
Vector3f up;
if(abs(direction.x)< 0.00001 && abs(direction.z) < 0.00001){ //If x and z are really small
if(direction.y > 0)
up = Vector(0.0, 0.0, -1.0); //if direction points in +y direction
else
up = Vector(0.0, 0.0, 1.0); //if direction points in -y direction
} else {
up = Vector(0.0, 1.0, 0.0); //y-axis is the general up direction
}
//left
Vector left = cross(direction,up);
left.normalize();
//final up
up= cross(left,direction);
up.normalize();
float matrix[]={left.x, left.y, left.z, 0.0f, //LEFT
up.x, up.y, up.y, 0.0f, //UP
direction.x, direction.y, direction.z, 0.0f, //FORWARD
position.x, position.y, position.z, 1.0f}; //TRANSLATION TO WHERE THE OBJECT SHOULD BE PLACED
glMultMatrixf(matrix);
//DRAW OBJECT
//KEEP IN MIND the z-axis of your object points now in direction direction
gluLookAt
对你不起作用吗? - user786653