【问题标题】:How to access the vertices after loading object with ObjLoader in Three.js在 Three.js 中使用 ObjLoader 加载对象后如何访问顶点
【发布时间】:2015-10-15 15:28:47
【问题描述】:

我在 Three.js 中使用 ObjLoader 在我的场景中加载 *.obj 文件,通常代码可以正常工作,但是如果我想一点一点地操作对象顶点和索引,我应该怎么做,我不知道如何调用加载的 *.obj 模型中的顶点。

尝试运行var vertex_x = geometry.vertices[0].x 引发异常并抱怨未定义 0 属性。您的指导将不胜感激,

var obj_geo = new THREE.OBJLoader();
obj_geo.load('new_I_Profile.obj', function(geometry){
geometry.scale.x = 2;  geometry.scale.y = 2; geometry.scale.z = 20; 
geometry.rotation.x = -Math.PI/2;
geometry.color = 0xff;

var lines = new THREE.Geometry();
lines.vertices.push(new THREE.Vector3(0, 0, 0));
lines.vertices.push(new THREE.Vector3(0, 120, 0));
var material = new THREE.LineBasicMaterial({ opacity: 1.0,  linewidth: 1, vertexColors: THREE.VertexColors });
var main_line = new THREE.Line(lines, material);
main_line.name = 'main_line';
main_line.position.x = crs_line.position.x; main_line.position.z = crs_line.position.z; 
main_line.position.y = crs_line.position.y; 
main_line.add(geometry);
editor.addObject(main_line);
});

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    OBJLoader 返回 Object3D,因此在您的代码中,您可以将 geometry 替换为 mesh,并使用 mesh.geometry.vertices[i ]

    【讨论】:

    • 抱歉,现在更正了,是的,我正在尝试访问回调函数中的顶点,我希望这些顶点乘以比例矩阵,正如您可能敏锐地注意到的那样。
    • 它在现有 geometry 对象的 children 属性下,从那里 var pt = geometry.children[0].geometry.vertices[0]; 但是如何获取顶点的修改(变换)坐标,因为它返回唯一的普通本地未变换坐标?应该有像 ObjectMatrix 或 ModelMatrix 这样的方法,并且将顶点与它相乘会给我正确的解决方案吗?
    • 克隆你需要的顶点,然后在克隆上使用vertex.applyMatrix4(object.matrixWorld),它应该有世界坐标
    猜你喜欢
    • 2019-03-05
    • 2017-12-24
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2014-12-23
    相关资源
    最近更新 更多