使用 glm 撤消/防止围绕特定轴旋转
Undo/Prevent rotation around a specific axis with glm
我有一段代码,它采用法线和位置,然后创建一个矩阵。矩阵应将值定向到法线方向,并在某个方向上偏移所有值。使用命名空间 GLM;
//Initialize a base translation matrix:
mat4 matrix = translate(mat4(),vec3(pos.x,pos.y,pos.z));
vec3 normal = vec3(inputnormal.x,inputnormal.y,inputnormal.z);
const vec3 upvector = vec3(0.0,0.0,1.0);
//Rotate around normal axis a bit (input by artists)
//matrix = rotate(matrix,radians(degrees),normal);
//Build orientation matrix from normal + upvector:
vec3 tangent = normalize(cross( normal, upvector ));
vec3 binormal = normalize(cross(normal, tangent));
mat3 orient = mat3(tangent, binormal, normal);
//Multiply by the orientation matrix
matrix *= mat4(orient);
方向有效,框的顶部正确指向法线方向。但是盒子绕法线轴旋转很多法线。(即使 rad 为 0.0)
这是问题的视频:关卡编辑器中的贴花指向法线直接,但也沿法线轴旋转。
编辑:添加了视频和新的计算...https://www.youtube.com/watch?v=Yeq9Fn4f9Gs
所以我的问题是:如何防止围绕法轴旋转,或者如何找到适当的角度来撤消矩阵中的所述旋转。(那么,给定矩阵和任意轴,我如何找到角度?
您需要 2 个非平行方向,而不仅仅是一个......并利用交叉乘积获得第 3 个向量。
所以一个轴是你的normal
,因为另一个向量使用一些不变的东西。哪一个取决于您的环境。例如一些可能性:向上,向北,到太阳,到月亮,(1,0,0)
或(0,1,0)
或(0,0,1)
,到脸的第一个顶点。错误选择的向量将导致矩阵随着法向量的变化而旋转。
有关详细信息,请参阅:
- 了解 4x4 齐次变换矩阵
- 旋转一组向量
相关文章:
- 发布旋转矩阵(openGL/glm)
- 在OpenGL(GLM/C++)中使用四元数旋转时出现问题
- 给定方向和位置如何使用 GLM 计算旋转矩阵
- 如何旋转 glm 相机
- GLM:旋转矩阵初始化
- 使用 glm 撤消/防止围绕特定轴旋转
- 四元数 -> 欧拉角 -> 旋转矩阵问题 (GLM)
- GLM 旋转无法正常工作
- 将 glm 四元数转换为旋转矩阵并将其与 opengl 一起使用
- 使用 GLM 围绕点旋转 OpenGL
- 如何使用glm旋转3D相机
- 在GLM中旋转、缩放和平移二维点
- GLM::旋转似乎会导致错误的旋转
- GL数学:GLM旋转函数旋转整个坐标系
- 如何否定GLM四元数在任何单轴上的旋转
- GLM矩阵的旋转方向,使用四元数
- OpenGL, GLM四元数旋转
- 使用glm从旋转矩阵获得角度
- 如何正确旋转GLM四元数
- GLM相机X,Y旋转引入Z旋转的问题