2010-11-20 118 views
7

由于在OpenGL中使用几何着色器进行分层渲染在某些驱动程序/硬件上看起来有点不礼貌,所以我想用我自己的解决方案替换功能。这通过使用大纹理作为rendertarget,例如300的分辨率。然后通过在纹理中渲染100个块来模拟分层渲染。与分辨率这将导致9瓦/层如下面的样机:渲染为纹理的一部分

Tiles

的问题是;如何与OpenGL的这个?据说在几何着色器的帮助下,一次渲染场景到不同的瓷砖。

回答

2

有没有简单的方法来做到这一点。您可以使用几何着色器将它一起破解,但它很可能会很慢,因为您必须执行大量几何实例化,然后使用几何着色器进行顶点着色,因为顶点着色器不在游戏中。

基本解决问题的方法:

  • 离开顶点着色器空,就回到顶点不变
  • 在几何着色器创建的每一个三角形(一起,你将有9个三角形)8个新实例
  • 在各三角形运行一个将投影三角形的函数。根据您的屏幕截图,您需要将9个不同的视图矩阵发送到几何着色器。
  • 现在安排三角形,使每个呈现在图像的不同部分。请注意,在投影之后,坐标位于[-1; 1],因此您需要将每个三角形的坐标除以3,然后将相应的三角形乘以1/3。
  • 如果计算每个像素的phong着色,则需要将相机位置发送到每个顶点的片段着色器,因为片段着色器不知道屏幕被分割,并且您有9个不同的相机位置。
  • +0

    谢谢你的回答。也许我应该等待GPU制造商把他们的驱动程序集合起来(ATI)。所以他们支持将渲染图层替换为'texture2Darray'。 – 2010-11-21 12:00:01

    +0

    是的,绝对。问题是,如果ATI能够让他们的驱动程序正常工作...... – 2010-11-21 12:19:23