我正在尝试使用 opengl 用 c++ 编写一个物理模拟器,我需要能够沿相机所面对的轴缩放对象(现在主要是立方体)。
我可以使用它作为我的模型矩阵来完美地绘制对象:
mat4 Model = Translate(cube.Position - float3(gl.Position.x, gl.Position.y, -gl.Position.z)) * Rotate(cube.Rotation) * Scale(cube.Scale);
其中 gl.Position 是凸轮的位置,float3 是像我写的类的 vec3 等等......
因此,我尝试修改该行以在所有其他内容之前包含比例因子(首先应用最后的内容):
mat4 Model = Translate(cube.Position - float3(gl.Position.x, gl.Position.y, -gl.Position.z)) * Rotate(cube.Rotation) * Scale(cube.Scale) * (Rotate(float3(gl.Rotation.x, gl.Rotation.y, gl.Rotation.z)) * Scale(float3(1.0f, 1.0f, sqrt(1 - (velocity * velocity)))) * Rotate(float3(tau - gl.Rotation.x, tau - gl.Rotation.y, tau - gl.Rotation.z)));
这是重要的最后一部分,我旋转对象,缩放它,然后将其旋转回来.. sqrt(1 - (velocity * velocity)) 是物理部分(洛伦兹收缩),而 gl.Rotation 是 vec3,其中每个轴以凸轮的弧度保持俯仰、偏航和滚动。我的平移、旋转等功能正常工作,但我需要有关创建矩阵以进行缩放的理论的帮助。