Opengl 从受影响的像素反向查找三角形?

Opengl 从受影响的像素反向查找三角形?,opengl,mesh,Opengl,Mesh,假设我有一个3D三角形网格和一个OpenGL帧缓冲区,我可以在其中渲染网格 对于每个渲染像素,我需要构建一个三角形列表,这些三角形渲染到该像素,甚至是那些被遮挡的三角形 我能想到的唯一方法是单独渲染网格中的每个三角形,然后遍历帧缓冲区中的每个像素以确定它是否受三角形的影响(使用深度缓冲区或用户定义的片段着色器输出变量)。然后我必须清除帧缓冲区,并对下一个三角形执行相同的操作 有没有更有效的方法 我考虑过,对于片段着色器中的每个片段,写出一个三角形标识符,但GLSL不允许输出整数列表 对于每个渲染

假设我有一个3D三角形网格和一个OpenGL帧缓冲区,我可以在其中渲染网格

对于每个渲染像素,我需要构建一个三角形列表,这些三角形渲染到该像素,甚至是那些被遮挡的三角形

我能想到的唯一方法是单独渲染网格中的每个三角形,然后遍历帧缓冲区中的每个像素以确定它是否受三角形的影响(使用深度缓冲区或用户定义的片段着色器输出变量)。然后我必须清除帧缓冲区,并对下一个三角形执行相同的操作

有没有更有效的方法

我考虑过,对于片段着色器中的每个片段,写出一个三角形标识符,但GLSL不允许输出整数列表

对于每个渲染像素,我需要构建一个三角形列表,这些三角形渲染到该像素,甚至是那些被遮挡的三角形

您将无法对整个场景执行此操作。没有任何结构允许您将“列表”与每个像素相关联

您可以使用select buffer(选择缓冲区)获取影响特定区域的基本体列表(请参见)

可以使用模具缓冲区技术获得场景深度复杂度


如果总共有8个三角形,则可以使用模具缓冲区(基本上是指定唯一的)获得影响每个像素的三角形列表(1)出于好奇:这个问题的大局是什么?你希望如何快速完成?除非你限制自己太多,否则它会增长得相当快;让我们做一个保守的草图——对于1024x768分辨率,假设你通过2字节索引将每个三角形标识到一个数组中。每个三角形可能需要多达1.5MB的存储。Wi即使是一个保守的场景,你也会看到成百上千个三角形——在某些情况下很容易保存千兆字节的数据。@StefanHanke,基本上我需要能够重新渲染网格的一个子集。特别是,给定一个固定的视点,我会局部修改网格,并需要更新相应的像素(无需重新渲染整个网格)。@RonWarholic我不确定我是否理解。假设每个像素最多受20个三角形的影响(网格相对于相机几乎是平的),则所需空间将为1024x768x20x2=30MB(假设每个三角形标识符有两个字节)。谢谢,我将研究选择缓冲区。事实上,多层颜色/深度缓冲区将是理想的,因为我的目标是局部修改网格,并且只重新渲染帧缓冲区的某个区域,特别是受网格变形部分影响的区域(以及之前被遮挡的三角形可能会变得可见)。也许一个图层就足够了,就像基于瓷砖的渲染器一样。将屏幕分割成
n*m
瓷砖,将所有三角形的顶点投影到屏幕上,并建立一个数据结构,每个瓷砖包含所有影响的三角形。@StefanHanke:我仍然建议使用OCT tree。/me目前正在考虑两者之间的权衡华侨城树木和瓷砖