Questions tagged «projection-matrix»

2
为什么我们需要第四个坐标除以z?
我在这里阅读回复: 图形卡将向量的第四个元素作为最终位置怎么办? “第四个组件是跟踪透视投影的技巧。进行透视投影时,您希望除以z:x'= x / z,y'= y / z,但这并不是可以通过对x,y,z的向量进行运算的3x3矩阵来实现。为此,标准的技巧是添加第四个坐标w,并声明x,y,z总是除以w在应用了所有转换之后以及在栅格化之前。” 但是我不明白为什么我们不能使用3x3矩阵除以z? 我们不能乘以 1/z 0 0 0 1/z 0 0 0 1/z 要得到 [x/z y/z 1] ?

5
如何正确在相机后面投射点?
我正在制作3D游戏,在其中将感叹号放在关注点上方。 为了找出应该在2D屏幕中放置标记的位置,我手动将3D点投影到标记应放置的位置。 看起来像这样: 看起来还不错 当标记位于屏幕之外时,我只需剪切坐标即可使其适合屏幕。看起来像这样: 到目前为止,这个想法进展顺利。但是,当关注点在相机后面时,得到的X,Y坐标将反转(正/负),并且我将标记显示在屏幕的对角,如下所示: (投影然后夹紧的点是标记的尖端。不要介意标记的旋转) 这是有道理的,因为平截头体后面的坐标在X和Y中是反转的。所以我要做的是在它们位于摄影机后面时反转它们的坐标。但是,我仍然不知道将坐标反转时的确切条件是什么。 当前,这是我的投影代码的样子(在带有SharpDX的C#中): public override PointF ProjectPosition(float viewportWidth, float viewportHeight, float y) { var projectionMatrix = Matrix.PerspectiveFovRH(GetCalibratedFOV(Camera.FOV, viewportWidth, viewportHeight), viewportWidth / viewportHeight, Camera.Near, Camera.Far); var viewMatrix = Matrix.LookAtRH(new Vector3(Camera.PositionX, Camera.PositionY, Camera.PositionZ), new Vector3(Camera.LookAtX, Camera.LookAtY, Camera.LookAtZ), Vector3.UnitY); var worldMatrix = Matrix.RotationY(Rotation) * Matrix.Scaling(Scaling) * Matrix.Translation(PositionX, …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.