2016-03-29 29 views
0

Üç.js ile oynuyordum.Çeviri uygulandıktan sonra köşe konumunu nasıl alabilirim, üç.js kullanarak geometriye döndürün ve ölçeklendirin?

Amacım, sahnede bir eğri oluşturmak ve ona bir dönüşüm uygulamaktır. fonksiyon hattını oluşturmaktır geçerli:

var random_degree = Math.round(Math.rand() * 180); 
var tmp = [ 
    new THREE.Vector3(-5, 0, 0), 
    new THREE.Vector3(0, 0, 5), 
    new THREE.Vector3(5, 0, 0), 
    new THREE.Vector3(0, 0, -5), 
]; 
var canvasW = window.innerWidth; 
var canvasH = window.innerHeight; 
// so the initial curve is a circle on x-z plain. 

function get_line_geo() { 
    var angle = (random_degree + 1 * 0.25) % 360 * (Math.PI/180); 
    var tx = Math.cos(angle) * canvasW * 0.25; 
    angle = (random_degree + 1 * 0.3) % 360 * (Math.PI/180); 
    var ty = Math.sin(angle) * canvasH * 0.25; 

    var curve = new THREE.CatmullRomCurve3(tmp); 
    curve.closed = true; 

    var geometry = new THREE.Geometry(); 
    geometry.vertices = curve.getPoints(300); 
    console.log(geometry.vertices[0].x + ' ' +geometry.vertices[0].y + ' ' +geometry.vertices[0].z); 
    var material = new THREE.LineBasicMaterial(); 
    var curveObject = new THREE.Line(geometry, material); 
    curveObject.translateX((canvasW - margin * 2)/2 + tx); 
    curveObject.translateY((canvasH - margin * 2)/2 + ty); 
    curveObject.translateZ((canvasH - margin * 2)/2 + ty); 

    curveObject.rotation.x = ((random_degree + 1 * 0.25) % 360) * Math.PI/180; 
    curveObject.rotation.y = ((random_degree + 1 * 0.25) % 360) * Math.PI/180; 
    curveObject.rotation.z = ((random_degree + 1 * 0.25) % 360) * Math.PI/180; 

    curveObject.scale.x = 10; 
    curveObject.scale.y = 10; 
    curveObject.scale.z = 10; 

    console.log(curveObject.geometry.vertices[0].x + ' ' +curveObject.geometry.vertices[0].y + ' ' +curveObject.geometry.vertices[0].z); 

    return curveObject; 
} 

Ben console.log() kullanarak köşe pozisyonları kontrol, bunlar geometri bağlamında değişmedi. Yani bu köşeler için yeni pozisyonları hesaplayabileceğim herhangi bir yöntem var mı?

cevap

1

geometrisine geometrisine dönüşüm uygulamayın. Dönüşümleri nesnesine nesnesine uyguladınız.

Kullandığınız yöntemlerin kaynak kodunu incelemek iyi bir fikirdir, böylece ne yaptığınızı anlarsınız. Bu şekilde çok şey öğreneceksiniz.

var vector = new THREE.Vector3(); 

vector.copy(curveObject.geometry.vertices[ 0 ]); 

vector.applyMatrix4(curveObject.matrix); 

console.log(vector); 

Three.js r.75

+0

Büyük:

değiştirdikten sonra position, nesnenin rotation veya scale özellikleri, sen Sonra bunu

curveObject.updateMatrix(); 

çağırmanız gerekir , bana çok yardımcı oldu. Tek şey, üç.js'nin en son sürümünde, verctor3 için applyMatrix iki yönteme güncellendi: 1. applyMatrix3 ve 2 applyMatrix4. Ve sanırım bu r75. Lütfen http://threejs.org/docs/index.html#Reference/Math/Vector3 adresini ziyaret edin. Her neyse bir cevap olarak işaretleyeceğim. Ve test ettiğim şeyden, applyMatrix4 istediğim şey. –

+0

Oops. Tipo. Düzeltildi. Teşekkürler. – WestLangley