gpt4 book ai didi

opengl - OpenGL 在流水线中乘以哪些矩阵?

转载 作者:行者123 更新时间:2023-12-03 20:17:33 27 4
gpt4 key购买 nike

最后一段时间我一直在组合一个 OpenGL 程序,我已经到了在我的变换矩阵(模型变换、相机变换和透视变换)中编码的地步。到目前为止,我一直在计算我的模型变换并发送到一个统一体并在顶点着色器中将其相乘。最近,我将相机和透视变换添加到发送到着色器中的统一体的矩阵中。

但是现在,很多事情都不起作用,还有一些我无法理解的事情:

首先,this webpage说 OpenGL 会自动将所有内容除以位置的 Z 分量(用于透视变换),但我无法弄清楚发生这种情况的地方,其次:

numberresources那个mention OpenGL 函数,例如 glFrustumf()、glMatrixMode()、glPushMatrix()、glPopMatrix()、glLoadIdentity()、gRotatef() 等。所有这些似乎在 OpenGL 中传递和修改矩阵的函数,我不需要打扰与它们在顶点着色器中。

所以现在我完全不知道如何在 OpenGL 中完成转换。我们是自己计算它们并在顶点着色器中将它们相乘,还是将参数发送到 OpenGL 并让它完成 API 背后的所有工作,或者其他完全不同的事情?

谢谢

最佳答案

透视部
一旦您通过 ModelViewProjection 矩阵转换了您的顶点,它们就在裁剪空间中。如果不将 x、y 和 z 分量除以 w 分量,则值在 -w 到 w 的范围内。超出该范围的所有内容都将被剪裁。
透视除法(除以 w 分量)将该范围变为 -1 到 1,称为“标准化设备坐标”。这是由 OpenGL 在顶点着色器输出 gl_Position 上自动完成的。这(如果我没记错的话)是针对硬件完成的,因此所有后续计算都不必考虑可变范围。
固定与可编程管道
如果您使用uniforms 将您自己的变换传递给顶点着色器,那么您使用的是现代OpenGL 管道(是的!)。这使您可以完全控制顶点的变换。
如果您使用过时的函数,例如 glFrustumf()、glMatrixMode()、glPushMatrix()、glPopMatrix()、glLoadIdentity()、gRotatef() 等,那么您使用的是旧的固定函数管道。

关于opengl - OpenGL 在流水线中乘以哪些矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24852934/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com