Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不';OpenGL中分离的t模型和视图矩阵?_Opengl_Matrix - Fatal编程技术网

为什么不';OpenGL中分离的t模型和视图矩阵?

为什么不';OpenGL中分离的t模型和视图矩阵?,opengl,matrix,Opengl,Matrix,有了可编程管道,我可以轻松地计算模型和视图分离的结果,这将简化我正在制作的引擎中使用摄影机对象的工作。然而,我想知道为什么他们一开始不分开。 我在另一个stackoverflow问题中读到,矩阵越少意味着乘法越少,但在我调用GL.Translate()时,它们首先被乘法,所以这似乎不成立。 在我花时间解决这个问题之前,请注意几天后它会导致问题,我必须重写一半的代码,为什么它们不在固定的函数管道中分开呢?它们在管道中的位置基本相同,所以尽早将它们合并是有意义的。如果没有它们的组合,您很少不想执行计

有了可编程管道,我可以轻松地计算模型和视图分离的结果,这将简化我正在制作的引擎中使用摄影机对象的工作。然而,我想知道为什么他们一开始不分开。 我在另一个stackoverflow问题中读到,矩阵越少意味着乘法越少,但在我调用GL.Translate()时,它们首先被乘法,所以这似乎不成立。
在我花时间解决这个问题之前,请注意几天后它会导致问题,我必须重写一半的代码,为什么它们不在固定的函数管道中分开呢?

它们在管道中的位置基本相同,所以尽早将它们合并是有意义的。如果没有它们的组合,您很少不想执行计算。一个性能优势是,矩阵可以在每次绘制调用时相乘一次,而不是在顶点着色器中按顶点相乘。最后,最后一个优点是,在提交抽签呼叫时,带宽和一致性更少


如果你真的需要将两者分开,你可以在你自己的着色器中这样做。

你的问题突出了OpenGL(和Direct3D)切换到可编程管道的确切原因之一。答案总是取决于你想要达到的目标。见鬼,在非常简单的程序中,可以组合投影、模型和视图矩阵。在相当复杂的引擎中,您需要尽可能多的独立矩阵用于照明等


所以,真正的答案是,这不再重要了。根据需要使用尽可能多的矩阵。

听起来不错。。。在固定的函数管道中将两个矩阵合并为一个矩阵,这在历史上意味着OpenGL在绘制片段的过程中可以少转换一个坐标空间。矩阵乘法和存储现在非常便宜,但IrisGL和OpenGL可以追溯到80/90年代

在可编程管道中使用单独的模型和视图矩阵肯定不会遇到任何问题。通过可编程管道,您可以自由地抛弃许多惯例;线性Z缓冲区、反转深度范围等


你不会破坏任何类似于剪辑的东西,因为这是使用顶点着色器的输出来实现的,即使你将三个矩阵相乘而不是两个矩阵相乘,顶点着色器应该已经在剪辑空间中了。

简单的原因是将它们分开没有意义。在变换后应用变换时,相应的矩阵将与GL已知的矩阵相乘。稍后,在变换顶点时,每个顶点都与单个矩阵相乘。如果性能对您有任何意义,您将不会在可编程管道中执行任何不同的操作。这种方法没有什么比这更复杂的了,只是计算量更少。出于某种原因,我没有意识到着色器中的乘法可以实现每个顶点