1

雷と平面のジオメトリに問題があります。特定の高さデータで平面ジオメトリを作成している間、ディレクショナル ライトがメッシュに影響を与えるようには見えません。全体的にまだ同じ色があります:(

var geometry: THREE.PlaneGeometry
   = new THREE.PlaneGeometry(1000, 1000, 199, 199);

for (var i = 0, l = geometry.vertices.length; i < l; i++)
    geometry.vertices[i].z = this._heightmap.data[i];

var mesh = new THREE.Mesh(geometry, 
    new THREE.MeshLambertMaterial({ color: 0x1AAD2B }));

mesh.applyMatrix(new THREE.Matrix4().makeRotationX(- Math.PI / 2));

this.screen.get("Scene").add(mesh);

var light = new THREE.DirectionalLight(0xffffff, 1);

light.position.set(0.8, 0.5, 1);
light.position.normalize();
this.screen.get("Scene").add(light);

http://s14.directupload.net/images/130703/jsfx9tr3.png

独自のシェーダーを作成する必要がありますか、それとも実行する必要があるオプションの質問ですか?

敬具クリスチャン

4

1 に答える 1

1

頂点の法線は変更していません。それらはすべて ( 0, 1, 0 ) です。

また、四角形の頂点を変更すると、4 つの頂点が平面ではなくなる可能性が高くなります。これにより、あらゆる種類の問題が発生します。(グーグル非平面クワッド。)

PlaneGeometry最初のものを三角測量することで、これらの問題を回避できます。

THREE.GeometryUtils.triangulateQuads( geometry );

この関数は頂点法線を再計算することに注意してください。ソースを見て、それが何をしているのかを理解してください。

編集: three.js はクワッドをサポートしなくなりました。PlaneGeometry現在は三角化されています。

three.js r.66

于 2013-07-03T19:23:28.170 に答える