【发布时间】:2013-08-13 04:10:21
【问题描述】:
我正在尝试使用 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,其中每个轴以凸轮的弧度保持俯仰、偏航和滚动。我的平移、旋转等功能可以正常工作,但我需要有关创建矩阵以进行缩放的理论方面的帮助。
【问题讨论】: