我正在創建着色器來生成陰影地形。三個js--克隆着色器並更改統一值
我的出發點是克隆lambert着色器並使用ShaderMaterial最終用我自己的腳本對其進行定製。
的標準方法效果很好:
var material = new MeshLambertMaterial({map:THREE.ImageUtils.loadTexture('images/texture.jpg')});
var mesh = new THREE.Mesh(geometry, material);
etc
結果:
不過,我想使用蘭伯特材料爲基礎,工作在它的上面,所以我想這:
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);
這一個結果:
看起來好像着色器沒有考慮到我添加的新紋理,但是在記錄制服時查看檢查器,地圖對象具有正確的值。
我很新,所以我可能會做一些根本性的錯誤,如果有人能指出我在正確的方向在這裏,那將是偉大的。
我也可以把演示鏈接,如果這將有所幫助?
感謝, 威爾
編輯:
下面是一些演示鏈接。
演示與着色材料:http://dev.thinkjam.com/experiments/threejs/terrain/terrain-shader-material.html
演示與工作蘭伯特材料:http://dev.thinkjam.com/experiments/threejs/terrain/terrain-lambert-material.html
是的,演示鏈接確實會有幫助。 – mrdoob
嗨mrdoob,爲快速回復歡呼。我添加了該帖子的演示鏈接。如果你可以擺脫這種情況,那將是驚人的 – WillDonohoe
我注意到了特定於三種的webgl渲染器中的一些功能。MeshLambertMaterial不會與THREE.ShaderMaterial發生。特別是清爽的制服。 https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLRenderer.js#L4858 這只是一個在黑暗中刺傷,但是這是可能導致問題的東西? – WillDonohoe