0

私は現在 Three.js に飛び込んでおり、ネイティブ プリミティブからインポートされた OBJ オブジェクトに切り替えるときに、最初の実際の問題に遭遇しました。

Cinema4D r15 で UV マッピングし、OBJ ファイルとしてエクスポートした十二面体の単純なモデルがあります。このモデルを DodecahedronGeometry で使用すると、ジオメトリはディレクショナル ライトで照らされなくなりますが、プリミティブを使用するとそうなります。

この JSFiddle を参照してください: https://jsfiddle.net/xm3ttmxw/1/

ここで望ましい結果を参照してください (プリミティブを使用): https://jsfiddle.net/84hbs7ed/1/

ご覧のとおり、OBJ 内のすべてのメッシュに対してreceiveShadowプロパティをに設定しています。trueライトとレンダラーのシャドウ マップを有効にしました。ディレクショナル ライトはカメラに追従し、原点 (12 面体の中心) を指しています。アンビエントライトはうまく機能しているようです。

何か案が?前もって感謝します

4

1 に答える 1

1

さらに調査した結果、問題は頂点法線の欠如に起因するようです (OBJLoader はそれらを計算しません)。解決策は、ここに示すようにその場で頂点法線を計算することです: https://stackoverflow.com/a/28568522/3446439

object.traverse( function( child ) {
    if ( child instanceof THREE.Mesh ) {
        child.geometry.computeVertexNormals(); //add this
    }
} );

ありがとうセバスチャン・バルテス!

于 2015-05-18T12:36:46.253 に答える