2017-01-02 34 views
1

在Cinema4d中,這個模型使用兩個圓圈掃描nurbs。一個圓是輪廓樣條曲線,並沿另一個圓弧路徑掃描。隨着掃描的Nurbs您可以指定啓動和停止的完成率和規模等如何在Three.js中重新創建此掃描nurbs模型?

enter image description here

有沒有一種方式重現這三個JS?我想我可以將它導出爲STL,但我更願意讓3.js自己來管理它。

更新:

我設置了一系列CircleGeometry來使用此效果繞。

Series of circles going around in a circle

var startR = .6, 
 
    incR = .0049; 
 

 
for (var p = 0; p < 110; p++) { 
 
    var r = startR - (incR * p); 
 
    var geometry = new THREE.CircleGeometry(r, 12); 
 
    var material = new THREE.MeshBasicMaterial({ color: 0x000000 }); 
 
    material.side = THREE.DoubleSide; 
 
    geometry.applyMatrix(new THREE.Matrix4().makeTranslation(-7, 0, 0)); 
 

 
    var circle = new THREE.Mesh(geometry, material); 
 
    circle.rotation.y += p * 0.05 
 

 
    scene.add(circle); 
 
}

所以,也許下一步就是這些圈的幾何形狀,結合一個對象?

回答

2

如果我找到你的話,那麼你可以彎曲一個錐體。

創建一個圓柱幾何。它有radiusTop(r1),radiusBottom(r2)。其高度等於彎曲角度(theta)。我們還需要彎曲半徑(rMain)。創建幾何圖形後,將其轉換爲點號(rMain, theta/2, 0)。最後,對幾何體中的每個頂點應用這種變換,以使其新位置位於極座標中,其中半徑是x值,角度是y值。

function bendTheCone(r1, r2, rMain, theta, segments){ 
    var geom = new THREE.CylinderGeometry(r1, r2, theta, 16, segments); 
    geom.translate(rMain, theta/2 ,0); 

    geom.vertices.forEach(function(vertex){ 
    var localTheta = vertex.y; 
    var localRadius = vertex.x; 
    vertex.x = Math.cos(localTheta) * localRadius; 
    vertex.y = Math.sin(localTheta) * localRadius; 
    }); 

    geom.computeFaceNormals(); 
    geom.computeVertexNormals(); 

    return geom; 
} 

那麼你可以使用它像這樣:

var geometry = bendTheCone(0.1, 0.5, 10, THREE.Math.degToRad(320), 60); 
var mesh = new THREE.Mesh(geometry, new THREE.MeshNormalMaterial()); 
scene.add(mesh); 

jsfiddle例如

+0

這是輝煌的。謝謝! – Chris