代码之家  ›  专栏  ›  技术社区  ›  Dave Durbin

如何在OpenGL片段明暗器中渲染最近的顶点[复制]

  •  -1
  • Dave Durbin  · 技术社区  · 6 年前

    我要用模型、视图和透视投影转换来渲染从三维模型渲染的二维图像。但是,对于输出图像中的每个像素/片段,我希望存储原始网格中顶点索引的表示,该网格在物理上最接近来自相机中心的光线与网格相交的点。

    我对这项工作所涉及的数学有很好的理解,并且可以构建适当的光线跟踪代码“longhand”来获得这个结果,但是我想看看是否可以通过片段着色在OpenGL中实现。

    我不是OpenGL专家,但我最初的阅读建议了一种可能的方法:为支持整数值(存储索引)的片段明暗器设置一个特定的渲染目标,并将整个网格坐标作为 uniform 到片段明暗器,然后在后变换后搜索最近的坐标 gl_FragCoord 模拟空间。

    我担心这会表现得很糟糕-我的网格有大约10000个顶点。

    我的问题是:对于OpenGL,这看起来像一个糟糕的用例吗?如果不是,我的方法是否合理?如果不是,你会建议insetad。

    编辑: 而指示的答案 包含此问题的解决方案的核心。它不是以任何方式重复的问题;它是一个不同的问题,具有不同的答案,具有公共元素(光线跟踪)。搜索此问题的n个答案的人是 高度地 不太可能找到提议的副本。

    1 回复  |  直到 6 年前
        1
  •  0
  •   sirian_ye    6 年前

    首先,10000个顶点作为一个统一体在glsl中不是一个好的实践。您可以使用ubo或创建数据纹理,然后将此纹理作为统一纹理上载,请参见以下文章: GLSL: Replace large uniform int array with buffer or texture

    我不熟悉光线追踪。然而,我认为在大多数情况下,上传大量数据到GPU需要使用纹理均匀。 https://www.opengl.org/discussion_boards/showthread.php/200487-Ray-intersection-with-GLSL?p=1292112&viewfull=1#post1292112