0

我正在尝试在几何面上绘制法线手柄(到目前为止是一个高矩形),在面的中心并沿着法线指向。

我正在使用以下代码进行操作:

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中实现与(可能将来垂直于)正常对齐的绘图对象的正确方法还是有更好的方法?

4

1 回答 1

0

两个归一化向量的叉积本身并未归一化。矢量的长度实际上是旋转角度的正弦值。

您可以使用它来获得更准确的角度值:

Vec3 axis = up.cross(face_normal);
float angle = std::atan2(axis.length(), up.dot(face_normal));
axis = axis.normalize();
于 2012-06-06T23:11:30.033 回答