修复纹理参数无法序列化到服务端的问题

This commit is contained in:
2026-04-28 14:30:23 +08:00
parent 7e4b09133d
commit ae9d88c6d7
3 changed files with 22 additions and 10 deletions

View File

@@ -1,7 +1,7 @@
{ {
"name": "material-editor", "name": "material-editor",
"private": true, "private": true,
"version": "1.0.35", "version": "1.0.36",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@@ -55,10 +55,12 @@ async function HandleUpdateConfig() {
await scene.ImportMaterialAsync(json); await scene.ImportMaterialAsync(json);
editMode.value = true; editMode.value = true;
} }
else { editMode.value = false; } else {
editMode.value = false;
if (config.textures && config.textures.length > 0) { if (config.textures && config.textures.length > 0) {
textures.value = Array.from(config.textures); textures.value = Array.from(config.textures);
await scene.ChangeTextureFromUrlAsync(textures.value[0].src); // 这一行是保证首次Mount组件时纹理能够立刻刷新 await scene.ChangeTextureFromUrlAsync(textures.value[0].src);
}
} }
} }

View File

@@ -87,13 +87,23 @@ const sceneSetup = () => {
/** 这是自定义材质更新方法WebCAD库中的TextureTableRecord.TextureUpdate方法在导出的时候被删除了所以需要自己实现 */ /** 这是自定义材质更新方法WebCAD库中的TextureTableRecord.TextureUpdate方法在导出的时候被删除了所以需要自己实现 */
function UpdateTexture(adjustment?: Partial<TextureAdjustment>) { function UpdateTexture(adjustment?: Partial<TextureAdjustment>) {
const record = _currTexture.value; const record = _currTexture.value;
if (adjustment) {
// 将用户修改的纹理配置项同步写回 TextureTableRecord确保序列化时数据不丢失
if (adjustment.wrapS !== undefined) record.WrapS = adjustment.wrapS;
if (adjustment.wrapT !== undefined) record.WrapT = adjustment.wrapT;
if (adjustment.rotation !== undefined) record.rotation = adjustment.rotation;
if (adjustment.repeatX !== undefined) record.repeatX = adjustment.repeatX;
if (adjustment.repeatY !== undefined) record.repeatY = adjustment.repeatY;
if (adjustment.moveX !== undefined) record.moveX = adjustment.moveX;
if (adjustment.moveY !== undefined) record.moveY = adjustment.moveY;
}
const texture = record['texture'] as Texture; const texture = record['texture'] as Texture;
texture.wrapS = adjustment?.wrapS ?? record.WrapS; texture.wrapS = record.WrapS;
texture.wrapT = adjustment?.wrapT ?? record.WrapT; texture.wrapT = record.WrapT;
texture.anisotropy = 16; texture.anisotropy = 16;
texture.rotation = adjustment?.rotation ?? record.rotation; texture.rotation = record.rotation;
texture.repeat.set(adjustment?.repeatX ?? record.repeatX, adjustment?.repeatY ?? record.repeatY); texture.repeat.set(record.repeatX, record.repeatY);
texture.offset.set(adjustment?.moveX ?? record.moveX, adjustment?.moveY ?? record.moveY); texture.offset.set(record.moveX, record.moveY);
texture.needsUpdate = true; texture.needsUpdate = true;
Update(); Update();
} }