0

我有一个.txt。从 3ds Max 导出的文件,包含对象名称、位置、旋转和比例。其次,我有一个带有外部 obj 路径的对象的 javascript 初始列表。和mtl。文件。从初始列表中,我创建了一个根据 txt 文件在我的场景中克隆的 LOD 对象。但是我对在场景中旋转的这些克隆对象的着色/照明有问题。

请问您知道我将对象放入场景后需要更新什么吗?

具有不同着色的相同 LOD 对象的两个克隆

这是我的项目的链接

带有对象定位的 txt 文件片段(LOD 名称+编号;位置XYZ;旋转;比例):

tree_small013;17.5686;0.15;34.1358;-0.0001;180.0;0.0;1.0;1.0;1.0
tree_small014;17.5686;0.15;44.5792;-0.0001;180.0;0.0;1.0;1.0;1.0
tree_small015;17.5686;0.15;13.1515;-0.0001;180.0;0.0;1.0;1.0;1.0
tree_small016;17.5686;0.15;65.6183;-0.0001;180.0;0.0;1.0;1.0;1.0
tree_small017;17.5686;0.15;55.1539;-0.0001;180.0;0.0;1.0;1.0;1.0
pavement_corner;20.0;0.0;73.5;0.0;0.0;0.0;1.0;1.0;1.0
pavement;20.0;0.0;70.0;0.0;0.0;0.0;1.0;1.0;1.0
pavement_tree;20.0;0.0;63.0;0.0;0.0;0.0;1.0;1.0;1.0
pavement001;20.0;0.0;66.5;0.0;0.0;0.0;1.0;1.0;1.0
pavement_tree001;20.0;0.0;52.5;0.0;0.0;0.0;1.0;1.0;1.0
pavement002;20.0;0.0;56.0;0.0;0.0;0.0;1.0;1.0;1.0
pavement003;20.0;0.0;59.5;0.0;0.0;0.0;1.0;1.0;1.0
pavement004;20.0;0.0;34.9999;0.0;0.0;0.0;1.0;1.0;1.0

初始化 LOD 对象的 importList.js 示例:

// STATIC MODELS IMPORT LIST
var models = {
    tree_small: {
    levels: {
            0: {
                name:"high",
                obj:"models/tree_small_high.obj",
                mtl:"maps/mtl/tree_small_high.mtl",
                mesh:null,
                dist:10
            },
            1: {
                name:"mid",
                obj:"models/tree_small_mid.obj",
                mtl:"maps/mtl/tree_small_mid.mtl",
                mesh:null,
                dist:15
            },
            2: {
                name:"low",
                obj:"models/tree_small_low.obj",
                mtl:"maps/mtl/tree_small_low.mtl",
                mesh:null,
                dist:20
            }               
        },  
        lod: null,
        shadows: true
    },
    pavement_corner: {
    levels: {
            0: {
                name:"high",
                obj:"models/pavement_corner_high.obj",
                mtl:"maps/mtl/pavement_corner_high.mtl",
                mesh:null,
                dist:10
            }                   
        },  
        lod: null,
        shadows: true
    },
    pavement: {
    levels: {
            0: {
                name:"high",
                obj:"models/pavement_high.obj",
                mtl:"maps/mtl/pavement_high.mtl",
                mesh:null,
                dist:10
            }                   
        },  
        lod: null,
        shadows: false
    },

models.js 中的函数 Obj() 获取 LOD 对象的克隆并通过 txt 将其设置在场景中。文件:

function Obj(objName, x,y,z, rx,ry,rz, sx,sy,sz, mass, friction, flag){

    var offset = 0;
    var pos = new THREE.Vector3();
    var quat = new THREE.Quaternion();

    this.obj = models[objName].lod.clone(false);
    this.obj.layers.set(objName);
    this.obj.name = objName;
    this.obj.position.set(x,y,z);
    this.obj.rotation.set(rx,ry,rz);
    this.obj.scale.set(sx,sy,sz);

    this.obj.matrixWorldNeedsUpdate = true;
    this.obj.matrixAutoUpdate = true;
    this.obj.updateMatrixWorld();
    this.obj.children[0].geometry.tangentsNeedUpdate = true;

    makeObj(this.obj, 0); // add to collision system 

    this.obj.levels[0].object.updateMatrix();
    this.obj.children[0].updateMatrix();

    this.obj.levels[0].object.updateMatrixWorld();
    this.obj.children[0].updateMatrixWorld();

    this.obj.levels[0].object.geometry.computeFaceNormals();
    this.obj.levels[0].object.geometry.computeVertexNormals();

    this.obj.children[0].geometry.computeFaceNormals();
    this.obj.children[0].geometry.computeVertexNormals();

    this.obj.updateMatrix();
    this.obj.updateMatrixWorld();

    scene.add(this.obj);

    return this.obj;        
}
4

0 回答 0