Как вы визуализируете буфер глубины объектов со смещенными вершинами?

Я изменил этот пример: http://stemkoski.github.io/Three.js/Shader-Fireball.html

и вставил:

var depthShader = THREE.ShaderLib["depthRGBA"];
var depthUniforms = THREE.UniformsUtils.clone(depthShader.uniforms);
depthMaterial = new THREE.ShaderMaterial({
     fragmentShader : depthShader.fragmentShader,
     vertexShader : depthShader.vertexShader,
     uniforms : depthUniforms
});
depthMaterial.blending = THREE.NoBlending;

depthTarget = new THREE.WebGLRenderTarget(window.innerWidth, window.innerHeight, {
    minFilter : THREE.NearestFilter,
    magFilter : THREE.NearestFilter,
    format : THREE.RGBAFormat
});

quadCamera = new THREE.OrthographicCamera(window.innerWidth / -2, window.innerHeight / 2, window.innerWidth / 2, window.innerHeight / -2, -1000, 2000);
quadCamera.position.z = 100;

var shader = THREE.UnpackDepthRGBAShader;
var uniforms = new THREE.UniformsUtils.clone(shader.uniforms);
uniforms.tDiffuse.value = depthTarget;
quadMaterial = new THREE.ShaderMaterial({
    vertexShader : shader.vertexShader,
    fragmentShader : shader.fragmentShader,
    uniforms : uniforms
});

var mesh = new THREE.Mesh(new THREE.PlaneGeometry(window.innerWidth, window.innerHeight*1.5), quadMaterial);
mesh.position.z = -500;
mesh.position.y = 200;
quadScene = new THREE.Scene();
quadScene.add(mesh);

И изменил функцию рендеринга на:

function render() {
   renderer.overrideMaterial = depthMaterial;
   renderer.render(scene, camera, depthTarget, true);
   renderer.overrideMaterial = null;
   renderer.render(quadScene, quadCamera);
}

и выглядит так: http://i.imgur.com/hiHLc8g.png

  1. Как сделать так, чтобы буфер глубины выглядел как буфер глубины, а не был черным?
  2. Будут ли пользовательские ShaderMaterials, которые смещают вершины, правильно записываться в буфер глубины? Потому что у меня есть другой проект с объектами смещенных вершин, и глубина не учитывает смещение. Есть ли способ сделать это?

person user2010496    schedule 16.10.2013    source источник


Ответы (1)


Ну, мне кажется странным, что самолет тоже черный. Потому что в вашей теории разве плоскость не была бы правильно окрашена, если бы она была только для смещенных вершин?

Может быть, значения ближней и дальней плоскости отсечения камеры отключены? Таким образом, он не работает с глубиной правильно. Вы проверили, что ближние и дальние значения находятся в разумном диапазоне?

person GuyGood    schedule 18.10.2013