我有一个程序,我需要在其中应用二维纹理(简单图像)到使用 Marching-cubes 算法生成的表面。我可以访问几何图形并且可以相对轻松地添加纹理坐标,但是生成坐标的最佳方法是躲避我。
体积中的每个点代表一个数据单元,每个数据单元可能具有不同的属性。为了简化事情,我正在考虑将它们分类为“类型”并为每种类型分配一个纹理(或单个大型纹理图集的一部分)。
我的问题是我不知道如何生成适当的坐标。我可以将类型纹理的位置存储在类型类中并使用它,但是接缝会被严重拉伸(如果两个相邻点使用图集的不同部分)。如果可能的话,我想在接缝处混合纹理,但我不确定这样做的最佳方式。混合是可选的,但我需要以某种方式对顶点进行纹理处理。可以将几何图形拆分为每种类型的部分,或者复制顶点以用于纹理化目的,但这是不可取的。
如果可能,我想避免使用着色器,但如有必要,我可以使用顶点和/或片段着色器来进行纹理混合。如果我确实使用着色器,那么告诉它是纹理还是要采样的部分的最有效方法是什么?似乎通过参数传递类型是最简单的方法,但可能很慢。
我的体积相对较小,每个维度有 8-16 个点(我将它们保持较小以加快生成速度,但在给定时间屏幕上有很多)。我简要地考虑过使等值面成为体积分辨率的两倍,因此每个点都有更多的顶点(理论上是 8 个),这可以简化纹理。不过,这似乎不会让混合变得更容易。
为了构建表面,我使用了OpenGL 的可视化库及其行进立方体和体积系统。我的几何生成很好,只需要弄清楚如何纹理它。
有没有办法有效地做到这一点,如果有的话怎么办?如果没有,是否有人知道处理体积纹理的更好方法?
编辑:请注意,纹理不仅仅是颜色的渐变。它实际上是一种纹理,通常带有图案。因此,映射它的困难,梯度将是微不足道的。
编辑 2:为了帮助澄清问题,我将添加一些示例。他们可能只是混淆了事情,所以如果可以的话,把所有事情都考虑在确定的事实之上,这些都只是帮助。
我的几何图形总是在立方体中(在立方体中加载、生成和保存)。如果形状影响可能的解决方案,就是这样。
我需要将由图案和/或颜色(取决于点的“类型”的独特的)组成的纹理应用到几何体,其技术类似于为地形完成的飞溅(但这不是地形,所以我不'不知道是否可以使用相同的技术)。
着色器是一种快速简便的解决方案,尽管我想尽可能避免使用它们,正如我之前提到的。可用于固定功能管道的东西更可取,主要是为了稍微增加兼容性和开发时间。因为它只是一个小的增加,如果需要,我将使用着色器和多通道渲染。
不确定是否需要任何其他澄清,但我会根据需要更新问题。