gpt4 book ai didi

c++ - 使用 glm 撤消/防止围绕特定轴旋转

转载 作者:行者123 更新时间:2023-11-28 05:38:26 26 4
gpt4 key购买 nike

我有一段代码采用法线和位置,然后创建矩阵。矩阵应将值定向在法线的方向上,并在某个方向上偏移所有内容。使用命名空间 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 个 vector 。

所以一个轴是您的法线,因为另一个 vector 使用一些不变的东西。哪一个取决于你的环境。例如一些可能性:Up,North,To Sun,To moon,(1,0,0)(0,1,0)(0 ,0,1), 到面的第一个顶点。错误选择的 vector 会导致矩阵随着法 vector 的变化而旋转。

有关详细信息,请参阅:

关于c++ - 使用 glm 撤消/防止围绕特定轴旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37717953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com