影のある地形を生成するためのシェーダーの作成に取り組んでいます。
私の出発点は、ランバートシェーダーのクローンを作成し、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);
これの結果:
シェーダーが追加した新しいテクスチャを考慮していないように見えますが、ユニフォームをログに記録したときにインスペクターを見ると、マップオブジェクトは正しい値を持っています。
私は3人にかなり慣れていないので、根本的に間違ったことをしている可能性があります。誰かがここで私を正しい方向に向けることができれば、それは素晴らしいことです。
役立つ場合は、デモリンクを表示することもできますか?
ありがとう、ウィル
編集:
ここにいくつかのデモリンクがあります。
シェーダーマテリアルを使用したデモ:http://dev.thinkjam.com/experiments/threejs/terrain/terrain-shader-material.html
ランバート素材を使用したデモ:http://dev.thinkjam.com/experiments/threejs/terrain/terrain-lambert-material.html