顔の中心にあり、法線に沿って指しているジオメトリ面に通常のハンドル (今までの背の高い長方形) を描画しようとしています。
私は以下のコードでそれをやっています:
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 上)。
これはうまくいく場合もありますが、(2 次元で 45 角度) 失敗するか、角度の方向は正しいのですが、長方形が z 軸上で回転したように見え、正しく配置されていません。
OpenGL でオブジェクトを描画する正しい方法はありますか (将来的には垂直になる可能性もあります)。それとも、より良い方法がありますか?