Three js - клонирование шейдера и изменение унифицированных значений

Я работаю над созданием шейдера для создания ландшафта с тенями.

Моя отправная точка - клонировать шейдер Ламберта и использовать ShaderMaterial, чтобы со временем настроить его с помощью моего собственного скрипта.

Стандартный метод работает хорошо:

var material = new MeshLambertMaterial({map:THREE.ImageUtils.loadTexture('images/texture.jpg')});

var mesh = new THREE.Mesh(geometry, material);

etc

Результат: Result with standard lambert material

Однако я хотел бы использовать материал Ламберта в качестве основы и работать над ним, поэтому я попробовал это:

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

Результат для этого: Result for cloning lambert shader and changing map uniforms

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

Я довольно плохо знаком с тремя, так что я мог бы сделать что-то в корне неправильно, если бы кто-то мог указать мне правильное направление здесь, это было бы здорово.

Я также могу разместить демонстрационные ссылки, если это будет полезно?

Спасибо, Будет

РЕДАКТИРОВАТЬ:

Вот несколько демонстрационных ссылок.

Демо с шейдерным материалом:http://dev.thinkjam.com/experiments/threejs/terrain/terrain-shader-material.html

Демо с рабочим материалом Ламберта:http://dev.thinkjam.com/experiments/threejs/terrain/terrain-lambert-material.html

Ответы на вопрос(1)

Ваш ответ на вопрос