R坐标(浮点)如何选择使用3D纹理的哪个部分? (OpenGL的)

时间:2010-10-22 23:29:57

标签: opengl texture-mapping

我正在尝试使用3D纹理来纹理我随机生成的地形。我希望能够在不同区域之间混合许多不同的地形纹理。我似乎无法弄清楚R坐标将拾取的纹理的哪个部分。如果我将其设置为0.0,那么它会提供1.0之前和0.0之后的纹理混合。它似乎有一些点,它根本不混合。 R坐标(浮点)如何与3D纹理的深度一起工作? (IE。深度除以某物等乘以等等。)

我需要解决的一个例子: 我有一个128x512图像的3D纹理。第一个128x256是草纹。下半部分是污垢质地。我正在将纹理视为4个128x128瓷砖,因此深度为4.我会做什么数学来找出实心草纹理的浮动R坐标?我该怎么做才能找到从污垢到草地混合的起点/终点浮点R坐标?

感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

你想出要从第0层采样,你必须使用r = 1 / (depth * 2)。通常,要获得第N层,您需要使用r = (N + 1/2) / depth

顺便说一下,前两个坐标的结果相同。如果您想要一个具有2 / d纹理的第一个纹素的值的三角形,则需要将坐标(0.5/width, 0.5/height)传递给每个顶点。

但是,但是......你要做的是发明了什么样的纹理阵列(DX10时代的特征)。由于许多原因,3D纹理很不合适,最大的问题是mip-mapping不能像你想要的那样工作(在2D级别之间独立于第三维进行mipmap)。

Mip-mapping对于减少混叠伪像至关重要(特别是在跨越所有深度范围的地形上)。当您开始在图层上启用mip-mapping时,您会看到不同的材质图层将在地形较远时与纹理坐标无关地开始混合。这就是mipmapping的用途......你的128x128x4纹理变成了64x64x2,32x32x1,16x16x1,因为你在更远的几何上使用它们。当你达到32x32x1水平时,你只剩下1层,这可能是你的污垢和草的温和混合物。再一次,不是你想要的。

相比之下,纹理数组将提供128x128 [4],64x64 [4],32x32 [4],16x16 [4],无论mipmapping如何,您都可以选择不同材质的4层。

答案 1 :(得分:0)

我意识到我的代码出错了,这让我觉得它不仅仅是在R周围获得纹理,而实际上是这样。所以第一个纹理是1.0 /(深度* 2)。