渲染到纹理的一部分

Mor*_*son 7 opengl 3d

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

瓷砖

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

Kar*_*nek 2

没有简单的方法可以做到这一点。您可以使用几何着色器将其组合在一起,但它很可能会很慢,因为您必须执行大量几何实例,然后还使用几何着色器进行顶点着色,因为顶点着色器已退出游戏。

解决问题的基本方法:

  • 将顶点着色器留空并仅返回顶点不变
  • 在几何着色器中,为每个三角形创建 8 个新实例(总共将有 9 个三角形)
  • 在每个三角形上运行一个函数来投影三角形。根据您的屏幕截图,您将需要 9 个不同的视图矩阵发送到几何着色器。
  • 现在排列三角形,以便每个三角形渲染在图像的不同部分。请注意,投影后,坐标的范围为 [-1; 1]所以你需要将每个三角形的坐标除以3,然后将相应的三角形移动1/3的倍数。
  • 如果计算每个像素的 phong 着色,则需要将相机位置发送到每个顶点的片段着色器,因为片段着色器不知道屏幕被划分,并且您有 9 个不同的相机位置。