From 59703decc4dfce64daad534c03dca15dd9e08a47 Mon Sep 17 00:00:00 2001
From: "2817212736@qq.com" <2817212736@qq.com>
Date: Fri, 30 May 2025 16:16:40 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9D=90=E8=B4=A8=E7=BC=96?=
=?UTF-8?q?=E8=BE=91=E6=A8=A1=E5=BC=8F=E6=97=A0=E8=BE=93=E5=87=BA=E5=86=85?=
=?UTF-8?q?=E5=AE=B9=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package.json | 2 +-
src/components/MaterialAdjuster.vue | 37 ++++++++++++++++++++---------
src/components/MaterialView.vue | 25 +++++++++++--------
3 files changed, 42 insertions(+), 22 deletions(-)
diff --git a/package.json b/package.json
index 50e8be3..97b245b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "material-editor",
"private": true,
- "version": "1.0.14",
+ "version": "1.0.15",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/src/components/MaterialAdjuster.vue b/src/components/MaterialAdjuster.vue
index 12f02ce..651ac21 100644
--- a/src/components/MaterialAdjuster.vue
+++ b/src/components/MaterialAdjuster.vue
@@ -7,7 +7,7 @@
-
+
@@ -130,10 +130,12 @@ const scene = useScene();
const props = defineProps<{
name?: string;
textureSrcList?: string[];
+ /** 忽略纹理参数,提交时直接输出场景内的材质,用于某些在组件外对场景进行编辑的特殊情况(例如材质编辑模式) */
+ ignoreTexture?: boolean;
}>();
const emits = defineEmits<{
(e: 'cancel'): void;
- (e: 'submit', data: MaterialRequest[]): void;
+ (e: 'submit', data: MaterialRequest[]): void;
}>();
const Material = computed(() => scene.Material);
@@ -161,8 +163,8 @@ const uploading = ref(false);
// });
const materialInfo = reactive({
dirId: DirectoryId.MaterialDir, // 正常来说是2
- materialName: props.name || '材质',
- inputText:'',
+ materialName: props.name || '材质',
+ inputText: '',
});
watch(() => props.textureSrcList, async (val) => {
@@ -182,7 +184,7 @@ watch(() => scene.CurrTexture, (val) => {
rotation: val.rotation,
repeatX: val.repeat.x,
repeatY: val.repeat.y,
- moveX: val.offset.x,
+ moveX: val.offset.x,
moveY: val.offset.y
}
})
@@ -218,7 +220,7 @@ function UpdateTexture() {
}
async function loadData() {
- if(!materialInfo.inputText) return;
+ if (!materialInfo.inputText) return;
const json = JSON.parse(materialInfo.inputText);
const cadFile = FromDeflateBase64(json.file);
scene.ImportMaterialAsync(cadFile)
@@ -233,18 +235,31 @@ async function HandleUpload() {
uploading.value = true;
const result = [];
- // 遍历纹理链接列表,更改纹理后将材质序列化,然后还原场景
- let idx = 0;
- for (const src of props.textureSrcList) {
- await scene.ChangeTextureFromUrlAsync(src);
+ if (props.ignoreTexture) {
+ // 直接将材质序列化
const mat = {
- name: materialInfo.materialName + ++idx,
+ name: materialInfo.materialName,
logo: await scene.GenerateMaterialLogoAsync(),
// jsonString -> Deflate -> BinaryString -> Base64
file: ToDeflatedBase64(await scene.SerializeMaterialAsync())
};
result.push(mat);
+ }
+ else {
+ // 遍历纹理链接列表,更改纹理后将材质序列化,然后还原场景
+ let idx = 0;
+ for (const src of _textureSrc.value) {
+ await scene.ChangeTextureFromUrlAsync(src);
+ const mat = {
+ name: materialInfo.materialName + ++idx,
+ logo: await scene.GenerateMaterialLogoAsync(),
+ // jsonString -> Deflate -> BinaryString -> Base64
+ file: ToDeflatedBase64(await scene.SerializeMaterialAsync())
+ };
+ result.push(mat);
+ }
}
+
await scene.ChangeTextureFromUrlAsync(_textureSrc.value[0]);
emits('submit', result);
return result;
diff --git a/src/components/MaterialView.vue b/src/components/MaterialView.vue
index 813cd86..7cee791 100644
--- a/src/components/MaterialView.vue
+++ b/src/components/MaterialView.vue
@@ -1,7 +1,8 @@
-
+