Estoy trabajando en la creación de un sombreador para generar el terreno con sombras.Tres js: clonación de un sombreador y cambio de valores uniformes
Mi punto de partida es clonar el sombreador lambert y usar un ShaderMaterial para eventualmente personalizarlo con mi propio script.
El método estándar funciona bien:
var material = new MeshLambertMaterial({map:THREE.ImageUtils.loadTexture('images/texture.jpg')});
var mesh = new THREE.Mesh(geometry, material);
etc
El resultado:
Sin embargo, me gustaría utilizar el material Lambert como base y el trabajo en la parte superior de la misma, por lo que he intentado esto :
var lambertShader = THREE.ShaderLib['lambert'];
var uniforms = THREE.UniformsUtils.clone(lambertShader.uniforms);
var texture = THREE.ImageUtils.loadTexture('images/texture.jpg');
uniforms['map'].texture = texture;
var material = new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader: lambertShader.vertexShader,
fragmentShader: lambertShader.fragmentShader,
lights:true,
fog: true
});
var mesh = new THREE.Mesh(geometry, material);
El resultado de éste:
Parece que el sombreador no está teniendo en cuenta la nueva textura que he agregado, sin embargo, mirando al inspector cuando registré los uniformes, el objeto del mapa tiene los valores correctos.
Soy bastante nuevo para tres, así que podría estar haciendo algo fundamentalmente malo, si alguien pudiera indicarme la dirección correcta aquí, sería genial.
¿Puedo también poner enlaces de demostración si eso fuera útil?
Gracias, Will
EDIT:
Estos son algunos enlaces de demostración.
demostración de material de sombreado: http://dev.thinkjam.com/experiments/threejs/terrain/terrain-shader-material.html
demo con material de trabajo Lambert: http://dev.thinkjam.com/experiments/threejs/terrain/terrain-lambert-material.html
Sí, los enlaces de demostración serían de gran ayuda. – mrdoob
Hola mrdoob, aplausos por la respuesta rápida. Agregué enlaces de demostración a la publicación. Si puede arrojar algo de luz sobre esto, sería increíble – WillDonohoe
He notado alguna funcionalidad dentro del procesador webgl específico de TRES.MeshLambertMaterial que no ocurre con THREE.ShaderMaterial. Particularmente con uniformes refrescantes. https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLRenderer.js#L4858 Esto es solo una puñalada en la oscuridad aquí, pero es esto algo que podría estar causando problemas ? – WillDonohoe