我有一个立方体,我试图转换立方体一面上所有坐标的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 ];
}
}
当我查看我的模型时,看起来我错过了面部的整行(只有最后一行的第一个点被转换)。如何迭代这个多维数据集的整个面,以便我可以访问所有点?
答案 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。 我觉得这样的事情应该有效。