繁体   English   中英

OpenGL:使用着色器通过使用预先计算的颜色图创建顶点照明?

[英]OpenGL: Using shaders to create vertex lighting by using pre-calculated colormap?

首先,我对着色器的功能知之甚少,并且我对制作顶点照明非常感兴趣。 我正在尝试使用3D色彩映射表,该映射表将用于计算世界那个位置的顶点颜色,并通过使用该色彩映射表中的附近颜色对颜色进行插值。

我不能使用典型的OpenGL照明,因为它可能太慢并且需要渲染很多照明。 我要先“渲染”颜色图上的灯光,然后我可以手动映射使用颜色图中的相应颜色绘制的每个顶点。

...或者我可以以某种方式使该过程自动化,因此我不必自己更改顶点的颜色值,但是着色器也许可以为我做这件事?

问题是……这是否可能,如果可能的话:我需要知道些什么才能使其成为可能?

编辑:请注意,我还需要有效地更新光照贴图,而不关心光照贴图的大小,因此,更新应仅在要更新的光照贴图的特定部分进行。

几乎听起来像您想要做的就是将灯光渲染到颜色图,然后将颜色图用作纹理,但是不是贴花模式将其设置为调制模式,因此它与现有颜色相乘而不是仅仅替换它。

但是,这在一种方式上是不同的:它不仅会影响顶点,还将映射到各个片段(本质上是像素)。

编辑:我想到的不是3D纹理-而是立方体贴图。 基本上,创建一个虚拟多维数据集,围绕“世界”中的所有内容。 为该立方体的每个面创建2D纹理。 将颜色渲染到立方体贴图。 然后,要为顶点着色,(实际上)将光线从中心穿过顶点向外延伸到立方体。 您在立方体贴图上命中的像素为您提供了该顶点的照明颜色。

更新应该相对有效-顶部,底部,前部等具有正常的2D纹理,然后根据需要进行更新。

如果您不能使用固定功能管线功能,则进行每个顶点照明的最佳方法应该是在顶点着色器中进行每个顶点的所有光照计算,然后将其传递给片段着色器时,它将在整个着色器上正确插值。面对。

处理大量光源时出现性能问题的另一种方法是使用延迟渲染,因为它只会对实际可见的几何体进行照明计算。

这是可能的,但在当前硬件上无效。

您想将光量渲染为3d纹理。 光栅化器在2D曲面上工作,因此必须沿其中一个轴拆分体积。 可以通过以下方式之一进行拆分:

  • 每次拆分的抽签要求不同
  • 实例化绘图,基于glInstanceID进行图层选择(将需要几何着色器)
  • 直接从单个绘制调用中在几何着色器中分支

为了实现它,我建议阅读GL-3规范和示例。 对于复杂的场景,这将不会很容易,也不会足够快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM