2016-03-22 6 views
0

私はこの3つのJSシーンがありますlookAtが指定されたベクターを見ないのはなぜですか?

カメラ - が表示されない

原産地(3次元ベクトル) - 0,0,0時:http://codepen.io/giorgiomartini/pen/ZWLWgX

シーンは、5つの事項が含まれています。

objOne - グリーン

objParent - レッド

CenterOfscene - ブルー

objOneはobjParentの子です。 ObjOne looksAt origenは0,0,0の3dベクトルです。

しかし、0,0,0を見るのではなく、objOne。原点ベクトルはどこですか、それはobjParentを見ています....?

アイデアはありますか?

私が望むのは、objOneが0,0,0を見ることです。元のベクターはどれですか。

これが不正確な理由は何ですか?ありがとう。

THREE.SceneUtils.detach(objOne, objParent, scene); 
THREE.SceneUtils.attach(objOne, scene, objParent); 

var origen = new THREE.Vector3(0, 0, 0); 

var render = function() { 
    objOne.lookAt(origen); 
    requestAnimationFrame(render); 

    xOffset += 0.01; 
    yOffset += 0.011; 
    zOffset += 0.012; 

    xOffsetParent += 0.0011; 
    yOffsetParent += 0.0013; 
    zOffsetParent += 0.0012; 

    camXPos = centeredNoise(-1,1,xOffset); 
    camYPos = centeredNoise(-1,1,yOffset); 
    camZPos = centeredNoise(-1,1,zOffset); 
    objOne.position.x = camXPos*4; 
    objOne.position.y = camYPos*4; 
    objOne.position.z = camZPos*4; 

    camParentXPos = centeredNoise(-1,1,xOffsetParent); 
    camParentYPos = centeredNoise(-1,1,yOffsetParent); 
    camParentZPos = centeredNoise(-1,1,zOffsetParent); 
    objParent.position.x = camParentXPos*10; 
    objParent.position.y = camParentYPos*10; 
    objParent.position.z = camParentZPos*10; 

    renderer.render(scene, camera); 
}; 

render(); 

答えて

2

は、親の回転および/または翻訳されたオブジェクトをサポートしていません。

あなたの回避策は、(1)シーンの子として子を追加し、(2)親オブジェクトの子として移動するダミーのObject3Dで子オブジェクトを置き換えることです親と

次に、あなたのレンダリングループで、ここで

child.position.setFromMatrixPosition(dummy.matrixWorld); 
child.lookAt(origin); 

three.js r.75

+0

結局のところ、ObjOneはカメラになります...カメラは回転した親や翻訳された親を持つオブジェクトにも対応していませんか? – GiorgioMartini

+0

見ているオブジェクトには、回転/平行移動した親があってはいけません。親を持たないかシーンの子であるカメラは 'lookAt()'を直接サポートします。 – WestLangley

+0

ありがとうございますが、親オブジェクトの子であるためにObjOneが必要です。そのため、親objectParentには大きな距離のスムーズなperlinノイズがありますが、objOneには少し速い別のperlinノイズがあります。 現在の設定(objOneがカメラであると仮定)がベクターを探す方法はありますか? また、このタイプのカメラの動き(実際にはブラウン運動など)を追加して、カメラがまだシーンの子どもになるようにする簡単な方法はありますか? – GiorgioMartini

0

が修正codepenです:親の周り http://codepen.io/anon/pen/oxGpPQ?editors=0010

今緑のディスクの乗り物(青いディスク(または 'origen'ベクトル)を見ながら、すべて赤色の球体)を表示します。

行163と164のコメントを解除して、カメラを緑色のディスクの位置にして、カメラが親赤色の球体を回りながら青色のディスク( 'origen'ベクトル)を見るようにします。私はこれを達成する方法

は次のとおりです。 1.メイク親レッドメッシュ 2. dummyChild Object3D(これは目に見えない数学の対象である) 3.メイク子グリーンメッシュ 4.メイク原産地centerOfSceneブルーメッシュ 5.添付します親、子、およびcenterOfSceneのメッシュをシーンに追加します(ダミーチャイルドではありません)。 6.ダミーチャイルドを親に追加します:parent.add(dummyChild);

レンダリング機能: 1.ノイズ機能付きの親を移動します(ダミーチャイルドをオフセットします)。 2。dummyChildを別のノイズ関数で移動する(ダミーチャイルドの世界の中心は赤い親の位置) 3.目に見えないdummyChildがある場所にグリーンの子メッシュを貼り付けます。行列は、そのローカルシステムを保持している - dummyChildが赤親によって相殺されているのでしかし、我々はそれは世界がシーンに関連して座標です取得する必要はなく、赤の世界でその座標は、私たちはそのmatrixWorldなく行列が

child.setFromMatrixPosition(dummyChild.matrixWorld); 

お知らせを使用しますmatrixWorldはSceneまたはWorldの座標系に対して座標を保持しています。 4. lookAtを使用して、緑色の子ディスクのlookAtを、青いcenterOfSceneメッシュを起点ベクトルまたはシーンの中央に配置します。

希望すると便利です。 :)

+0

ありがとう!しかし、それは私が探しているものではありません。元のシーンが表示されている場合:http://codepen.io/giorgiomartini/pen/ZWLWgXでは、親(赤いオブジェクト)が動き回り、子(緑色のobj)が赤いオブジェクトに追従しているのを見ることができますが、緑色のオブジェクトは独立して動きますが、赤色のオブジェクトでも動きます。私はorigenと呼ばれる3dvectorがある世界の起源を見るために緑色のobjだけを必要とします。今あなたのペンに、緑色のobjは移動しますが、それ以上の赤色のobjは続きません。 – GiorgioMartini

+0

ああ、お元気ですか。上の私の新しい答えを見てください – erichlof

+0

@GiorgioMartini私は上記の答えを更新しました、うまくいけば、コードは今あなたのために働いています:-) – erichlof

関連する問題