0
THREE.JSのメッシュジオメトリを所定のステップ/厚さでオフセットする方法はありますか?THREE.jsのオフセットメッシュ
これは単純なスケーリングではありません。私の提案では、スケーリングのエッジの方向を与える法線に基づいてアルゴリズムを実行する必要があります。
THREE.JSのメッシュジオメトリを所定のステップ/厚さでオフセットする方法はありますか?THREE.jsのオフセットメッシュ
これは単純なスケーリングではありません。私の提案では、スケーリングのエッジの方向を与える法線に基づいてアルゴリズムを実行する必要があります。
これは私がちょうど書き留めたものであり、テストセットではないコードです。しかし、これは私のやり方です。たぶんそれは何かから始まるものです。
var geo = mesh.geometry; // assuming this Geometry and not BufferGeometry
var verts = geo.vertices;
var faces = geo.faces;
// vertices are used in multiple faces with different normals
// we want to translate the vertex along the average normal
// first, I collect all normals for each vertex
// (it's a bit quick and dirty as I add a normals property to the Vector3 object)
for(var i=0; i<faces.length; i++) {
// vertex a
var va = verts[faces[i].a];
if(va.normals) va.normals.push(faces[i].vertexNormals[0]); // add normal to collection
else va.normals = [ faces[i].vertexNormals[0] ]; // otherwise create array with first element
// vertex b
var vb = verts[faces[i].b];
if(vb.normals) vb.normals.push(faces[i].vertexNormals[1]);
else vb.normals = [ faces[i].vertexNormals[1] ];
// vertex c
var vc = verts[faces[i].c];
if(vc.normals) vc.normals.push(faces[i].vertexNormals[2]);
else vc.normals = [ faces[i].vertexNormals[2] ];
}
// then iterate over vertices, compute average normal, and translate vertex
for(i=0; i<verts.length; i++) {
var v = verts[i];
var normal = computeAverageNormal(v.normals);
normal.multiplyScalar(offsetAmount);
v.add(normal);
}
geo.verticesNeedUpdate = true;
function computeAverageNormal(normals) {
var n = new THREE.Vector3();
for(var i=0; i<normals.length; i++) {
n.add(normals[i]);
}
n.normalize();
return n;
}
擬似的に、THREE.FaceNormalsHelperまたはTHREE.VertexNormalsHelper。 – VVK