【发布时间】:2019-12-10 14:12:11
【问题描述】:
尝试使用 alpha 贴图根据 alpha 贴图揭示底层模型。目前,alpha 贴图会覆盖模型纹理并显示为全白。
我尝试单独加载 alpha 贴图并将其应用于材质,然后将其附加到对象上 --> 将相关的 alpha 贴图显示为白色,未按预期显示底层模型
我已经尝试将 alpha 贴图和纹理加载到 MeshBasicMaterial --> 显示完整的纹理,其中不透明
let material = new THREE.MeshBasicMaterial({
// map: iceTexture,
color: '0xffffff',
transparent : false,
side: THREE.DoubleSide,
alphaTest: 0.5,
alphaMap: this.alphaMaps[0]
});
当前结果是 alpha 贴图显示为全白 --> Current Output
这是我希望显示的底层纹理(就在 alpha 贴图允许的地方)--> Underlying Texture
注意:我目前没有使用任何着色器,底层模型是一个简单的 glb,上面应用了冰纹理
注意 2:在this answer 中,它说要在第一个对象后面添加第二个对象...这不起作用,它只是在顶部显示对象,没有应用透明度
【问题讨论】:
-
我很难理解您想要实现的目标。当您说“基础纹理”时,您的意思是在您应用
alphaMap的那个下面还有第二个Mesh?还是全部在一个网格中?看起来您已经注释掉了map: iceTexture,这意味着没有要采样的纹理,并且默认为您使用0xffffff声明的白色。从您的屏幕截图来看,它的行为符合预期。 -
@Marquizzo 我尝试了两种方法,未注释 iceTexture(地图和 alphaMap 在同一材质上)它只是渲染完整的“底层纹理”,根本没有任何透明度。我也尝试过使用两个网格,一个将 alphaMap 应用于具有冰纹理的 glb,另一个是 glb 的第二个实例,没有应用任何 alpha 贴图,它再次呈现完整的“底层纹理”。我们的目标是让这些冰(你在“底层纹理”链接中看到的)慢慢显露出来,就像湖水结冰一样。
-
this.alphaMaps[0]看起来像什么?请记住,.alphaMaponly reads the green channel,而不是 alpha 通道。如果您想要增加透明度,则需要从绿色到黑色渐变。 -
这是我构造的数组中的第一个 alphaMap png,它是 [0]--> link 这是我构造的数组中的最终 alphaMap png,它是 [49]--> @ 987654326@
-
是这样导入的
const alphaMap = new THREE.TextureLoader().load(fileStr)
标签: three.js