点击空白隐藏放置区域
This commit is contained in:
@ -152,8 +152,31 @@ export class AppModel extends Monobehiver {
|
||||
/**
|
||||
* 克隆模型材质,避免多个模型共享同名材质
|
||||
* @param meshes 网格数组
|
||||
* @param modelName 模型名称
|
||||
* @param modelId 模型ID
|
||||
*/
|
||||
private cloneMaterials(meshes: AbstractMesh[], modelId: string): void {
|
||||
const scene = this.mainApp.appScene.object;
|
||||
const clonedMaterials = new Map<string, any>();
|
||||
|
||||
meshes.forEach(mesh => {
|
||||
if (mesh.material) {
|
||||
const originalMaterial = mesh.material;
|
||||
const originalName = originalMaterial.name;
|
||||
|
||||
// 如果该材质还没有被克隆过,则克隆它
|
||||
if (!clonedMaterials.has(originalName)) {
|
||||
const clonedMaterial = originalMaterial.clone(`${originalName}_${modelId}`);
|
||||
clonedMaterials.set(originalName, clonedMaterial);
|
||||
}
|
||||
|
||||
// 应用克隆的材质
|
||||
mesh.material = clonedMaterials.get(originalName);
|
||||
}
|
||||
});
|
||||
|
||||
console.log(`已为模型 ${modelId} 克隆 ${clonedMaterials.size} 个材质`);
|
||||
}
|
||||
|
||||
/** 为网格设置阴影(投射和接收) */
|
||||
private createModelRoot(modelId: string, meshes: AbstractMesh[]): AbstractMesh[] {
|
||||
const scene = this.mainApp.appScene.object;
|
||||
@ -254,6 +277,9 @@ export class AppModel extends Monobehiver {
|
||||
});
|
||||
|
||||
if (result.success && result.meshes) {
|
||||
// 克隆材质,确保每个模型有独立的材质
|
||||
this.cloneMaterials(result.meshes, modelName);
|
||||
|
||||
result.meshes = this.createModelRoot(modelName, result.meshes);
|
||||
this.modelDic.Set(modelName, result.meshes);
|
||||
|
||||
@ -304,6 +330,9 @@ export class AppModel extends Monobehiver {
|
||||
});
|
||||
|
||||
if (result.success && result.meshes) {
|
||||
// 克隆材质,确保每个模型有独立的材质
|
||||
this.cloneMaterials(result.meshes, modelId);
|
||||
|
||||
result.meshes = this.createModelRoot(modelId, result.meshes);
|
||||
this.modelDic.Set(modelId, result.meshes);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user