|
|
|
@ -109,12 +109,7 @@ export class EntityFbx extends Entity
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
const curMtl = this._OverWriteMaterial.get(slotIndex);
|
|
|
|
|
if (curMtl)
|
|
|
|
|
{
|
|
|
|
|
if (curMtl?.Object?.IsMaterialLock)
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (this.Material?.Object?.IsMaterialLock)
|
|
|
|
|
if (curMtl?.Object?.IsMaterialLock)
|
|
|
|
|
return true;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
@ -136,18 +131,33 @@ export class EntityFbx extends Entity
|
|
|
|
|
{
|
|
|
|
|
if (this.LockMaterial)
|
|
|
|
|
return;
|
|
|
|
|
this.WriteAllObjectRecord();
|
|
|
|
|
for (const [k, v] of this._OverWriteMaterial)
|
|
|
|
|
this.DrawObject.traverse(o =>
|
|
|
|
|
{
|
|
|
|
|
if (v?.Object?.IsMaterialLock)
|
|
|
|
|
continue;
|
|
|
|
|
this._OverWriteMaterial.set(k, mtl);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (this.Material?.Object?.IsMaterialLock)
|
|
|
|
|
return;
|
|
|
|
|
if (o instanceof Mesh)
|
|
|
|
|
{
|
|
|
|
|
if (Array.isArray(o.material))
|
|
|
|
|
{
|
|
|
|
|
for (let i = 0; i < o.material.length; i++)
|
|
|
|
|
{
|
|
|
|
|
const curMtl = this._OverWriteMaterial.get(i);
|
|
|
|
|
if (curMtl?.Object?.IsMaterialLock)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
this.Material = mtl;
|
|
|
|
|
this.WriteAllObjectRecord();
|
|
|
|
|
this._OverWriteMaterial.set(i, mtl);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
const curMtl = this._OverWriteMaterial.get(0);
|
|
|
|
|
if (!curMtl?.Object?.IsMaterialLock)
|
|
|
|
|
{
|
|
|
|
|
this.WriteAllObjectRecord();
|
|
|
|
|
this._OverWriteMaterial.set(0, mtl);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
this.Update(UpdateDraw.Material);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -187,6 +197,46 @@ export class EntityFbx extends Entity
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private _GetValidOWMtlRecord(index: number): PhysicalMaterialRecord | undefined
|
|
|
|
|
{
|
|
|
|
|
const obj = this._OverWriteMaterial.get(index)?.Object;
|
|
|
|
|
if (obj && !obj.IsErase)
|
|
|
|
|
return obj;
|
|
|
|
|
return undefined;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 注意:不含默认的fbx材质record
|
|
|
|
|
GetPhyMtlRecords()
|
|
|
|
|
{
|
|
|
|
|
const materials: PhysicalMaterialRecord[] = [];
|
|
|
|
|
this.DrawObject.traverse(o =>
|
|
|
|
|
{
|
|
|
|
|
if (o instanceof Mesh)
|
|
|
|
|
{
|
|
|
|
|
if (Array.isArray(o.material))
|
|
|
|
|
{
|
|
|
|
|
let allUseOW = true;
|
|
|
|
|
for (let i = 0; i < o.material.length; i++)
|
|
|
|
|
{
|
|
|
|
|
const curMtl = this._GetValidOWMtlRecord(i);
|
|
|
|
|
if (curMtl)
|
|
|
|
|
materials.push(curMtl);
|
|
|
|
|
else
|
|
|
|
|
allUseOW = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
const curMtl = this._GetValidOWMtlRecord(0);
|
|
|
|
|
if (curMtl)
|
|
|
|
|
materials.push(curMtl);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return materials;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newObject: Group;
|
|
|
|
|
|
|
|
|
|
//通过二进制数组生成fbx模型
|
|
|
|
@ -267,6 +317,14 @@ export class EntityFbx extends Entity
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private _GetValidOWMtl(index: number): MeshPhysicalMaterial | undefined
|
|
|
|
|
{
|
|
|
|
|
const obj = this._OverWriteMaterial.get(index)?.Object;
|
|
|
|
|
const owMtl = !obj?.IsErase && obj?.Material;
|
|
|
|
|
if (!owMtl) return;
|
|
|
|
|
return owMtl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//del_exp_start
|
|
|
|
|
InitDrawObject(renderType: RenderType = RenderType.Wireframe)
|
|
|
|
|
{
|
|
|
|
@ -277,11 +335,11 @@ export class EntityFbx extends Entity
|
|
|
|
|
|
|
|
|
|
const GetMaterial = (m: MeshPhongMaterial, index?: number) =>
|
|
|
|
|
{
|
|
|
|
|
let overMtl = this._OverWriteMaterial.get(index);
|
|
|
|
|
if (overMtl?.Object?.Material)
|
|
|
|
|
return overMtl.Object.Material;
|
|
|
|
|
const owMtl = this._GetValidOWMtl(index);
|
|
|
|
|
if (owMtl)
|
|
|
|
|
return owMtl;
|
|
|
|
|
else
|
|
|
|
|
return this.MeshMaterial ?? GetDefultFBXMaterial();
|
|
|
|
|
return GetDefultFBXMaterial();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (this.newObject)
|
|
|
|
@ -442,7 +500,7 @@ export class EntityFbx extends Entity
|
|
|
|
|
{
|
|
|
|
|
for (let i = 0; i < o.material.length; i++)
|
|
|
|
|
{
|
|
|
|
|
const mtl = this._OverWriteMaterial.get(i)?.Object?.Material ?? this.MeshMaterial as MeshPhysicalMaterial;
|
|
|
|
|
const mtl = this._GetValidOWMtl(i);
|
|
|
|
|
if (mtl)
|
|
|
|
|
{
|
|
|
|
|
o.material[i] = mtl;
|
|
|
|
@ -461,7 +519,7 @@ export class EntityFbx extends Entity
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
const mtl = this._OverWriteMaterial.get(0)?.Object?.Material ?? this.MeshMaterial as MeshPhysicalMaterial;
|
|
|
|
|
const mtl = this._GetValidOWMtl(0);
|
|
|
|
|
if (mtl)
|
|
|
|
|
o.material = mtl;
|
|
|
|
|
else
|
|
|
|
|