【发布时间】:2019-10-19 03:14:48
【问题描述】:
我的场景中有两个网格。中间一个圆柱和一个经典飞机。 我在我的圆柱体上应用了 png 纹理,这样我们就可以看穿了。它似乎适用于气缸。
在此屏幕截图上,您会很容易看到我的问题:我不明白为什么我的图像在我的圆柱体后面不可见。
我用于气缸的代码:
myCylinderMesh.material.transparent = true;
myCylinderMesh.material.side = THREE.DoubleSide;
如何才能看到隐藏在圆柱后面的图像部分?
编辑 1:
我添加了@ScieCode 发给我的代码:
myCylinderMesh.material.alphaTest = 0.5;
效果更好:现在我可以看到我的图像缺少的部分。但是缺少一件事:我的圆柱体的不透明度。我也应该在字母后面看到我的形象。 目前我有这个不透明度:
myCylinderMesh.material.opacity = 0.7;
你知道我错过了什么吗?谢谢
编辑 2:
这是我的两个网格的代码:
气缸:
geoCylinder = new THREE.CylinderBufferGeometry( 0.4, 0.4, 2*Math.PI*0.4/(2048/128), 64, 1, true );
matCylinder = new THREE.MeshBasicMaterial( { map:texture, transparent:true, color:0x000000, alphaTest: 0.5, opacity: 0.6, side: THREE.DoubleSide } );
meshCylinder = new THREE.Mesh( geoCylinder, matCylinder );
飞机:
geoPlane = new THREE.PlaneBufferGeometry( 0.8, 0.8 );
matPlane = new THREE.MeshBasicMaterial( { map: texturePlane, transparent:true} );
meshPlane = new THREE.Mesh( geoPlane, matPlane );
【问题讨论】:
-
试试
material.alphaTest = 0.5; -
@ScieCode 感谢您的回答。我试了一下并编辑了我的帖子。它几乎是完美的,但我的字母仍然不透明。
-
字母对我来说是透明的,也许尝试降低它?只要确保调整您的
alphaTest,使其不大于您的不透明度,否则不会渲染任何内容。 JSFiddle -
从您的平面材料中删除
transparent: true并改用alphaTest,这应该可以解决问题。另外,考虑在圆柱体上使用depthWrite = false,因为它会消除一些自我透明的伪影。 JSFiddle -
@ScieCode 请将您的建议转化为 Michaël Garcia 接受的答案。