2

Blender で 2 つの異なる色のマテリアルで Dice を作成し、Blender エクスポーターでエクスポートしました。私の three.js コードでは、JSONLoader を使用してメッシュを取得し、new THREE.MeshFaceMaterial(); を使用します。材料として。

これにより、モデルが正常にロードされ、2 つの異なる色のマテリアルが正しく表示されます。しかし、私の問題は、サイコロの表面にスペキュラ ハイライトを持たせたいということです。これは、エクスポートされた Blender モデルでも可能ですか?

球体のマテリアルとして THREE.MeshPhongMaterial() を使用すると、スペキュラー ハイライトを含む球体を取得できましたが、球体は Blender からインポートされておらず、私の知る限り、読み込み時にフォン マテリアルを適用できません。 JSONLoader を使用したメッシュ、またはトリックはありますか? 覚えておいてください: さいころに 2 つの異なる色のマテリアルがあり、これを Blender から JSON ファイルにインポートしました。サイコロ自体は赤ですが、ドットは黒でなければなりません。つまり、立方体の各面で異なる色について話しているのではなく、立方体のすべての面で 2 つの異なる色について話しているのです。手伝って頂けますか?

コード スニペットは次のとおりです。

loader.load("models/dice.js", function(geometry){
    var material = new THREE.MeshFaceMaterial();
    material.specular = 0xffffff;
    material.shininess = 10000000000;
    dice=new THREE.Mesh(geometry, material);
    dice.position.set(0,-400,5);
    dice.scale.set(75, 75, 75);
    dice.overdraw = true;
    dice.name="dice";
    navscene.add(dice);
});

2 つのマテリアルからテクスチャを作成して Blender に適用すると、JSONLoader がマテリアルの代わりにテクスチャを読み込むことができますが、それを使用してもスペキュラー ハイライトを実現できませんでした。

4

2 に答える 2

2

Thx West、あなたは私を正しい方向に向けました。問題は、Blender の標準マテリアル タイプが Lambert であるということでした。Blender では、この Lambert マテリアルは目的のスペキュラー ハイライトを生成しますが、一度 3 にインポートすると、その効果は失われます。これがバグなのか、望ましい動作なのかはわかりません。

解決策は、Blender のマテリアル タイプを Phong マテリアルに設定することです。これはインポート後も機能します。私の推測では、 THREE.MeshFaceMaterial は、ロードされたすべてのマテリアルを含む配列であり、それらがランバート、フォンなどであるかどうかにかかわらずです。それらの材料タイプを混合することさえ可能です。したがって、THREE.MeshFaceMaterial は「スタンドアロン」のマテリアル タイプではないように思えます。間違っていたら訂正してください。

于 2012-09-22T12:15:46.933 に答える
1

メッシュ ジオメトリにmaterials配列がある場合、ジオメトリを読み込んだ後、いつでも配列要素を変更できます。

geometry.materials[ i ] = new THREE.MeshPhongMaterial( ... );

次に、メッシュのマテリアルを次のようにしMeshFaceMaterialます。

mesh = new THREE.mesh( geometry, new THREE.MeshFaceMaterial() );

使用しているエクスポーター スクリプトは、設定に基づいて、デフォルトでマテリアルに設定geometry.materialsされる場合があります。Lambertスクリプトのソース コードを見て、理解できるかどうかを確認してください。

于 2012-09-21T17:59:03.917 に答える