渲染到纹理的一部分

时间:2010-11-20 18:55:11

标签: opengl 3d

由于OpenGL中使用几何着色器的分层渲染在某些驱动程序/硬件上看起来有些狡猾,我想用自己的解决方案替换该功能。这通过使用大纹理作为rendertarget,例如分辨率为300²。然后通过渲染到纹理中的100²块来模拟分层渲染。使用该分辨率,它将产生9个图块/图层,如下面的模型所示:

Tiles

问题是;如何使用OpenGL?假设借助于几何着色器,可以在一次通过中将场景渲染到不同的切片。

1 个答案:

答案 0 :(得分:2)

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

问题的基本方法:

  • 保持顶点着色器为空,只返回顶点不变
  • 在几何体着色器中,为每个三角形创建8个新实例(一起使用9个三角形)
  • 在每个三角形上运行一个投影三角形的函数。根据您的屏幕截图,您需要将9个不同的视图矩阵发送到几何着色器。
  • 现在排列三角形,使每个三角形呈现在图像的不同部分。注意,在投影之后,坐标在[-1; 1]所以你需要将每个三角形的坐标除以3,然后将相应的三角形移动1/3。
  • 如果计算每个像素的phong阴影,则需要将摄像机位置发送到每个顶点的片段着色器,因为片段着色器不知道正在分割的屏幕,并且您有9个不同的摄像机位置。