在three.js中删除相邻面

4
我正在尝试优化场景,基于图像像素数据呈现立方体:

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

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

但是,如果您切换线框,就会发现有大量不必要的内部面。

我正在使用mergeVertices 以及 THREE.GeometryUtils.merge 进行部分优化。

我遇到了比较合并几何体的所有面的此方法,但由于每个立方体面现在是一对三角形,因此很难比较相邻面的两个三角形将被翻转。

我还看过 麦块示例,但我无法理解那种方法。


1
修改 BoxGeometry 构造函数,使相邻立方体的对角线始终保持对齐,而不是交叉。然后,具有相同重心的面必须背靠背。 - WestLangley
谢谢West!我曾尝试在几何图形创建后调整面的a、b、c属性,但没有成功。 - majman
似乎在r67中删除了centroid/computeCentroid。我真的不知道为什么,但现在事情又出问题了。@WestLangley除了修改更多原始src之外,有没有想到其他解决方法? - majman
1
自己计算。centroid.addVectors( va, vb ).add( vc ).divideScalar( 3 ); - WestLangley
1个回答

3

好的,有了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;
        }

谢谢你!你的代码片段帮了我很多忙。 - Bitwise Creative

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接