删除three.js中的相邻面

时间:2014-04-29 19:40:57

标签: javascript three.js

我试图优化一个场景,我根据图像的像素数据渲染立方体:

http://jsfiddle.net/majman/4sukB/

代码只是检查图像中的每个像素并创建&相应地定位立方体网格。

但是,正如您可以看到的那样,如果您打开线框,则会有大量不必要的内部面。

我正在使用mergeVertices以及THREE.GeometryUtils.merge - 所以事情已部分优化。

我跑过this approach比较合并几何体的所有面,但由于每个立方体面现在都是一对三面体 - 它们很难比较,因为相邻面的两个三角形将是翻转。

我也看过了我的世界的例子,但是我已经能够绕过那个方法。

1 个答案:

答案 0 :(得分:2)

好的,在WestLangley的帮助下 - 我能够到达那里。

http://jsfiddle.net/majman/4sukB/2/

采取一些摆弄来弄清楚在buildPlane中调整哪些面。之后,比较质心相对简单:

        function removeDuplicateFaces(geometry){
            for(var i=0; i<geometry.faces.length; i++){
                var centroid = geometry.faces[i].centroid;
                for(var j=0; j < i; j++){
                    var f2 = geometry.faces[j];
                    if( f2 !== undefined ){
                        var centroid2 = f2.centroid;
                        if(centroid.equals(centroid2)){
                            delete geometry.faces[i];
                            delete geometry.faces[j];
                        }
                    }
                }
            }
            geometry.faces = geometry.faces.filter( function(a){ return a!== undefined });
            return geometry;
        }