math - 为什么我的正交投影矩阵不起作用?

标签 math rendering 3d stage3d projection-matrix

我正在尝试使用正交投影渲染位于平面 (z=0) 中的一些四边形。看完Formula for a orthogonal projection matrix?我确实设置了投影矩阵但我认为我做错了什么。

我的第一次尝试是下面的矩阵。 W 和 H 是我想要的视口(viewport)的宽度和高度,在以下示例中为 640x640:

 ˹ 2/w 0   0  0 ˺
 | 0   2/h 0  0 |
 | 0   0   0  0 |
 ˻ 0   0   0  1 ˼

这是我在渲染左上角位于 (0,0,0) 的四边形时获得的结果:

No good

因为它是垂直翻转的,所以我将矩阵更改为:

 ˹ 2/w  0   0  0 ˺
 | 0   -2/h 0  0 |
 | 0    0   0  0 |
 ˻ 0    0   0  1 ˼

我得到了:

better


然后我试着四处移动我的四边形,结果出乎意料。我希望 3D 空间的 X 和 Y 与视口(viewport)的 X 和 Y 相匹配。然而,这是我沿 X 轴移动四边形时发生的情况:

ouch


沿 Y 轴移动同样得到意想不到的结果:

ouch ouch


如何修复我的矩阵,使 3D 空间的 X 轴和 Y 轴与视口(viewport)的 X 轴和 Y 轴匹配?非常感谢。

最佳答案

这个投影矩阵其实是正确的。问题出在 quad 翻译代码中,抱歉搞砸了。

关于math - 为什么我的正交投影矩阵不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9151328/

相关文章:

java - SlickUtil - 访问 API 时出现 NoClassDefFoundError

javascript - 在渲染之前使用 HTML 或 JavaScript 调整来自 URL 的图像大小

animation - 使用 VTK 模型动画

c++ - OpenGL 向一个点旋转

math - 使用给定的一组点扭曲图像的简单方法是什么?

c++ - glDrawPixels 访问违规读取位置

用于存储 3 维 float 的 C++ 数据结构

c++ - 使用自定义着色器的 OpenGL/ES 渲染 = 网格上的伪影

python - 欧拉计划数 338

math - 四边形中一点的相对位置