2013-09-24 29 views
0

我有一些想法,但我不确定,因为我在webgl中没有大师。用顶点着色器在webgl中制作相机吗?

在WebGL中,没有摄像头。如果想要模拟它,那么他必须用很多对象进行操作...准确地说,他必须将位置改变为数十万个顶点。我没有深入学习Three.js或Babylon js,所以我不知道他们如何使用相机。

由于顶点着色器可以转换顶点位置,并且因为我们可以将顶点着色器camera matrix传递给顶点着色器,所以它会让它进行计算,所以GPU会做硬件而不是CPU吗?

+0

http://games.greggman.com/game/webgl-3d-cameras/ – gman

回答

0

你的意思是:创建使用类似的位置和方向,而不是从应用程序创建,并在着色器发送所产生的基质中的一些数据顶点着色器视图矩阵?

实际上最后一种情况是THREE.js和其他很多解决方案的情况: 表示摄像头的对象可以通过JavaScript进行操作。然后在绘制时,视图矩阵由一些位置和方向参数构建,并发送到活动着色器程序。

创建一个视图矩阵中的一些步骤来完成:

  • 创建单位矩阵(无转换);
  • 将矩阵与每个转换相结合应用于相机:平移和旋转;
  • 反转矩阵(这个计算可能很重)。

决定矩阵应该在哪里(或什么时候)被计算取决于视图矩阵在只绘制一个图像的过程中没有改变的想法。事实上,视图矩阵和投影矩阵意味着在两个图像之间进行修改。

不要忘记,顶点着色器会为发送到管道的每个顶点执行一次。 如果您在顶点着色器中计算视图矩阵,则每个图像将重新计算一千次。

因此,视图矩阵的计算应该更好地保留在应用程序中并发送给着色器程序。

如果你想从浮点运算中的着色器的性能中受益,你可以考虑使用计算着色器(遗憾的是不存在于WebGL中),或者考虑一些从着色器程序读回数据的机制来计算矩阵一次,并在下一次平局呼叫时发送。

+0

“从应用程序创建它并在着色器中发送结果矩阵”这就是我的意思。 –

+0

这意味着许多3D图形库就是这种情况。 –