Browse Source

model texture

zhouenguang 3 năm trước cách đây
mục cha
commit
4f151ae2f7

BIN
dist/assets/avatar/YXTN/body0.glb


BIN
dist/assets/avatar/YXTN/body.glb


+ 7 - 7
dist/assets/config.json

@@ -7,17 +7,17 @@
                 {
                     "id": "KGe_Boy",
                     "name": "KGe_Boy",
-                    "url": "./assets/avatar/man_YXL.zip",
+                    "url": "./assets/avatar/YXTN.zip",
                     "gender": "man",
                     "components": [],
                     "animations": [
                         {
                             "name": "Walking",
-                            "url": "./assets/avatar/man_YXL/animations/Walking.glb"
+                            "url": "./assets/avatar/YXTN/animations/Walking.glb"
                         },
                         {
                             "name": "Idle",
-                            "url": "./assets/avatar/man_YXL/animations/Idle.glb"
+                            "url": "./assets/avatar/YXTN/animations/Idle.glb"
                         }
                     ]
                 }
@@ -115,7 +115,7 @@
             "assetTotalSize": 24248947,
             "assetUrls": [
                 {
-                    "url": "./assets/avatar/man_YXL/component_list.json",
+                    "url": "./assets/avatar/YXTN/component_list.json",
                     "packName": "",
                     "typeName": "avatar",
                     "className": "",
@@ -123,7 +123,7 @@
                     "size": 14294
                 },
                 {
-                    "url": "./assets/avatar/man_YXL/man_YXL.glb",
+                    "url": "./assets/avatar/YXTN/body.glb",
                     "packName": "",
                     "typeName": "avatar",
                     "className": "",
@@ -131,7 +131,7 @@
                     "size": 137548
                 },
                 {
-                    "url": "./assets/avatar/man_YXL/animations/Walking.glb",
+                    "url": "./assets/avatar/YXTN/animations/Walking.glb",
                     "packName": "",
                     "typeName": "avatar",
                     "className": "",
@@ -139,7 +139,7 @@
                     "size": 99844
                 },
                 {
-                    "url": "./assets/avatar/man_YXL/animations/Idle.glb",
+                    "url": "./assets/avatar/YXTN/animations/Idle.glb",
                     "packName": "",
                     "typeName": "avatar",
                     "className": "",

dist/assets/config_YXTN - 副本.json → dist/assets/config_YXTN.json


+ 31 - 32
src/XAvatarLoader.js

@@ -249,45 +249,44 @@ export default class XAvatarLoader {
                 if (this.containers.get(aniModelPath))
                     return model.dispose(),
                     this.containers.get(aniModelPath);
-                if (model.addAllToScene(),
-                this.enableShareTexture && model.textures.length > 0) {
+                model.addAllToScene()
+                if (this.enableShareTexture && model.textures.length > 0) {
                     const d = [];
-                    let _ = !1;
-                    model.meshes.forEach(b=>{
-                        if (b.material) {
-                            const k = b.material._albedoTexture;
-                            if (k) {
-                                let j = k.name;
-                                j = j.replace(" (Base Color)", "").split(".")[0];
-                                const $ = this._sharedTex.get(j);
-                                $ ? (
-                                    _ = !0,
-                                    b.material._albedoTexture = $,
-                                    d.push($),
-                                    $._parentContainer = model,
-                                    $.xReferenceCount++
+                    let hasSameTex = false;
+                    model.meshes.forEach(mesh=>{
+                        if (mesh.material) {
+                            const albedoTexture = mesh.material._albedoTexture;
+                            if (albedoTexture) {
+                                let albedoTexName = albedoTexture.name;
+                                albedoTexName = albedoTexName.replace(" (Base Color)", "").split(".")[0];
+                                const oldTex = this._sharedTex.get(albedoTexName);
+                                oldTex ? (
+                                    hasSameTex = true,
+                                    mesh.material._albedoTexture = oldTex,
+                                    d.push(oldTex),
+                                    oldTex._parentContainer = model,
+                                    oldTex.xReferenceCount++
                                 ) : (
-                                    this._sharedTex.set(j, k),
+                                    this._sharedTex.set(albedoTexName, albedoTexture),
                                     model.textures[0].xReferenceCount = 1
                                 )
                             }
                         }
-                    }
-                    ),
-                    _ && (model.textures.forEach(b=>{
-                        sceneManager.Scene.removeTexture(b),
-                        b.dispose()
-                    }
-                    ),
-                    model.textures = d)
-                }
-                return model.xReferenceCount = 0,
-                model.meshes.forEach(d=>{
-                    d.setEnabled(!1)
+                    })
+                    hasSameTex && (
+                        model.textures.forEach(tex=>{
+                            sceneManager.Scene.removeTexture(tex)
+                            // tex.dispose()      // zeg 这个加上会导致贴图丢失
+                        }),
+                        model.textures = d
+                    )
                 }
-                ),
-                this.containers.set(aniModelPath, model),
-                Promise.resolve(model)
+                model.xReferenceCount = 0
+                model.meshes.forEach(mesh=>{
+                    mesh.setEnabled(false)
+                })
+                this.containers.set(aniModelPath, model)
+                return Promise.resolve(model)
             } else
                 return Promise.reject("glb file load failed")
         }

+ 2 - 3
src/Xverse_Room.js

@@ -98,10 +98,9 @@ export default class Xverse_Room extends EventEmitter {
       const workers = this.networkController.rtcp.workers;
 
       workers.registerFunction("signal", data => {
-        // data.signal.newUserStates && data.signal.newUserStates[0].playerState.camera 
-        // && console.error(data.signal.actionResponses, data.signal.newUserStates[0].playerState.camera.position)
+        // data && data.signal &&
+        // console.error(data.signal.code, data.signal.actionResponses, data.signal.newUserStates)
         // 更新坐标数据
-        // data.signal.newUserStates && data.signal.newUserStates[0] && (data.signal.newUserStates[0].userId = this.userId)  // todo 写死数据纠正
         this.signal.handleSignal(data, reject)
         
         // data.signal.newUserStates