Преглед изворни кода

chore(playground): add complex model and group event handling examples (#940)

* chore(playground): add complex model and group event handling examples

- Add new pages for complex model and group event interactions
- Implement event handlers for click, pointer-enter, and pointer-leave events
- Include Cyber Samurai and Artificer 3D models with event listeners
- Add new routes for complex model and groups event demonstrations

* chore: add eslint-disable for console logging in event handling examples

- Temporarily disable eslint no-console rule in complex model and groups event pages
- Maintain existing event handling logic for pointer interactions
- Improve code readability by explicitly scoping eslint rule disabling
Alvaro Saburido пре 2 месеци
родитељ
комит
ac28bac8b5
30 измењених фајлова са 2530 додато и 235 уклоњено
  1. 1 0
      playground/vue/components.d.ts
  2. BIN
      playground/vue/public/models/Artificer.glb
  3. 11 0
      playground/vue/public/models/cyber_samurai/license.txt
  4. BIN
      playground/vue/public/models/cyber_samurai/scene.bin
  5. 2121 0
      playground/vue/public/models/cyber_samurai/scene.gltf
  6. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet1_baseColor.png
  7. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet1_emissive.png
  8. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet1_metallicRoughness.png
  9. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet1_normal.png
  10. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet2_baseColor.png
  11. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet2_emissive.png
  12. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet2_metallicRoughness.png
  13. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet2_normal.png
  14. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet3_baseColor.png
  15. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet3_metallicRoughness.png
  16. BIN
      playground/vue/public/models/cyber_samurai/textures/LowSet3_normal.png
  17. BIN
      playground/vue/public/models/cyber_samurai/textures/Robe2_baseColor.jpeg
  18. BIN
      playground/vue/public/models/cyber_samurai/textures/Robe2_metallicRoughness.png
  19. BIN
      playground/vue/public/models/cyber_samurai/textures/Robe2_normal.jpeg
  20. BIN
      playground/vue/public/models/cyber_samurai/textures/Robe_baseColor.png
  21. BIN
      playground/vue/public/models/cyber_samurai/textures/Robe_metallicRoughness.png
  22. BIN
      playground/vue/public/models/cyber_samurai/textures/Robe_normal.png
  23. BIN
      playground/vue/public/models/cyber_samurai/textures/Robe_transmission.png
  24. 27 0
      playground/vue/src/pages/events/complex-model/Character.vue
  25. 25 0
      playground/vue/src/pages/events/complex-model/ComplexModel.vue
  26. 53 0
      playground/vue/src/pages/events/complex-model/index.vue
  27. 54 0
      playground/vue/src/pages/events/groups/index.vue
  28. 10 0
      playground/vue/src/router/routes/events.ts
  29. 220 227
      pnpm-lock.yaml
  30. 8 8
      src/utils/index.ts

+ 1 - 0
playground/vue/components.d.ts

@@ -2,6 +2,7 @@
 // @ts-nocheck
 // Generated by unplugin-vue-components
 // Read more: https://github.com/vuejs/core/pull/3399
+// biome-ignore lint: disable
 export {}
 
 /* prettier-ignore */

BIN
playground/vue/public/models/Artificer.glb


+ 11 - 0
playground/vue/public/models/cyber_samurai/license.txt

@@ -0,0 +1,11 @@
+Model Information:
+* title:	Cyber Samurai
+* source:	https://sketchfab.com/3d-models/cyber-samurai-26ccafaddb2745ceb56ae5cfc65bfed5
+* author:	KhoaMinh (https://sketchfab.com/duongminhkhoa231)
+
+Model License:
+* license type:	CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
+* requirements:	Author must be credited. Commercial use is allowed.
+
+If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
+This work is based on "Cyber Samurai" (https://sketchfab.com/3d-models/cyber-samurai-26ccafaddb2745ceb56ae5cfc65bfed5) by KhoaMinh (https://sketchfab.com/duongminhkhoa231) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)

BIN
playground/vue/public/models/cyber_samurai/scene.bin


+ 2121 - 0
playground/vue/public/models/cyber_samurai/scene.gltf

@@ -0,0 +1,2121 @@
+{
+  "accessors": [
+    {
+      "bufferView": 2,
+      "componentType": 5126,
+      "count": 22852,
+      "max": [
+        0.3888629972934723,
+        0.34200799465179443,
+        1.180968999862671
+      ],
+      "min": [
+        -0.41683098673820496,
+        -0.17232699692249298,
+        -0.15904900431632996
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 274224,
+      "componentType": 5126,
+      "count": 22852,
+      "max": [
+        0.9999995231628418,
+        0.9999427795410156,
+        0.9611836075782776
+      ],
+      "min": [
+        -0.9999992847442627,
+        -0.999980092048645,
+        -0.9355192184448242
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "componentType": 5126,
+      "count": 22852,
+      "max": [
+        0.9999946355819702,
+        0.9999123215675354,
+        0.9999966025352478,
+        1.0
+      ],
+      "min": [
+        -0.9999880790710449,
+        -0.9999754428863525,
+        -0.9999997019767761,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "componentType": 5126,
+      "count": 22852,
+      "max": [
+        0.9558839797973633,
+        0.9822540283203125
+      ],
+      "min": [
+        0.0028860000893473625,
+        0.0
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "componentType": 5125,
+      "count": 129852,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 548448,
+      "componentType": 5126,
+      "count": 26319,
+      "max": [
+        0.38885998725891113,
+        0.3572610020637512,
+        1.7076330184936523
+      ],
+      "min": [
+        -0.5131080150604248,
+        -0.21989400684833527,
+        0.933476984500885
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 864276,
+      "componentType": 5126,
+      "count": 26319,
+      "max": [
+        0.9999306201934814,
+        0.9999575614929199,
+        0.9994837641716003
+      ],
+      "min": [
+        -0.9999827146530151,
+        -0.9999853372573853,
+        -0.9996336102485657
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 365632,
+      "componentType": 5126,
+      "count": 26319,
+      "max": [
+        0.9999440908432007,
+        0.9998992085456848,
+        0.9999984502792358,
+        1.0
+      ],
+      "min": [
+        -0.9999955296516418,
+        -0.9996469020843506,
+        -0.9996435642242432,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 182816,
+      "componentType": 5126,
+      "count": 26319,
+      "max": [
+        0.989749014377594,
+        0.9927729964256287
+      ],
+      "min": [
+        0.004393000155687332,
+        0.0014639999717473984
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 519408,
+      "componentType": 5125,
+      "count": 150336,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1180104,
+      "componentType": 5126,
+      "count": 4,
+      "max": [
+        0.6982300281524658,
+        -0.0,
+        0.15845899283885956
+      ],
+      "min": [
+        0.630731999874115,
+        -0.0,
+        0.06281299889087677
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 393368,
+      "componentType": 5126,
+      "count": 4,
+      "max": [
+        0.0,
+        0.0
+      ],
+      "min": [
+        0.0,
+        0.0
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1120752,
+      "componentType": 5125,
+      "count": 4,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1180152,
+      "componentType": 5126,
+      "count": 13092,
+      "max": [
+        0.26241999864578247,
+        0.25091901421546936,
+        1.8171850442886353
+      ],
+      "min": [
+        -0.2654770016670227,
+        -0.13356000185012817,
+        0.9097139835357666
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1337256,
+      "componentType": 5126,
+      "count": 13092,
+      "max": [
+        0.9999979734420776,
+        0.9999581575393677,
+        0.9999839067459106
+      ],
+      "min": [
+        -1.0,
+        -0.9999948740005493,
+        -0.999850869178772
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 786736,
+      "componentType": 5126,
+      "count": 13092,
+      "max": [
+        1.0,
+        0.9996975660324097,
+        0.999649703502655,
+        1.0
+      ],
+      "min": [
+        -1.0,
+        -0.9997356534004211,
+        -0.9996322989463806,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 393400,
+      "componentType": 5126,
+      "count": 13092,
+      "max": [
+        1.9983700513839722,
+        0.9982240200042725
+      ],
+      "min": [
+        0.0009769999887794256,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1120768,
+      "componentType": 5125,
+      "count": 42786,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1494360,
+      "componentType": 5126,
+      "count": 7076,
+      "max": [
+        0.09949500113725662,
+        0.2341039925813675,
+        1.8253309726715088
+      ],
+      "min": [
+        -0.06973399966955185,
+        -0.02545199915766716,
+        1.10629403591156
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1579272,
+      "componentType": 5126,
+      "count": 7076,
+      "max": [
+        0.9961228966712952,
+        0.9999498128890991,
+        0.9998998641967773
+      ],
+      "min": [
+        -0.9814677238464355,
+        -0.9999959468841553,
+        -0.999752938747406
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 996208,
+      "componentType": 5126,
+      "count": 7076,
+      "max": [
+        0.9999997019767761,
+        0.9998977184295654,
+        0.9999046325683594,
+        1.0
+      ],
+      "min": [
+        -0.9999997615814209,
+        -0.9968668222427368,
+        -0.9996189475059509,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 498136,
+      "componentType": 5126,
+      "count": 7076,
+      "max": [
+        0.9921860098838806,
+        0.993399977684021
+      ],
+      "min": [
+        0.18115200102329254,
+        0.10693400353193283
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1291912,
+      "componentType": 5125,
+      "count": 18960,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1664184,
+      "componentType": 5126,
+      "count": 8928,
+      "max": [
+        0.1618030071258545,
+        0.15253399312496185,
+        1.9074920415878296
+      ],
+      "min": [
+        -0.1618030071258545,
+        -0.09909799695014954,
+        1.0424449443817139
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1771320,
+      "componentType": 5126,
+      "count": 8928,
+      "max": [
+        0.9995060563087463,
+        0.9998518228530884,
+        0.9992355108261108
+      ],
+      "min": [
+        -0.9999985694885254,
+        -0.9999579191207886,
+        -0.9999877214431763
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1109424,
+      "componentType": 5126,
+      "count": 8928,
+      "max": [
+        0.9997061491012573,
+        0.9892580509185791,
+        0.9998816251754761,
+        1.0
+      ],
+      "min": [
+        -0.9995588660240173,
+        -0.9990516901016235,
+        -0.9983786940574646,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 554744,
+      "componentType": 5126,
+      "count": 8928,
+      "max": [
+        1.9982550144195557,
+        0.9981909990310669
+      ],
+      "min": [
+        0.010254000313580036,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1367752,
+      "componentType": 5125,
+      "count": 32832,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1878456,
+      "componentType": 5126,
+      "count": 2128,
+      "max": [
+        0.018611999228596687,
+        0.2228350043296814,
+        1.4702080488204956
+      ],
+      "min": [
+        -0.024013999849557877,
+        0.059216998517513275,
+        1.046955943107605
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1903992,
+      "componentType": 5126,
+      "count": 2128,
+      "max": [
+        1.0,
+        0.9999452829360962,
+        0.9939849972724915
+      ],
+      "min": [
+        -1.0,
+        -0.9999489784240723,
+        -0.9931654334068298
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1252272,
+      "componentType": 5126,
+      "count": 2128,
+      "max": [
+        1.0,
+        0.9999667406082153,
+        0.9953843951225281,
+        1.0
+      ],
+      "min": [
+        -1.0,
+        -0.9999905824661255,
+        -0.9955764412879944,
+        1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 626168,
+      "componentType": 5126,
+      "count": 2128,
+      "max": [
+        0.984798014163971,
+        0.9962170124053955
+      ],
+      "min": [
+        0.09521500021219254,
+        0.07910200208425522
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1499080,
+      "componentType": 5125,
+      "count": 3192,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 1929528,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.30268600583076477,
+        -0.007915000431239605,
+        1.4412590265274048
+      ],
+      "min": [
+        -0.5269920229911804,
+        -0.35247498750686646,
+        1.0795739889144897
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2002032,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9997707009315491,
+        0.9990962147712708,
+        0.9982661008834839
+      ],
+      "min": [
+        -0.9995562434196472,
+        -0.9987220764160156,
+        -0.9997043013572693
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1286320,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9967876076698303,
+        0.9997400641441345,
+        0.9977863430976868,
+        1.0
+      ],
+      "min": [
+        -0.9973857998847961,
+        -0.9984351396560669,
+        -0.9997639060020447,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 643192,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9982320070266724,
+        0.998179018497467
+      ],
+      "min": [
+        0.0014649999793618917,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1511848,
+      "componentType": 5125,
+      "count": 17484,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2074536,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.28752100467681885,
+        0.0642239972949028,
+        1.3922029733657837
+      ],
+      "min": [
+        -0.445266991853714,
+        -0.32754701375961304,
+        1.0523790121078491
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2147040,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9996461272239685,
+        0.9975607991218567,
+        0.9970384836196899
+      ],
+      "min": [
+        -0.999562680721283,
+        -0.9978818297386169,
+        -0.9994223117828369
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1382992,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9994586110115051,
+        0.9999904632568359,
+        0.996799647808075,
+        1.0
+      ],
+      "min": [
+        -0.999954879283905,
+        -0.997148871421814,
+        -0.9996189475059509,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 691528,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9982320070266724,
+        0.998179018497467
+      ],
+      "min": [
+        0.0014649999793618917,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1581784,
+      "componentType": 5125,
+      "count": 17484,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2219544,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.2938440144062042,
+        0.04327499866485596,
+        1.414965033531189
+      ],
+      "min": [
+        -0.47231000661849976,
+        -0.33869001269340515,
+        1.0511349439620972
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2292048,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9990829825401306,
+        0.9997231364250183,
+        0.9974861145019531
+      ],
+      "min": [
+        -0.9992952346801758,
+        -0.9983346462249756,
+        -0.9986277222633362
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1479664,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9997884631156921,
+        0.9967545866966248,
+        0.9866943359375,
+        1.0
+      ],
+      "min": [
+        -0.9995779991149902,
+        -0.9990196824073792,
+        -0.9991007447242737,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 739864,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9982320070266724,
+        0.998179018497467
+      ],
+      "min": [
+        0.0014649999793618917,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1651720,
+      "componentType": 5125,
+      "count": 17484,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2364552,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.29919201135635376,
+        0.019221000373363495,
+        1.4373409748077393
+      ],
+      "min": [
+        -0.4995200037956238,
+        -0.3435629904270172,
+        1.0649479627609253
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2437056,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.995328962802887,
+        0.9921239018440247,
+        0.999584972858429
+      ],
+      "min": [
+        -0.9992684125900269,
+        -0.9914990663528442,
+        -0.9976168870925903
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1576336,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9981541633605957,
+        0.9996695518493652,
+        0.9938307404518127,
+        1.0
+      ],
+      "min": [
+        -0.9994898438453674,
+        -0.9974603652954102,
+        -0.9981280565261841,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 788200,
+      "componentType": 5126,
+      "count": 6042,
+      "max": [
+        0.9982320070266724,
+        0.998179018497467
+      ],
+      "min": [
+        0.0014649999793618917,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1721656,
+      "componentType": 5125,
+      "count": 17484,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2509560,
+      "componentType": 5126,
+      "count": 8984,
+      "max": [
+        0.49312299489974976,
+        0.34123799204826355,
+        1.631456971168518
+      ],
+      "min": [
+        -0.5320050120353699,
+        -0.31412801146507263,
+        -0.24451300501823425
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2617368,
+      "componentType": 5126,
+      "count": 8984,
+      "max": [
+        0.9997312426567078,
+        0.9994485378265381,
+        0.9996271729469299
+      ],
+      "min": [
+        -0.9995750784873962,
+        -0.999030351638794,
+        -1.0
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1673008,
+      "componentType": 5126,
+      "count": 8984,
+      "max": [
+        0.9993167519569397,
+        0.9995604157447815,
+        1.0,
+        1.0
+      ],
+      "min": [
+        -0.9998977780342102,
+        -0.9995617866516113,
+        -1.0,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 836536,
+      "componentType": 5126,
+      "count": 8984,
+      "max": [
+        0.9983440041542053,
+        0.9982870221138
+      ],
+      "min": [
+        0.0009769999887794256,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1791592,
+      "componentType": 5125,
+      "count": 25944,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2725176,
+      "componentType": 5126,
+      "count": 7138,
+      "max": [
+        0.35905298590660095,
+        0.33345600962638855,
+        1.4553409814834595
+      ],
+      "min": [
+        -0.5486680269241333,
+        -0.2577190101146698,
+        0.3281809985637665
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2810832,
+      "componentType": 5126,
+      "count": 7138,
+      "max": [
+        0.9999141693115234,
+        0.9964073896408081,
+        0.9999107122421265
+      ],
+      "min": [
+        -0.9997358918190002,
+        -0.9964073896408081,
+        -0.9999078512191772
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1816752,
+      "componentType": 5126,
+      "count": 7138,
+      "max": [
+        0.99983149766922,
+        0.9990725517272949,
+        0.9995837807655334,
+        1.0
+      ],
+      "min": [
+        -0.9990630745887756,
+        -0.9991554617881775,
+        -0.9991077184677124,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 908408,
+      "componentType": 5126,
+      "count": 7138,
+      "max": [
+        0.9983530044555664,
+        0.9982309937477112
+      ],
+      "min": [
+        0.0009769999887794256,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1895368,
+      "componentType": 5125,
+      "count": 21600,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 2896488,
+      "componentType": 5126,
+      "count": 9090,
+      "max": [
+        0.37779000401496887,
+        0.298568993806839,
+        1.3408260345458984
+      ],
+      "min": [
+        -0.5247780084609985,
+        -0.30593299865722656,
+        -0.11074600368738174
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3005568,
+      "componentType": 5126,
+      "count": 9090,
+      "max": [
+        0.99993896484375,
+        0.9989990592002869,
+        0.9993376731872559
+      ],
+      "min": [
+        -0.9992146492004395,
+        -0.998407244682312,
+        -0.9969444870948792
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 1930960,
+      "componentType": 5126,
+      "count": 9090,
+      "max": [
+        0.9985038042068481,
+        0.999447762966156,
+        0.9958119988441467,
+        1.0
+      ],
+      "min": [
+        -0.9968814253807068,
+        -0.9998263120651245,
+        -0.9997501969337463,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 965512,
+      "componentType": 5126,
+      "count": 9090,
+      "max": [
+        0.9984520077705383,
+        0.9982370138168335
+      ],
+      "min": [
+        0.0009769999887794256,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 1981768,
+      "componentType": 5125,
+      "count": 21276,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3114648,
+      "componentType": 5126,
+      "count": 9332,
+      "max": [
+        0.37846899032592773,
+        0.31691300868988037,
+        1.5855679512023926
+      ],
+      "min": [
+        -0.5316749811172485,
+        -0.3012399971485138,
+        -0.23478500545024872
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3226632,
+      "componentType": 5126,
+      "count": 9332,
+      "max": [
+        0.9998252987861633,
+        0.9990951418876648,
+        0.9990085959434509
+      ],
+      "min": [
+        -0.9996034502983093,
+        -0.9982666969299316,
+        -0.9981836676597595
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 2076400,
+      "componentType": 5126,
+      "count": 9332,
+      "max": [
+        0.9999507069587708,
+        0.9999927878379822,
+        0.998931884765625,
+        1.0
+      ],
+      "min": [
+        -0.9997187256813049,
+        -0.9999405145645142,
+        -0.9975491762161255,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 1038232,
+      "componentType": 5126,
+      "count": 9332,
+      "max": [
+        0.9983540177345276,
+        0.9984530210494995
+      ],
+      "min": [
+        0.0009769999887794256,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 2066872,
+      "componentType": 5125,
+      "count": 23220,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3338616,
+      "componentType": 5126,
+      "count": 8091,
+      "max": [
+        0.2066829949617386,
+        0.3269540071487427,
+        2.1839160919189453
+      ],
+      "min": [
+        -0.2960129976272583,
+        -0.08548299968242645,
+        1.6644059419631958
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3435708,
+      "componentType": 5126,
+      "count": 8091,
+      "max": [
+        0.9997463822364807,
+        0.9999589920043945,
+        0.9999997615814209
+      ],
+      "min": [
+        -0.9997219443321228,
+        -0.9999253749847412,
+        -0.9997945427894592
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 2225712,
+      "componentType": 5126,
+      "count": 8091,
+      "max": [
+        0.9999913573265076,
+        0.9998190999031067,
+        0.9999240040779114,
+        1.0
+      ],
+      "min": [
+        -0.999964714050293,
+        -0.9983249306678772,
+        -0.9993649125099182,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 1112888,
+      "componentType": 5126,
+      "count": 8091,
+      "max": [
+        0.9984790086746216,
+        0.9982749819755554
+      ],
+      "min": [
+        0.05224600061774254,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 2159752,
+      "componentType": 5125,
+      "count": 31398,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3532800,
+      "componentType": 5126,
+      "count": 4308,
+      "max": [
+        0.4125030040740967,
+        0.3480769991874695,
+        1.7954050302505493
+      ],
+      "min": [
+        -0.10604099929332733,
+        -0.06983699649572372,
+        1.4445760250091553
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3584496,
+      "componentType": 5126,
+      "count": 4308,
+      "max": [
+        0.9996963143348694,
+        0.996893584728241,
+        0.9998301863670349
+      ],
+      "min": [
+        -0.9998646974563599,
+        -0.9969135522842407,
+        -0.996651291847229
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 2355168,
+      "componentType": 5126,
+      "count": 4308,
+      "max": [
+        0.9989230036735535,
+        0.996043860912323,
+        0.9984588623046875,
+        1.0
+      ],
+      "min": [
+        -0.9997791051864624,
+        -0.9991548657417297,
+        -0.9961976408958435,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 1177616,
+      "componentType": 5126,
+      "count": 4308,
+      "max": [
+        1.9984560012817383,
+        0.9769369959831238
+      ],
+      "min": [
+        0.05224600061774254,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 2285344,
+      "componentType": 5125,
+      "count": 18072,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3636192,
+      "componentType": 5126,
+      "count": 9878,
+      "max": [
+        0.3486259877681732,
+        0.717494010925293,
+        1.4615429639816284
+      ],
+      "min": [
+        0.11367899924516678,
+        -0.42945998907089233,
+        0.5426409840583801
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3754728,
+      "componentType": 5126,
+      "count": 9878,
+      "max": [
+        0.9967538714408875,
+        0.9964601993560791,
+        0.9988740086555481
+      ],
+      "min": [
+        -0.9990900158882141,
+        -0.9978090524673462,
+        -0.998744547367096
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 2424096,
+      "componentType": 5126,
+      "count": 9878,
+      "max": [
+        0.9972242712974548,
+        0.998240053653717,
+        0.9998434782028198,
+        1.0
+      ],
+      "min": [
+        -0.9981921911239624,
+        -0.9988219738006592,
+        -0.9996985197067261,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 1212080,
+      "componentType": 5126,
+      "count": 9878,
+      "max": [
+        1.7312480211257935,
+        0.9940770268440247
+      ],
+      "min": [
+        0.0009769999887794256,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 2357632,
+      "componentType": 5125,
+      "count": 29796,
+      "type": "SCALAR"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3873264,
+      "componentType": 5126,
+      "count": 2812,
+      "max": [
+        0.34592100977897644,
+        0.10950300097465515,
+        1.4425300359725952
+      ],
+      "min": [
+        0.19639000296592712,
+        -0.4161979854106903,
+        1.0648119449615479
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 2,
+      "byteOffset": 3907008,
+      "componentType": 5126,
+      "count": 2812,
+      "max": [
+        0.9999678134918213,
+        0.9962161779403687,
+        0.9893038868904114
+      ],
+      "min": [
+        -0.9999678134918213,
+        -0.9987887740135193,
+        -0.9988492727279663
+      ],
+      "type": "VEC3"
+    },
+    {
+      "bufferView": 3,
+      "byteOffset": 2582144,
+      "componentType": 5126,
+      "count": 2812,
+      "max": [
+        0.9959115982055664,
+        0.9754102826118469,
+        0.9942792057991028,
+        1.0
+      ],
+      "min": [
+        -0.9936113953590393,
+        -0.995703935623169,
+        -0.9983628392219543,
+        -1.0
+      ],
+      "type": "VEC4"
+    },
+    {
+      "bufferView": 1,
+      "byteOffset": 1291104,
+      "componentType": 5126,
+      "count": 2812,
+      "max": [
+        1.7232309579849243,
+        0.8930680155754089
+      ],
+      "min": [
+        0.05224600061774254,
+        0.0009769999887794256
+      ],
+      "type": "VEC2"
+    },
+    {
+      "bufferView": 0,
+      "byteOffset": 2476816,
+      "componentType": 5125,
+      "count": 7632,
+      "type": "SCALAR"
+    }
+  ],
+  "asset": {
+    "extras": {
+      "author": "KhoaMinh (https://sketchfab.com/duongminhkhoa231)",
+      "license": "CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)",
+      "source": "https://sketchfab.com/3d-models/cyber-samurai-26ccafaddb2745ceb56ae5cfc65bfed5",
+      "title": "Cyber Samurai"
+    },
+    "generator": "Sketchfab-12.67.0",
+    "version": "2.0"
+  },
+  "bufferViews": [
+    {
+      "buffer": 0,
+      "byteLength": 2507344,
+      "name": "floatBufferViews",
+      "target": 34963
+    },
+    {
+      "buffer": 0,
+      "byteLength": 1313600,
+      "byteOffset": 2507344,
+      "byteStride": 8,
+      "name": "floatBufferViews",
+      "target": 34962
+    },
+    {
+      "buffer": 0,
+      "byteLength": 3940752,
+      "byteOffset": 3820944,
+      "byteStride": 12,
+      "name": "floatBufferViews",
+      "target": 34962
+    },
+    {
+      "buffer": 0,
+      "byteLength": 2627136,
+      "byteOffset": 7761696,
+      "byteStride": 16,
+      "name": "floatBufferViews",
+      "target": 34962
+    }
+  ],
+  "buffers": [
+    {
+      "byteLength": 10388832,
+      "uri": "scene.bin"
+    }
+  ],
+  "extensionsUsed": [
+    "KHR_materials_transmission"
+  ],
+  "images": [
+    {
+      "uri": "textures/LowSet1_baseColor.png"
+    },
+    {
+      "uri": "textures/LowSet1_metallicRoughness.png"
+    },
+    {
+      "uri": "textures/LowSet1_emissive.png"
+    },
+    {
+      "uri": "textures/LowSet1_normal.png"
+    },
+    {
+      "uri": "textures/LowSet2_baseColor.png"
+    },
+    {
+      "uri": "textures/LowSet2_metallicRoughness.png"
+    },
+    {
+      "uri": "textures/LowSet2_emissive.png"
+    },
+    {
+      "uri": "textures/LowSet2_normal.png"
+    },
+    {
+      "uri": "textures/LowSet3_baseColor.png"
+    },
+    {
+      "uri": "textures/LowSet3_metallicRoughness.png"
+    },
+    {
+      "uri": "textures/LowSet3_normal.png"
+    },
+    {
+      "uri": "textures/Robe_baseColor.png"
+    },
+    {
+      "uri": "textures/Robe_metallicRoughness.png"
+    },
+    {
+      "uri": "textures/Robe_normal.png"
+    },
+    {
+      "uri": "textures/Robe_transmission.png"
+    },
+    {
+      "uri": "textures/Robe2_baseColor.jpeg"
+    },
+    {
+      "uri": "textures/Robe2_metallicRoughness.png"
+    },
+    {
+      "uri": "textures/Robe2_normal.jpeg"
+    }
+  ],
+  "materials": [
+    {
+      "doubleSided": true,
+      "emissiveFactor": [
+        1.0,
+        1.0,
+        1.0
+      ],
+      "emissiveTexture": {
+        "index": 2
+      },
+      "name": "LowSet1",
+      "normalTexture": {
+        "index": 3
+      },
+      "pbrMetallicRoughness": {
+        "baseColorTexture": {
+          "index": 0
+        },
+        "metallicRoughnessTexture": {
+          "index": 1
+        }
+      }
+    },
+    {
+      "doubleSided": true,
+      "emissiveFactor": [
+        1.0,
+        1.0,
+        1.0
+      ],
+      "emissiveTexture": {
+        "index": 6
+      },
+      "name": "LowSet2",
+      "normalTexture": {
+        "index": 7
+      },
+      "pbrMetallicRoughness": {
+        "baseColorTexture": {
+          "index": 4
+        },
+        "metallicRoughnessTexture": {
+          "index": 5
+        }
+      }
+    },
+    {
+      "doubleSided": true,
+      "name": "LowSet3",
+      "normalTexture": {
+        "index": 10
+      },
+      "pbrMetallicRoughness": {
+        "baseColorTexture": {
+          "index": 8
+        },
+        "metallicRoughnessTexture": {
+          "index": 9
+        }
+      }
+    },
+    {
+      "alphaMode": "BLEND",
+      "doubleSided": true,
+      "extensions": {
+        "KHR_materials_transmission": {
+          "transmissionFactor": 1.0,
+          "transmissionTexture": {
+            "index": 14
+          }
+        }
+      },
+      "name": "Robe",
+      "normalTexture": {
+        "index": 13
+      },
+      "pbrMetallicRoughness": {
+        "baseColorTexture": {
+          "index": 11
+        },
+        "metallicFactor": 0.0,
+        "metallicRoughnessTexture": {
+          "index": 12
+        }
+      }
+    },
+    {
+      "doubleSided": true,
+      "name": "Robe2",
+      "normalTexture": {
+        "index": 17
+      },
+      "pbrMetallicRoughness": {
+        "baseColorTexture": {
+          "index": 15
+        },
+        "metallicFactor": 0.0,
+        "metallicRoughnessTexture": {
+          "index": 16
+        }
+      }
+    }
+  ],
+  "meshes": [
+    {
+      "name": "Object_0",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 1,
+            "POSITION": 0,
+            "TANGENT": 2,
+            "TEXCOORD_0": 3
+          },
+          "indices": 4,
+          "material": 4,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_1",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 6,
+            "POSITION": 5,
+            "TANGENT": 7,
+            "TEXCOORD_0": 8
+          },
+          "indices": 9,
+          "material": 3,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_2",
+      "primitives": [
+        {
+          "attributes": {
+            "POSITION": 10,
+            "TEXCOORD_0": 11
+          },
+          "indices": 12,
+          "material": 2,
+          "mode": 1
+        }
+      ]
+    },
+    {
+      "name": "Object_3",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 14,
+            "POSITION": 13,
+            "TANGENT": 15,
+            "TEXCOORD_0": 16
+          },
+          "indices": 17,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_4",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 19,
+            "POSITION": 18,
+            "TANGENT": 20,
+            "TEXCOORD_0": 21
+          },
+          "indices": 22,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_5",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 24,
+            "POSITION": 23,
+            "TANGENT": 25,
+            "TEXCOORD_0": 26
+          },
+          "indices": 27,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_6",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 29,
+            "POSITION": 28,
+            "TANGENT": 30,
+            "TEXCOORD_0": 31
+          },
+          "indices": 32,
+          "material": 0,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_7",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 34,
+            "POSITION": 33,
+            "TANGENT": 35,
+            "TEXCOORD_0": 36
+          },
+          "indices": 37,
+          "material": 1,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_8",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 39,
+            "POSITION": 38,
+            "TANGENT": 40,
+            "TEXCOORD_0": 41
+          },
+          "indices": 42,
+          "material": 1,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_9",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 44,
+            "POSITION": 43,
+            "TANGENT": 45,
+            "TEXCOORD_0": 46
+          },
+          "indices": 47,
+          "material": 1,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_10",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 49,
+            "POSITION": 48,
+            "TANGENT": 50,
+            "TEXCOORD_0": 51
+          },
+          "indices": 52,
+          "material": 1,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_11",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 54,
+            "POSITION": 53,
+            "TANGENT": 55,
+            "TEXCOORD_0": 56
+          },
+          "indices": 57,
+          "material": 1,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_12",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 59,
+            "POSITION": 58,
+            "TANGENT": 60,
+            "TEXCOORD_0": 61
+          },
+          "indices": 62,
+          "material": 1,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_13",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 64,
+            "POSITION": 63,
+            "TANGENT": 65,
+            "TEXCOORD_0": 66
+          },
+          "indices": 67,
+          "material": 1,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_14",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 69,
+            "POSITION": 68,
+            "TANGENT": 70,
+            "TEXCOORD_0": 71
+          },
+          "indices": 72,
+          "material": 1,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_15",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 74,
+            "POSITION": 73,
+            "TANGENT": 75,
+            "TEXCOORD_0": 76
+          },
+          "indices": 77,
+          "material": 2,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_16",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 79,
+            "POSITION": 78,
+            "TANGENT": 80,
+            "TEXCOORD_0": 81
+          },
+          "indices": 82,
+          "material": 2,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_17",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 84,
+            "POSITION": 83,
+            "TANGENT": 85,
+            "TEXCOORD_0": 86
+          },
+          "indices": 87,
+          "material": 2,
+          "mode": 4
+        }
+      ]
+    },
+    {
+      "name": "Object_18",
+      "primitives": [
+        {
+          "attributes": {
+            "NORMAL": 89,
+            "POSITION": 88,
+            "TANGENT": 90,
+            "TEXCOORD_0": 91
+          },
+          "indices": 92,
+          "material": 2,
+          "mode": 4
+        }
+      ]
+    }
+  ],
+  "nodes": [
+    {
+      "children": [
+        1
+      ],
+      "matrix": [
+        1.0,
+        0.0,
+        0.0,
+        0.0,
+        0.0,
+        2.220446049250313e-16,
+        -1.0,
+        0.0,
+        0.0,
+        1.0,
+        2.220446049250313e-16,
+        0.0,
+        0.0,
+        0.0,
+        0.0,
+        1.0
+      ],
+      "name": "Sketchfab_model"
+    },
+    {
+      "children": [
+        2,
+        3,
+        4,
+        5,
+        6,
+        7,
+        8,
+        9,
+        10,
+        11,
+        12,
+        13,
+        14,
+        15,
+        16,
+        17,
+        18,
+        19,
+        20
+      ],
+      "name": "RoninFinalS.obj.cleaner.materialmerger.gles"
+    },
+    {
+      "mesh": 0,
+      "name": "Object_2"
+    },
+    {
+      "mesh": 1,
+      "name": "Object_3"
+    },
+    {
+      "mesh": 2,
+      "name": "Object_4"
+    },
+    {
+      "mesh": 3,
+      "name": "Object_5"
+    },
+    {
+      "mesh": 4,
+      "name": "Object_6"
+    },
+    {
+      "mesh": 5,
+      "name": "Object_7"
+    },
+    {
+      "mesh": 6,
+      "name": "Object_8"
+    },
+    {
+      "mesh": 7,
+      "name": "Object_9"
+    },
+    {
+      "mesh": 8,
+      "name": "Object_10"
+    },
+    {
+      "mesh": 9,
+      "name": "Object_11"
+    },
+    {
+      "mesh": 10,
+      "name": "Object_12"
+    },
+    {
+      "mesh": 11,
+      "name": "Object_13"
+    },
+    {
+      "mesh": 12,
+      "name": "Object_14"
+    },
+    {
+      "mesh": 13,
+      "name": "Object_15"
+    },
+    {
+      "mesh": 14,
+      "name": "Object_16"
+    },
+    {
+      "mesh": 15,
+      "name": "Object_17"
+    },
+    {
+      "mesh": 16,
+      "name": "Object_18"
+    },
+    {
+      "mesh": 17,
+      "name": "Object_19"
+    },
+    {
+      "mesh": 18,
+      "name": "Object_20"
+    }
+  ],
+  "samplers": [
+    {
+      "magFilter": 9729,
+      "minFilter": 9987,
+      "wrapS": 10497,
+      "wrapT": 10497
+    }
+  ],
+  "scene": 0,
+  "scenes": [
+    {
+      "name": "Sketchfab_Scene",
+      "nodes": [
+        0
+      ]
+    }
+  ],
+  "textures": [
+    {
+      "sampler": 0,
+      "source": 0
+    },
+    {
+      "sampler": 0,
+      "source": 1
+    },
+    {
+      "sampler": 0,
+      "source": 2
+    },
+    {
+      "sampler": 0,
+      "source": 3
+    },
+    {
+      "sampler": 0,
+      "source": 4
+    },
+    {
+      "sampler": 0,
+      "source": 5
+    },
+    {
+      "sampler": 0,
+      "source": 6
+    },
+    {
+      "sampler": 0,
+      "source": 7
+    },
+    {
+      "sampler": 0,
+      "source": 8
+    },
+    {
+      "sampler": 0,
+      "source": 9
+    },
+    {
+      "sampler": 0,
+      "source": 10
+    },
+    {
+      "sampler": 0,
+      "source": 11
+    },
+    {
+      "sampler": 0,
+      "source": 12
+    },
+    {
+      "sampler": 0,
+      "source": 13
+    },
+    {
+      "sampler": 0,
+      "source": 14
+    },
+    {
+      "sampler": 0,
+      "source": 15
+    },
+    {
+      "sampler": 0,
+      "source": 16
+    },
+    {
+      "sampler": 0,
+      "source": 17
+    }
+  ]
+}

BIN
playground/vue/public/models/cyber_samurai/textures/LowSet1_baseColor.png


BIN
playground/vue/public/models/cyber_samurai/textures/LowSet1_emissive.png


BIN
playground/vue/public/models/cyber_samurai/textures/LowSet1_metallicRoughness.png


BIN
playground/vue/public/models/cyber_samurai/textures/LowSet1_normal.png


BIN
playground/vue/public/models/cyber_samurai/textures/LowSet2_baseColor.png


BIN
playground/vue/public/models/cyber_samurai/textures/LowSet2_emissive.png


BIN
playground/vue/public/models/cyber_samurai/textures/LowSet2_metallicRoughness.png


BIN
playground/vue/public/models/cyber_samurai/textures/LowSet2_normal.png


BIN
playground/vue/public/models/cyber_samurai/textures/LowSet3_baseColor.png


BIN
playground/vue/public/models/cyber_samurai/textures/LowSet3_metallicRoughness.png


BIN
playground/vue/public/models/cyber_samurai/textures/LowSet3_normal.png


BIN
playground/vue/public/models/cyber_samurai/textures/Robe2_baseColor.jpeg


BIN
playground/vue/public/models/cyber_samurai/textures/Robe2_metallicRoughness.png


BIN
playground/vue/public/models/cyber_samurai/textures/Robe2_normal.jpeg


BIN
playground/vue/public/models/cyber_samurai/textures/Robe_baseColor.png


BIN
playground/vue/public/models/cyber_samurai/textures/Robe_metallicRoughness.png


BIN
playground/vue/public/models/cyber_samurai/textures/Robe_normal.png


BIN
playground/vue/public/models/cyber_samurai/textures/Robe_transmission.png


+ 27 - 0
playground/vue/src/pages/events/complex-model/Character.vue

@@ -0,0 +1,27 @@
+<script setup lang="ts">
+/* eslint-disable no-console */
+import { useGLTF } from '@tresjs/cientos'
+
+const { nodes } = await useGLTF('/models/Artificer.glb', { draco: true })
+console.log(nodes)
+const model = nodes.Engineer_Rig
+
+model.position.set(-4, 0, 0)
+
+const handleClick = (e: PointerEvent) => {
+  console.log('clicked', e)
+}
+
+const handlePointerEnter = (e: PointerEvent) => {
+  console.log('pointer-enter', e)
+}
+
+const handlePointerLeave = (e: PointerEvent) => {
+  console.log('pointer-leave', e)
+}
+/* eslint-enable no-console */
+</script>
+
+<template>
+  <primitive :object="model" @click="handleClick" @pointer-enter="handlePointerEnter" @pointer-leave="handlePointerLeave" />
+</template>

+ 25 - 0
playground/vue/src/pages/events/complex-model/ComplexModel.vue

@@ -0,0 +1,25 @@
+<script setup lang="ts">
+/* eslint-disable no-console */
+import { useGLTF } from '@tresjs/cientos'
+
+const { nodes } = await useGLTF('/models/cyber_samurai/scene.gltf', { draco: true })
+console.log(nodes)
+const model = nodes.Sketchfab_model
+
+const handleClick = (e: PointerEvent) => {
+  console.log('clicked', e)
+}
+
+const handlePointerEnter = (e: PointerEvent) => {
+  console.log('pointer-enter', e)
+}
+
+const handlePointerLeave = (e: PointerEvent) => {
+  console.log('pointer-leave', e)
+}
+/* eslint-enable no-console */
+</script>
+
+<template>
+  <primitive :object="model" @click="handleClick" @pointer-enter="handlePointerEnter" @pointer-leave="handlePointerLeave" />
+</template>

+ 53 - 0
playground/vue/src/pages/events/complex-model/index.vue

@@ -0,0 +1,53 @@
+<script setup lang="ts">
+/* eslint-disable no-console */
+import { OrbitControls } from '@tresjs/cientos'
+import {
+  TresCanvas,
+} from '@tresjs/core'
+import { BoxGeometry, Mesh, MeshNormalMaterial } from 'three'
+import { TresLeches, useControls } from '@tresjs/leches'
+import '@tresjs/leches/styles'
+import Character from './Character.vue'
+import ComplexModel from './ComplexModel.vue'
+
+const box = new Mesh(new BoxGeometry(1, 1, 1), new MeshNormalMaterial())
+box.position.set(4, 0, 0)
+useControls('fpsgraph')
+
+const handleClick = (e: PointerEvent) => {
+  console.log('clicked', e)
+}
+
+const handlePointerEnter = (e: PointerEvent) => {
+  console.log('pointer-enter', e)
+}
+
+const handlePointerLeave = (e: PointerEvent) => {
+  console.log('pointer-leave', e)
+}
+/* eslint-enable no-console */
+</script>
+
+<template>
+  <TresLeches />
+  <TresCanvas clear-color="#202020">
+    <TresPerspectiveCamera
+      :position="[6, 6, 6]"
+      :look-at="[0, 0, 0]"
+    />
+    <OrbitControls />
+    <Suspense>
+      <Character />
+    </Suspense>
+    <Suspense>
+      <ComplexModel />
+    </Suspense>
+    <primitive
+      :object="box"
+      @click="handleClick"
+      @pointer-enter="handlePointerEnter"
+      @pointer-leave="handlePointerLeave"
+    />
+    <TresAmbientLight :intensity="1" />
+  </TresCanvas>
+</template>

+ 54 - 0
playground/vue/src/pages/events/groups/index.vue

@@ -0,0 +1,54 @@
+<script setup lang="ts">
+/* eslint-disable no-console */
+import { OrbitControls } from '@tresjs/cientos'
+import { TresCanvas } from '@tresjs/core'
+
+const handleClick = (e: PointerEvent) => {
+  console.log('clicked', e)
+}
+
+const handlePointerEnter = (e: PointerEvent) => {
+  console.log('pointer-enter', e)
+}
+
+const handlePointerLeave = (e: PointerEvent) => {
+  console.log('pointer-leave', e)
+}
+/* eslint-enable no-console */
+</script>
+
+<template>
+  <TresCanvas clear-color="#202020" shadows>
+    <!-- Camera setup -->
+    <TresPerspectiveCamera
+      :position="[5, 5, 5]"
+      :look-at="[0, 0, 0]"
+    />
+    <OrbitControls />
+
+    <!-- Lights -->
+    <TresDirectionalLight :position="[5, 5, 5]" :intensity="1" />
+    <TresAmbientLight :intensity="0.5" />
+
+    <!-- Group of geometric shapes -->
+    <TresGroup @click="handleClick" @pointer-enter="handlePointerEnter" @pointer-leave="handlePointerLeave">
+      <!-- Box -->
+      <TresMesh :position="[-2, 0, 0]">
+        <TresBoxGeometry :args="[1, 1, 1]" />
+        <TresMeshNormalMaterial />
+      </TresMesh>
+
+      <!-- Sphere -->
+      <TresMesh :position="[0, 0, 0]">
+        <TresSphereGeometry :args="[0.7, 32, 32]" />
+        <TresMeshNormalMaterial />
+      </TresMesh>
+
+      <!-- Cone -->
+      <TresMesh :position="[2, 0, 0]">
+        <TresConeGeometry :args="[0.7, 1.5, 32]" />
+        <TresMeshNormalMaterial />
+      </TresMesh>
+    </TresGroup>
+  </TresCanvas>
+</template>

+ 10 - 0
playground/vue/src/router/routes/events.ts

@@ -14,4 +14,14 @@ export const eventsRoutes = [
     name: 'Dynamic Objects',
     component: () => import('../../pages/events/DynamicObjects.vue'),
   },
+  {
+    path: '/events/complex-model',
+    name: 'Complex Model',
+    component: () => import('../../pages/events/complex-model/index.vue'),
+  },
+  {
+    path: '/events/groups',
+    name: 'Groups',
+    component: () => import('../../pages/events/groups/index.vue'),
+  },
 ]

Разлика између датотеке није приказан због своје велике величине
+ 220 - 227
pnpm-lock.yaml


+ 8 - 8
src/utils/index.ts

@@ -25,14 +25,14 @@ export const merge = (target: any, source: any) => {
 
 const HTML_TAGS
   = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,'
-  + 'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,'
-  + 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,'
-  + 'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,'
-  + 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,'
-  + 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,'
-  + 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,'
-  + 'option,output,progress,select,textarea,details,dialog,menu,'
-  + 'summary,template,blockquote,iframe,tfoot'
+    + 'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,'
+    + 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,'
+    + 'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,'
+    + 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,'
+    + 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,'
+    + 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,'
+    + 'option,output,progress,select,textarea,details,dialog,menu,'
+    + 'summary,template,blockquote,iframe,tfoot'
 
 export const isHTMLTag = /* #__PURE__ */ makeMap(HTML_TAGS)
 

Неке датотеке нису приказане због велике количине промена