在three.js中访问多维数据集一面上的所有顶点

时间:2013-09-11 18:40:09

标签: javascript opengl-es three.js webgl

我有一个立方体,我试图转换立方体一面上所有坐标的x位置。目前我的方法是:

var wDepth = 200;
var hDepth = 200;
var geo = new THREE.CubeGeometry( 20, 40, 40, 20, wDepth, hDepth);

        for ( var i = 0; i < wDepth; i++ ) {
            for ( var j = 0; j < hDepth; j++ ){
                var index = j * wDepth + i;
                geo.vertices[index].x += heightData[ index ];
            }
        }

当我查看我的模型时,看起来我错过了面部的整行(只有最后一行的第一个点被转换)。如何迭代这个多维数据集的整个面,以便我可以访问所有点?

1 个答案:

答案 0 :(得分:2)

嗯,我想首先,我认为你应该更正问题的标题,因为它不是一个面,它是立方体的一面。
无论如何,如果你试验了three.js生成立方体的结构,你就可以硬编码一些东西。就像面部数组中的前500个面是从一侧,或前几百个顶点属于一边。但我不确定这是否有效。 如果你想要一个很好的通用方法,你应该检查每个面的面法线,因为它们指向你想要的正确方向。 一些伪代码将类似于:(face index = face.a,face.b,face.c,并且是对特定三角形的顶点的引用)

for all geometry.faces 
if (geometry.face[i].normal.equals{Vec3(1,0,0}) then
       for each geometry.face[i].index 
       geometry.vertices[geometry.face[i].index].x = 4; 

这样,您将获得面向特定方向的所有面(在此示例中为positiv x),然后将这些面的顶点x坐标更改为硬编码值4。 我觉得这样的事情应该有效。