将BoxGeometry转换为球体

时间:2015-10-18 19:16:45

标签: javascript 3d three.js

我有一个Box在每个面上都有不同的纹理,我正在尝试创建一个基于它的四边形球体,在球体中使用相同的框架纹理。目前我正试图在这篇文章之后将立方体转换为球体: http://mathproofs.blogspot.com.br/2005/07/mapping-cube-to-sphere.html

我对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;

任何人都知道如何实现这一目标?

1 个答案:

答案 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 );

}