我创建了一个Camera类,它允许我以第一人称的方式移动场景.相机工作得很好,直到我决定用它作为一个位置来添加3D世界的东西.我想要做的是当我按下鼠标按钮时向世界添加一个立方体.我想立即最终离开相机,但是现在我只想在它前面创建它.有时候它会起作用,有时会将它创建到一侧或另一侧.这一切都取决于我旋转和翻译相机的程度.
我正在试着通过使用View Matrix来找到我相机前面的矢量,如下所示:
Vector3 inFront = Camera.ViewMatrix.Forward;
Run Code Online (Sandbox Code Playgroud)
我计划使用矢量在立方体后面添加一些物理,让它远离相机.现在我只是想得到一个正确的Vector.
我知道你通常使用WorldMatrix在世界上绘制东西,但我无法弄清楚如何将我的ViewMatrix转换为WorldMatrix.还在学习:-)
我究竟做错了什么?
斯科特
And*_*ell 10
首先," 世界矩阵 "和" 视图矩阵 " 之间没有真正的区别,它们都是变换矩阵,区别在某种程度上是任意的.有些系统甚至将两者结合起来(OpenGL只有一个"ModelView"矩阵).
传统上,"世界矩阵"用于将单个模型从"模型空间"移动到"世界空间".然后使用"视图矩阵"将所有模型从世界空间移动到它们在摄像机前面的相对位置(实际上,"移动摄像机").最后," 投影矩阵 "将3D位置转换为屏幕上的2D位置(通常具有透视投影).因为它们是矩阵,所以它们可以相乘成一个矩阵,可以在一个步骤中转换点.
你还需要意识到的是Matrix.Forward返回一个Vector3.阿Vector3可以表示一个位置 或一标量和方向.您需要其中两个来表示位置和方向.
现在,我的3D矩阵数学有点生疏,但我很确定你想要的是Matrix.Translation作为相机在世界空间中的位置.并Matrix.Forward作为世界空间相机的前进方向.
除非您的相机/视图矩阵在世界上执行缩放操作(实际上它不应该),否则Vector3您从中获取Matrix.Forward将具有单位长度 - 换句话说就是一个方向(没有标量).使用它来指定移动对象的方向.
| 归档时间: |
|
| 查看次数: |
6817 次 |
| 最近记录: |