gpt4 book ai didi

c++ - OpenGL,将纹理从图像应用到等值面

转载 作者:太空狗 更新时间:2023-10-29 21:29:47 24 4
gpt4 key购买 nike

我有一个程序,我需要在其中将二维纹理(简单图像)应用到使用行进立方体算法生成的表面。我可以访问几何体并且可以相对轻松地添加纹理坐标,但是生成坐标的最佳方法让我望而却步。

体积中的每个点代表一个数据单元,每个数据单元可能具有不同的属性。为了简化事情,我正在考虑将它们分类为“类型”并为每种类型分配一个纹理(或单个大型纹理图集的一部分)。

我的问题是我不知道如何生成合适的坐标。我可以将类型纹理的位置存储在类型类中并使用它,但是接缝会被可怕地拉伸(stretch)(如果两个相邻点使用图集的不同部分)。如果可能的话,我想在接缝处混合纹理,但我不确定这样做的最佳方式。混合是可选的,但我需要以某种方式对顶点进行纹理处理。将几何体拆分为每种类型的部分或出于纹理目的复制顶点是可能的,但不受欢迎。

我想尽可能避免使用着色器,但如有必要,我可以使用顶点和/或片段着色器来进行纹理混合。如果我确实使用着色器,那么告诉它是纹理还是要采样的部分的最有效方式是什么?似乎通过参数传递类型是最简单的方法,但可能会很慢。

我的体积相对较小,每个维度有 8-16 个点(我将它们保持得更小以加快生成速度,但在给定时间屏幕上有很多)。我简单地考虑过将等值面设为体积分辨率的两倍,这样每个点都有更多的顶点(理论上是 8 个),这可能会简化纹理。不过,这似乎不会让混合变得更容易。

为了构建表面,我使用了 Visualization Library用于 OpenGL 及其行进立方体和体积系统。我已经很好地生成了几何体,只需要弄清楚如何对其进行纹理化。

有没有一种方法可以有效地做到这一点,如果有的话是什么?如果没有,有没有人有更好的方法来处理卷的纹理?

编辑:请注意,纹理不仅仅是颜色渐变。它实际上是一种纹理,通常带有图案。因此映射它的困难,梯度本来是微不足道的。

编辑 2: 为了帮助澄清问题,我将添加一些示例。他们可能只会混淆事情,所以考虑所有高于确定事实的事情,如果可能的话,这些只是帮助。

我的几何体总是在立方体中(加载、生成和保存在立方体中)。如果形状影响可能的解决方案,就是这样。

我需要将由图案和/或颜色(独特的取决于点的“类型”)组成的纹理应用到几何体,其技术类似于为地形所做的铺展(这不是地形,但是,所以我不知道是否可以使用相同的技术)。

着色器是一种快速而简单的解决方案,但正如我之前提到的,我想尽可能避免使用它们。在固定功能管道中可用的东西是更可取的,主要是为了稍微增加兼容性和开发时间。由于这只是一个小的增加,如果需要,我将使用着色器和多 channel 渲染。

不确定是否需要任何其他说明,但我会根据需要更新问题。

最佳答案

关于题目的纹理组合部分:

您研究过 3d 纹理吗?当我们谈论行进立方体时,我可能应该立即声明我不是在谈论体积纹理。相反,您将所有 2d 纹理堆叠到 3d 纹理中。然后,您将每个纹理坐标编码为它应有的 2d 位置,并将其引用的纹理作为第三坐标。如果您的纹理通常属于这样一种类型,从逻辑上讲,从一种类型的图案过渡到另一种类型的图案,您必须通过中介,那么它的效果最好。

一个明显的使用示例是将纹理映射到简单的高度贴图——您可能在顶部有一个雪纹理,在其下方有一个岩石纹理,在其下方有一个草地纹理,在底部有一个水纹理。如果引用水的顶点紧挨着引用雪的顶点,则几何体填充过渡到岩石和草地纹理是可以接受的。

另一种方法是使用添加剂混合在多个 channel 中进行。对于每个纹理,绘制使用该纹理的每个面,并绘制渐变到透明,延伸到从一种纹理切换到另一种纹理的任何面。

您可能希望使用完整的绘制来准备深度缓冲区(所有颜色掩码都设置为拒绝对颜色缓冲区的更改),然后切换到 GL_EQUAL 深度测试并在禁用写入深度缓冲区的情况下再次绘制。通过完全相同的变换绘制完全相同的几何应该产生完全相同的深度值,而不管准确性和精度问题如何。如果遇到问题,请使用 glPolygonOffset。

关于坐标部分:

流行和简单的映射是圆柱形、长方体和球形。将您的形状概念化为圆柱体、长方体或球体,并具有从表面点到纹理位置的明确映射。然后对于形状中的每个顶点,从它开始并按照法线向外移动,直到触及边界几何体。然后获取位于边界几何体上该位置的纹理位置。

我猜有一个潜在的问题,即法线在行进立方体后往往不那么聪明,但我敢打赌你比我更了解这个问题。

关于c++ - OpenGL,将纹理从图像应用到等值面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4091114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com