将 BoxGeometry 转换为球体

Transform a BoxGeometry into a Sphere

我有一个盒子,每个面都有不同的纹理,我正在尝试基于它创建一个四边形球体,在球体中使用相同的盒子纹理。目前我正在尝试将立方体转换成一个球体 post: 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;

有人知道我是怎么做到的吗?

这个例子可以满足您的需求: 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 );

}