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

我需要弄清楚的一个示例:我有一个3D纹理,即128x512图像。第一个128x256是草质地。第二半是污垢。我将质地视为4 128x128瓷砖,所以深度为4。我该怎么做才能找到从污垢到草融合的开始/末端float r坐标?

任何帮助都将受到赞赏!

有帮助吗?

解决方案

您发现要从第0层进行采样,您必须使用 r = 1 / (depth * 2). 。通常,要获得n层,您将使用 r = (N + 1/2) / depth

顺便说一下,对于前2个坐标,此结果是相同的。如果您想拥有一个完全具有2/d纹理的Texel值的三角形,那么您需要通过坐标 (0.5/width, 0.5/height) 到每个顶点。

但是,但是...您要做的是为(DX10 ERA功能)发明了哪些纹理阵列。 3D纹理由于多种原因很差,最大的问题是MIP映射无法像您希望的那样工作(在2D级别之间的MIPMAP独立于第三维)。

MIP映射对于减少混叠伪像(尤其是在整个深度范围的地形上)至关重要。当您开始在图层上打开MIP映射时,您会发现,当地形较远时,无论您的纹理坐标如何,不同的材料层都会开始混合。毕竟,这就是mipmapping的目的...您的128x128x4纹理变为64x64x2,32x32x1,16x16x1,因为您在更远的几何形状上使用它们。当您沿着32x32x1级别降低时,只剩下1层,这可能是泥土和草的平淡混合物。再次,不是你想要的。

相比之下,纹理阵列将给出128x128 [4],64x64 [4],32x32 [4],16x16 [4],在这里您要保留4层,无论mipmapping,您都希望选择各种材料。

其他提示

我意识到我的代码做错了什么,这使我认为实际上不仅仅是围绕R的纹理。因此,第一个纹理为1.0/(深度*2)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top