我试图在几何面上,在脸的中心并指向正常的方向上绘制普通手柄(到目前为止一个高大的矩形形状)。
我正在使用以下代码:
Vec3 up(0.0, 1.0, 0.0);
Vec3 angle_to_rotate = up.cross(face_normal);
double dot = up.dot(normal);
float rotate_angle = std::acos(dot);
Mat4 matrix;
matrix.translate(face_center.x, face_center.y, face_center.z);
matrix.rotate(angle_to_rotate, rotate_angle);
glMultMatrixd(matrix.copyGL());
然后我在世界空间画了一个高大的立方体(y up)。
这有时可以正常工作,但有时候(二维45个角度)失败,或角度方向正确,但矩形看起来像是在z轴上旋转而没有对齐。
在OpenGL中实现与(与未来垂直)绘图对象的正确方法是否正确?还是有更好的方法吗?
答案 0 :(得分:0)
两个归一化向量的叉积本身未标准化。矢量的长度实际上是旋转角度的正弦。
您可以使用它来获得更准确的角度值:
Vec3 axis = up.cross(face_normal);
float angle = std::atan2(axis.length(), up.dot(face_normal));
axis = axis.normalize();