我有一个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;
任何人都知道如何实现这一目标?
答案 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 );
}