У меня в настоящее время проблема с прозрачностью. Как вы можете видеть на рисунках, отображаются непрозрачные объекты за прозрачным объектом. Но backside
другого прозрачного объекта не отображается, я устанавливаю material.side = THREE.DoubleSide
.Прозрачный объект скрывает другие прозрачные объекты (alphaTest не работает и depthWrite = false вызывает некоторые проблемы)
Это видно, когда я устанавливаю 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;
Вот как это должно выглядеть, работает, только если объект сзади не является прозрачным
Кажется, что с другой стороны я может видеть прозрачный объект позади.
Для полной путаницы в этой проблеме я должен опубликовать еще одну фотографию. Здесь вы можете видеть изображение (1) только с другой стороны (сцена повернута на 180 °), так как вы можете видеть, что это представление отличается от того, что в задней части отсутствует объект (также прозрачный), который показан в другом представлении , Все эти объекты имеют тот же самый материал!
EnvMap textureCube
создается следующим образом
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);
у вас есть скрипка? – gaitat
нет:/но, может быть, мне нужно начать использовать его – Dubbox