Trzy js - klonowanie shadera i zmiana jednolitych wartości

Pracuję nad stworzeniem cieniowania, aby wygenerować teren z cieniami.

Moim punktem wyjścia jest sklonowanie shadera Lambert i użycie ShaderMaterial, aby ostatecznie dostosować go za pomocą własnego skryptu.

Standardowa metoda działa dobrze:

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

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

etc

Wynik:

Chciałbym jednak użyć materiału Lambert jako podstawy i pracować nad nim, więc spróbowałem tego:

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

Wynik tego:

Wygląda na to, że shader nie bierze pod uwagę nowej tekstury, którą dodałem, jednak patrząc na inspektora, gdy logowałem mundury, obiekt mapy ma poprawne wartości.

Jestem całkiem nowy na trzech, więc może robię coś fundamentalnie złego, jeśli ktoś mógłby wskazać mi właściwy kierunek tutaj, byłoby świetnie.

Mogę również umieścić linki demonstracyjne, jeśli byłoby to pomocne?

Dzięki, Will

EDYTOWAĆ:

Oto kilka linków demo.

Demo z materiałem shadera:http://dev.thinkjam.com/experiments/threejs/terrain/terrain-shader-material.html

Demo z działającym materiałem Lamberta:http://dev.thinkjam.com/experiments/threejs/terrain/terrain-lambert-material.html

questionAnswers(1)

yourAnswerToTheQuestion