0

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

我需要弄清楚的一个例子:我有一个 128x512 图像的 3D 纹理。第一个 128x256 是草纹理。第二半是泥土纹理。我将纹理视为 4 个 128x128 瓷砖,因此深度为 4。我要进行什么数学运算才能找出实心草纹理的浮动 R 坐标?我要做什么数学才能找到从泥土混合到草的开始/结束浮动 R 坐标?

任何帮助表示赞赏!

4

2 回答 2

2

您发现要从第 0 层采样,您必须使用r = 1 / (depth * 2). 一般来说,要获得第 N 层,您可以使用r = (N + 1/2) / depth

顺便说一下,这个结果对于前 2 个坐标是相同的。如果您想要一个三角形的值与您的 2/d 纹理的第一个纹素的值完全相同,那么您需要将坐标传递(0.5/width, 0.5/height)给每个顶点。

但是,但是……您要做的是为(DX10 时代功能)发明的纹理阵列。由于多种原因,3D 纹理不适合,最大的问题是 mip-mapping 不能像您希望的那样工作(2D 级别之间的 mipmap 独立于第三维)。

Mip 映射对于减少锯齿伪影至关重要(尤其是在地形上,它跨越所有深度范围)。当您开始在图层上打开 mip-mapping 时,您会看到当地形更远时,无论您的纹理坐标如何,不同的材质层都将开始混合。毕竟这就是 mipmapping 的用途……当您在更远的几何图形上使用它们时,您的 128x128x4 纹理将变为 64x64x2、32x32x1、16x16x1。当您到达 32x32x1 级别时,您只剩下 1 层,这可能是您的泥土和草的平淡混合物。再说一次,不是你想要的。

相比之下,纹理数组将提供 128x128[4]、64x64[4]、32x32[4]、16x16[4],您可以在其中保留 4 层,以选择各种材质,而不管 mipmapping。

于 2010-10-23T08:21:11.130 回答
0

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

于 2010-10-23T00:59:53.397 回答