2016-04-03 3 views
0

three.js、このような:角度 - 私はちょうど一面(三角形)とのジオメトリを作成する場合

私はシーンをレンダリング

geometry = new THREE.Geometry() 
    geometry.vertices.push(new THREE.Vector3(0, 0, 0)) 
    geometry.vertices.push(new THREE.Vector3(0, 10, 0)) 
    geometry.vertices.push(new THREE.Vector3(0, 10, 10)) 
    geometry.faces.push(new THREE.Face3(0, 1, 2)) 
    mesh = new THREE.Mesh(geometry, material) 
    mesh.position.x = 10 
    @scene.add(mesh) 

そして[CoffeeScriptの構文]:

@renderer.render(@scene, @camera) 

どのように顔の角度がカメラにあるのか分かりますか?

明確にするには:三角形がカメラの右を指しているので、幅と高さが最大になるように、similar to this pictureとすると、0deg(または180deg)の角度が予想されます。

私はそれがちょうど横に見ているので、三角形がちょうどオンラインであるカメラに回転している場合、similar to this picture、私は角度が90deg(または270deg)であると思います。

答えて

2

私は、カメラが見ている方向はあなたにとって重要ではないと仮定しようとしています、その位置だけです。

あなたがしたいのは、顔の法線ベクトル(三角形が向いている方向を示すベクトル)と三角形からカメラの方向を指すベクトルの内積を取ることです。ここ

triangle and camera

N1ベクターは正常面である:単位長さを有している

var triangleNormal = triangleMesh.geometry.faces[0].normal 

V

var dirToCamera = camera.position.clone().sub(triangleMesh.position); 

N2だけで正規化されたVあるカメラに三角形から指すベクトルである:今

dirToCamera.normalize(); 

、α取得するには、ドットを取りますn1およびn2

var angleValue = triangleNormal.dot(dirToCamera); 

しかし、 'angleValue'は度で表されていません。角度の余弦です。この値は、三角形がカメラを向いているときは1、90度のときは0、反対の方向を向けるときは-1になります。

あなたは度でそれをしたい場合は、単に実行します。

var angle = Math.acos(angleValue) * 180/Math.PI; 

するとより多くの事。 n2dirToCamera)を計算すると、私は三角形メッシュの位置を使用しました。複数の面を持つオブジェクトを使用している場合は、各三角形の中心点を計算し、メッシュの位置の代わりにその点を使用することができます。

ここにはcodepen example

関連する問題