5

ブレンダーから json にエクスポートされたシーン (たとえば、2 つの異なるキューブ) を読み込んで、それらを識別することは可能ですか?

たとえば、一方を回転させ、もう一方を移動させるなど、それらを区別する必要があります。

前もって感謝します!

デンブ

編集+++

ご回答ありがとうございます。

したがって、1 つの JSON ファイルに 2 つのキューブをロードすると、次のようになります。

loader.load("untitled1.js", function(geometry, materials) {  
        mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial(materials));
        mesh.scale.set( 10, 10, 10 );
        mesh.position.y = 0;
        mesh.position.x = 0;
        scene.add( mesh );       
});

最初のキューブを移動するにはどうすればよいですか?

mesh.getObjectById(0).position.x = 15;

うまくいかないようです。

ありがとうございました!

4

2 に答える 2

7

はい、Blender からエクスポートされた json ファイルからシーン全体をロードすることが可能です!

次のプロセスでそれを達成しました:(three.js r80を使用)

  1. まず、次の画像 Outliner のように、Blender でさまざまなオブジェクトに名前を付ける必要があります。
  2. 次に、Blender 用の Three.js json エクスポーター アドオンを使用してファイルをエクスポートできますが、次のように [シーン] チェックボックスをマークする必要があります。

**画像**: Blender で (ステップ 1 と 2)

  1. このオプションを使用すると、任意のテキスト エディターを使用して確認できるように、json ファイルに Blender のアウトライナーのすべてのメッシュが含まれるようになります。メッシュが選択されているかどうかは関係ありません。
  2. ルート(または親) オブジェクトはもうGeometryではないことを知っておくことが重要です。今ではObjectタイプでラベル付けされています。(メッシュタイプの)子オブジェクトにアクセスするには、次のコードのようにルートオブジェクトでgetObjectByNameメソッドを使用できます。

    jsonloader.load( "obj/Books.json", function ( loadedObj ) {
        var surface = loadedObj.getObjectByName("Surface");
        var outline = loadedObj.getObjectByName("Outline");
        var mask = loadedObj.getObjectByName("Mask");
        // Watch the objects properties on console:
        console.log(loadedObj);
        console.log(surface);
        console.log(outline);
        console.log(mask);
    } );
    

    ブラウザのコンソールを確認すると、適切なオブジェクトが割り当てられていることがわかります。そしてこれからは、子オブジェクトを個別に操作できます (移動、回転、マテリアルの変更など)。

**画像**: Json 構造とコンソール出力 (ステップ 3 と 4)

于 2016-09-09T01:20:54.623 に答える
-1

ロードされた各オブジェクトには、関連付けられた .id があります。そのため、Object3D.getObjectById() を使用して検索し、変換を適用できます。

于 2013-05-03T11:08:23.413 に答える