Ich arbeite an der Erstellung eines Shaders, um Gelände mit Schatten zu erzeugen.Drei js - Einen Shader klonen und einheitliche Werte ändern
Mein Ausgangspunkt ist, den Lambert Shader zu klonen und ein ShaderMaterial zu verwenden, um es schließlich mit meinem eigenen Skript anzupassen.
Die Standard-Methode funktioniert gut:
var material = new MeshLambertMaterial({map:THREE.ImageUtils.loadTexture('images/texture.jpg')});
var mesh = new THREE.Mesh(geometry, material);
etc
Das Ergebnis:
aber ich möchte das lambert Material als Basis und Arbeit auf es zu benutzen, so habe ich versucht, diese :
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);
Das Ergebnis für diese:
Es sieht so aus, als ob der Shader die neue Textur, die ich hinzugefügt habe, nicht berücksichtigt, aber wenn ich die Inspektoren anschaue, wenn ich die Uniformen protokolliert habe, hat das Map-Objekt die korrekten Werte.
Ich bin ziemlich neu zu drei, also könnte ich etwas fundamental falsch machen, wenn mir jemand hier in die richtige Richtung zeigen könnte, das wäre toll.
Ich kann auch Demo-Links aufstellen, wenn das hilfreich wäre?
Danke, Will
EDIT:
Hier sind einige Demo-Links.
Demo mit Shader Material: http://dev.thinkjam.com/experiments/threejs/terrain/terrain-shader-material.html
Demo mit Arbeits lambert Material: http://dev.thinkjam.com/experiments/threejs/terrain/terrain-lambert-material.html
Yup, Demo-Links wäre in der Tat hilfreich. – mrdoob
Hi mrdoob, Prost für die schnelle Antwort. Ich habe Demo-Links zum Beitrag hinzugefügt. Wenn Sie Licht darauf werfen können, wäre das erstaunlich. – WillDonohoe
Ich habe bemerkt, einige Funktionen innerhalb der WebGL Renderer spezifisch für drei.MeshLambertMaterial, das nicht mit THREE.ShaderMaterial auftritt. Besonders mit erfrischenden Uniformen. https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLRenderer.js#L4858 Dies ist nur ein Stich im Dunkeln hier, aber das ist etwas, das Probleme verursachen könnte ? – WillDonohoe