提问人:Utututu 提问时间:10/25/2023 最后编辑:Utututu 更新时间:10/25/2023 访问量:82
OpenGL/WebGL 如何“知道”我想要透视图?
How OpenGL/WebGL 'knows' I want perspective view?
问:
我使用 WebGL,但在 OpenGL 中的问题完全相同 我认为问题不在于数学。这是关于决定论的。
问题是:OpenGL(WebGL)或GPU如何“知道”我想使用透视投影?
这个问题听起来很有趣甚至很愚蠢,但我已经研究了数学库并在 PDF 中写下了投影矩阵(以获得更好的图片),它只是不会以这种方式改变顶点,就像在透视视图中一样。 您可以在此处的 PDF 屏幕截图上看到它:
如果仔细观察 x 或 y 变量的结果,则 W(设备宽度)、H(设备高)和 ctan(fovY/2) 在 sigle 帧中是常数。因此,每个顶点的所有 x 和 y 坐标将乘以相同的常量值。因此,如果我在 Z 轴上移动三角形(将其平移),值 X 和 Y 不会像在透视投影中那样改变。 我没有使用View Matrix来不使数学复杂化。视图是一个单位矩阵,为了检查它,我将其定义为三角形:
data: [
new Float32Array([
0, 0.05, -0.5, 1.0, 0.0, 0.0,
0.05, -0.05, -0.5, 0.0, 1.0, 0.0,
-0.05, -0.05, -0.5, 0.0, 0.0, 1.0
]),
new Float32Array([
0.05, 0.075, -0.8, 1.0, 1.0, 0.0,
0.1, -0.025, -0.8, 0.0, 1.0, 1.0,
0, -0.025, -0.8, 1.0, 0.0, 1.0
])
],
我没有添加其他代码,因为它正在工作。问题是我不知道为什么。
由于 OpenGL 只“知道”我链接了一些制服。GPU 有我的统一投影矩阵,但“完全不知道”这个矩阵是什么意思,问题是:
那么,如果投影矩阵没有真正做到这一点,那么为什么它根本不起作用呢?但也许我错了或不明白什么?
如果你想查看更多细节,你找不到我使用的功能: 用于 WebGL 的 glMatrix。在文件 mat4.js 中,您可以找到函数 perspectiveNO,它是为 WebGL 而不是 WebGPU 设计的。 我从旧的本地存档中获取了这个,但在最新版本中应该是相同的。 您还可以在文件中查看 glm、函数透视图: glm/gtc/matrix_transform.inl
答: 暂无答案
评论
-Z