2016-12-05 5 views
0

나는 현재 투명성 문제가 있습니다. 사진에서 볼 수 있듯이 투명 오브젝트 뒤에있는 비 투명 오브젝트가 표시됩니다. 그러나 다른 투명한 오브젝트의 backside은 표시되지 않습니다. material.side = THREE.DoubleSide을 설정합니다.투명한 개체는 다른 투명한 개체를 숨 깁니다 (alphaTest가 작동하지 않고 depthWrite = false가 문제를 일으킴)

내가 볼 때 material.depthWrite = false으로 설정하면 눈에 띄는 결함이 발생하며 두 번째 그림에서 볼 수 있습니다.

나는 과 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; 

enter image description here

depthwrite = false; 

enter image description here

여기에 보이게하는 방법을 그림에서 볼 수있는 재료의 값입니다 enter image description here

다른 측면에서 본 것 같습니다. 뒤에있는 투명 오브젝트를 볼 수 있습니다. enter image description here

이 문제에 대한 혼란을 마무리하기 위해 다른 그림을 게시해야합니다. 다른보기 (180 ° 회전 된 장면)에서 사진 (1)을 볼 수 있습니다. 다른보기에 표시된 물체가 뒷면에 누락 된 것처럼 보이므로 다른보기에서도 볼 수 있습니다 (투명 한 것도 있음). . 이 모든 객체는 똑같은 재질을 가지고 있습니다! 투명한 객체를 생성 할 때

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); 
+0

당신은 바이올린을 가지고 있습니까? – gaitat

+0

no :/어쩌면 내가 그것을 사용하기 시작할 필요가있다 – Dubbox

답변

1

I을 당신의 사진에서 당신의 쟁점을 확실히 밝힐 수는 없지만, 이것이 동일한지를 제게 말해 줄 수 있습니까? 보내고있어?

live 예제 세트에서 threejs.org/docs/#Reference/Materials/MeshStandardMaterial로 이동하여 앰비언트에서 흰색으로 설정하고 재료에서 투명을 켜고 불투명도를 약 0.7로 설정하십시오.

전경에있는 원환 체의 투명한 부분이 다른 부분을 뒤쫓아 가리는 방식을 볼 수 있습니까? 시간이 좀 걸릴 수도 있지만, 회전하는 동안 시계를 보면 내 말을 알아야합니다.

이것은 당분간 three.js로 고칠 수있는 것이 아니라 WebGL 제한 사항입니다.

+0

그래, 그게 내 문제 야. 이 답변을 주셔서 감사합니다. 이제는 프로그래밍 실수로 인한 것이 아닙니다. – Dubbox

0

을 다음과 같이

enter image description here

envMap textureCube가 생성되고, truepremultipliedAlpha 설정을 시도하고 그 문제를 해결할 수 :

var material = new THREE.MeshPhongMaterial({color: 'color', transparent: true,opacity:0.5,premultipliedAlpha: true}); 
+0

지금 막 돌아왔다. 지금까지는 도움이되지 않을 것이다 :/ – Dubbox

+0

''사실 '로''premultipliedAlpha'를 설정하면 참조하십시오. –

+0

작동하지 않습니다. 그냥 시도했습니다. 그것. 방금 다른면에서 다른 투명한 대상을 볼 수 있다고 생각했습니다 (게시물의 새 그림 참조).어쩌면 내 3D 객체에 문제가있을 수 있습니다. 한 객체가 투명 객체를 통해 표시되고 다른 객체가 표시되지 않을 수 있습니다. – Dubbox