私は影付きの地形を生成するシェーダの作成に取り組んでいます。3つの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);
結果
シェイダーが私が追加した新しいテクスチャを考慮していないかのように見えますが、ユニフォームを記録したときにインスペクターを見るとマップオブジェクトは正しい値を持っています。
私は3人にかなり新しいので、誰かがここで正しい方向に向けることができれば、根本的に何かをしているかもしれません。
デモリンクが役に立つ場合は、デモリンクを作成することもできます。
おかげで、 ウィル
EDIT:
はここにいくつかのデモリンクです。シェーダ材料と
デモ:作業ランバート材料と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
私は、THREEに特有のwebglレンダラー内のいくつかの機能に気付きました。THREE.ShaderMaterialで発生しないMeshLambertMaterial。特に爽やかな制服で。 https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLRenderer.js#L4858 これは暗闇の中でのスタブですが、これは問題を引き起こす可能性のあるものです? – WillDonohoe