我正在创建着色器来生成阴影地形。
我的出发点是克隆兰伯特着色器,并使用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