我正在试图弄清楚如何挤出已经加载的.obj对象以使其“更厚”。我想我正在寻找一种方法来缩放我的对象,而不是从它的锚点开始,而是按每个多边形法线缩放它。
一个典型的例子是采用“环”对象。如果你只用正常的比例方法进行扩展,它只会从中心变大,但我希望环变得更厚/更薄。它在电影院4d被称为“正常规模”。
以下是我目前所拥有的一些示例代码,这些代码没有给我预期的结果。
var objLoader = new THREE.OBJLoader();
var material = new THREE.MeshLambertMaterial({color:'yellow', shading:THREE.FlatShading});
objLoader.load('objects/gun/M1911.obj', function (obj) {
obj.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.geometry.computeVertexNormals();
child.material = material;
}
});
obj.material = material;
obj.scale.set(7, 7, 7);
scene.add(obj);
});
答案 0 :(得分:0)
scaleGeo: function (geo, ratio) {
for (var i = 0; i < geo.faces.length; i++) {
var faceI = geo.faces[i];
var vertexArr = [faceI.a, faceI.b, faceI.c];
for (var j = 0; j < vertexArr.length; j++) {
var vertexJ = geo.vertices[vertexArr[j]];
var normalJ = faceI.vertexNormals[j];
if (vertexJ.hasScale) continue;
vertexJ.x += normalJ.x * ratio;
vertexJ.y += normalJ.y * ratio;
vertexJ.z += normalJ.z * ratio;
vertexJ.hasScale = true;
}
}
return geo;
},