2015-10-18 55 views
0

我在每個人臉上都有一個帶有不同紋理的框,我試圖在球體上使用相同的框紋理創建一個基於它的四個球體。目前我試圖將立方體轉換爲一個球體,下面這個帖子: http://mathproofs.blogspot.com.br/2005/07/mapping-cube-to-sphere.html將BoxGeometry轉換爲球體

我不是很熟悉threejs(或一般的3D編程)幾何頂點,改變其x,y和z,但它只是減小框的大小

var geometry = new THREE.BoxGeometry(2, 2, 2); 
// I'm omitting material/textures etc 
var vertices = cube.geometry.vertices; 
var sqrt = Math.sqrt; 
cube.geometry.dynamic = true;  

for (var i = 0; i < vertices.length; i++) { 
    var v = vertices[i]; 
    var dx = v.x * sqrt(1.0 - ((v.y * v.y)/2.0) - ((v.z * v.z)/2.0) + ((v.y * v.y * v.z * v.z)/3.0)); 
    var dy = v.y * sqrt(1.0 - ((v.z * v.z)/2.0) - ((v.x * v.x)/2.0) + ((v.z * v.z * v.x * v.x)/3.0)); 
    var dz = v.z * sqrt(1.0 - ((v.x * v.x)/2.0) - ((v.y * v.y)/2.0) + ((v.x * v.x * v.y * v.y)/3.0)); 
    vertices[i].set(dx, dy, dz); 
} 
cube.geometry.verticesNeedUpdate = true; 

任何人都知道我該如何做到這一點?

+0

我不知道three.js所,但是這顯示瞭如何用普通的OpenGL做到這一點: http://stackoverflow.com/questions/28831424/transform-cube-to-sphere-in-opengl。 –

+0

你顯示你的代碼? –

+0

我將用代碼 –

回答

3

這個例子做你以後: http://threejs.org/examples/#canvas_geometry_panorama_fisheye

下面是相關代碼:

var geometry = new THREE.BoxGeometry(300, 300, 300, 7, 7, 7) 

for (var i = 0, l = geometry.vertices.length; i < l; i ++) { 

    var vertex = geometry.vertices[ i ]; 
    vertex.normalize().multiplyScalar(550); 

} 
+0

更新該問題順便說一下,代碼中的主要問題是您沒有將細分添加到您的框中。 – mrdoob