我有一些想法,但我不确定,因为我在webgl中没有大师。用顶点着色器在webgl中制作相机吗?
在WebGL中,没有摄像头。如果想要模拟它,那么他必须用很多对象进行操作...准确地说,他必须将位置改变为数十万个顶点。我没有深入学习Three.js或Babylon js,所以我不知道他们如何使用相机。
由于顶点着色器可以转换顶点位置,并且因为我们可以将顶点着色器camera matrix
传递给顶点着色器,所以它会让它进行计算,所以GPU会做硬件而不是CPU吗?
我有一些想法,但我不确定,因为我在webgl中没有大师。用顶点着色器在webgl中制作相机吗?
在WebGL中,没有摄像头。如果想要模拟它,那么他必须用很多对象进行操作...准确地说,他必须将位置改变为数十万个顶点。我没有深入学习Three.js或Babylon js,所以我不知道他们如何使用相机。
由于顶点着色器可以转换顶点位置,并且因为我们可以将顶点着色器camera matrix
传递给顶点着色器,所以它会让它进行计算,所以GPU会做硬件而不是CPU吗?
你的意思是:创建使用类似的位置和方向,而不是从应用程序创建,并在着色器发送所产生的基质中的一些数据顶点着色器视图矩阵?
实际上最后一种情况是THREE.js和其他很多解决方案的情况: 表示摄像头的对象可以通过JavaScript进行操作。然后在绘制时,视图矩阵由一些位置和方向参数构建,并发送到活动着色器程序。
创建一个视图矩阵中的一些步骤来完成:
决定矩阵应该在哪里(或什么时候)被计算取决于视图矩阵在只绘制一个图像的过程中没有改变的想法。事实上,视图矩阵和投影矩阵意味着在两个图像之间进行修改。
不要忘记,顶点着色器会为发送到管道的每个顶点执行一次。 如果您在顶点着色器中计算视图矩阵,则每个图像将重新计算一千次。
因此,视图矩阵的计算应该更好地保留在应用程序中并发送给着色器程序。
如果你想从浮点运算中的着色器的性能中受益,你可以考虑使用计算着色器(遗憾的是不存在于WebGL中),或者考虑一些从着色器程序读回数据的机制来计算矩阵一次,并在下一次平局呼叫时发送。
“从应用程序创建它并在着色器中发送结果矩阵”这就是我的意思。 –
这意味着许多3D图形库就是这种情况。 –
http://games.greggman.com/game/webgl-3d-cameras/ – gman