【发布时间】:2020-02-22 20:27:05
【问题描述】:
我目前遇到了透明度问题。正如您在图片中看到的,显示了透明对象后面的非透明对象。但是另一个透明物体的backside没有显示,我设置了material.side = THREE.DoubleSide。
这是可见的,当我设置material.depthWrite = false,但随后出现可见故障,您可以在第二张图片中看到。
我使用THREE.MeshPhongMaterial 和最新版本的Three.js。
这是您在图片中看到的材料的值
material.color.setHex(0x9ed7f5);
material.emissive.setHex(0x062f61);
material.transparent = true;
material.opacity = 0.5;
material.needsUpdate = true;
material.reflectivity = 0.8;
material.envMap = textureCube;
material.side = THREE.DoubleSide;
material.roughness = 0.2;
material.metalness = 1;
depthWrite = true;
depthwrite = false;
似乎从另一边我可以看到背后的透明物体。
为了完成我对这个问题的困惑,我必须发布另一张图片。在这里,您可以从另一侧(场景旋转 180°)看到图片 (1),因为您可以看到这些视图是不同的,因为背面缺少一个对象(也是一个透明对象),该对象显示在另一个视图中.所有这些对象都具有完全相同的材质!
envMaptextureCube创建如下
textureCube = new THREE.CubeTextureLoader().load(urls);
textureCube.format = THREE.RGBFormat;
var shader = THREE.ShaderLib["cube"];
shader.uniforms["tCube"].value = textureCube;
var shaderMaterial = new THREE.ShaderMaterial({
fragmentShader: shader.fragmentShader
, vertexShader: shader.vertexShader
, uniforms: shader.uniforms
, depthWrite: false
, side: THREE.BackSide
});
var skyBox = new THREE.Mesh(new THREE.BoxGeometry(1500, 1500, 1500), shaderMaterial);
scene.add(skyBox);
【问题讨论】:
-
你有小提琴吗?
-
否 :/ 但也许我需要开始使用它
标签: three.js webgl transparency