使用three.js创建一个凹半球

时间:2014-01-06 09:28:14

标签: javascript 3d three.js

我正在尝试使用three.js创建一个凹半球(即半球的内部是描述的表面而不是外部)。我不仅希望背面可见,我想要构建具有凹面的3D对象(例如用于打印)。我试图通过使用SphereGeometry创建半球,然后反转每个面的向外方向(正常)来实现此目的。

据我了解,面部的向外方向(正常)由“右手规则”决定(如STL上下文中所述:http://en.wikipedia.org/wiki/STL_(file_format))。简单地说,如果一个面部由顶点(a,b,c)按顺序描述 - 那么如果你按照顶点的顺序(从a,b到c)弯曲右手的手指你的拇指点向外的方向。

这已经成功了 - 如果我导出一个STL文件并在STL查看器中查看结果(并探索横截面等),很明显表面是凹的(根据需要)。然而,关于结果的某些内容使得它在渲染时看起来像凸球,因为这个jsfiddle显示:http://jsfiddle.net/vvUn3/8/,其相关部分是:

var geom = new THREE.SphereGeometry(aRadius, cSegments, cSegments, 0, Math.PI);

for(var i = 0; i < geom.faces.length; i++) {
    var f = geom.faces[i];
    var tmp = f.a;
    f.a = f.c;
    f.c = tmp;
}

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

mesh = new THREE.Mesh(geom, new THREE.MeshNormalMaterial());
scene.add(mesh);

显然我错过了一些东西。有什么想法吗?

编辑:这篇文章:Create a concave half sphere with three.js问了一个类似的问题,但是他们只是希望使用threejs渲染内侧,我希望描述的3d模型(并导出到例如STL文件)是内心。

0 个答案:

没有答案