From 38a704dd1c0a106ac3fa515e0062ce320053b9ae Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Wed, 30 Apr 2025 20:17:13 +0200 Subject: [PATCH] Add gltf morph anim tests --- games/devtest/mods/gltf/LICENSE.md | 3 + games/devtest/mods/gltf/init.lua | 26 +++ .../mods/gltf/models/gltf_morph_animated.glb | Bin 0 -> 6752 bytes .../gltf/models/gltf_morph_animated2.gltf | 192 ++++++++++++++++++ 4 files changed, 221 insertions(+) create mode 100644 games/devtest/mods/gltf/models/gltf_morph_animated.glb create mode 100644 games/devtest/mods/gltf/models/gltf_morph_animated2.gltf diff --git a/games/devtest/mods/gltf/LICENSE.md b/games/devtest/mods/gltf/LICENSE.md index 6c3828a4a..9c6b1185c 100644 --- a/games/devtest/mods/gltf/LICENSE.md +++ b/games/devtest/mods/gltf/LICENSE.md @@ -12,3 +12,6 @@ The glTF test models (and corresponding textures) in this mod are all licensed f * Minimal triangle, triangle without indices (`gltf_minimal_triangle.gltf`, `gltf_triangle_without_indices.gltf`) * From [the glTF sample model collection](https://github.com/KhronosGroup/glTF-Sample-Models) * Licensed under CC0 / public domain + + +Morph stuff is from https://github.com/KhronosGroup/glTF-Sample-Assets/ \ No newline at end of file diff --git a/games/devtest/mods/gltf/init.lua b/games/devtest/mods/gltf/init.lua index bcf18c327..591b875cb 100644 --- a/games/devtest/mods/gltf/init.lua +++ b/games/devtest/mods/gltf/init.lua @@ -40,6 +40,32 @@ core.register_entity("gltf:morph", { }, }) +core.register_entity("gltf:morph_animated", { + initial_properties = { + visual = "mesh", + mesh = "gltf_morph_animated.glb", + textures = {}, + backface_culling = false, + visual_size = vector.new(100, 100, 100), + }, + on_activate = function(self) + self.object:set_animation({x = 0, y = 5}, 1) + end +}) + +core.register_entity("gltf:morph_animated2", { + initial_properties = { + visual = "mesh", + mesh = "gltf_morph_animated2.gltf", + textures = {}, + backface_culling = false, + visual_size = vector.new(1, 1, 1), + }, + on_activate = function(self) + self.object:set_animation({x = 0, y = 5}, 1) + end +}) + core.register_entity("gltf:spider_animated", { initial_properties = { visual = "mesh", diff --git a/games/devtest/mods/gltf/models/gltf_morph_animated.glb b/games/devtest/mods/gltf/models/gltf_morph_animated.glb new file mode 100644 index 0000000000000000000000000000000000000000..219d2ac524060e34f13d1253729f563cf76aca97 GIT binary patch literal 6752 zcmeHM3s6+o89oXsAmJfKtH#1ypJ7(m-Mhf@*z+F*MdP|e9;T5JU6#ABX4%Ev#SK9O z6ELf7GL4Tab?j6pv2kteG-_=JteI(QGIsOOF=C3;q}EJIfHZYPr>5DSd+uGlV!Fa) zI@8X0XLi5;ob&(x`Jd<9g&KR=((wqPbu$t2MI-cBX|bt^Gg~Zz+wF9@xtxk7uByRm z6n}f0~y0fIysT89Oc~m*l9e%9#ILvi4 zWSpm#Za7jI4c%Bmt8k9_q|fHH8N5giJ49)5EYF48J7cVShf~JNVe~bk;$&rJM~z*$ zCoEZGHElTOEG*gjY_*=xV0jN8m~Y-*Ki2KTI+OiP+E^8__Tg#hMWa)Ti9PX)U&HZ|mcEgArnyEsw!&YbZ*qjdO%&^p&9S*@R z4cz9sdb{9ar-#SvsuAc((Zo5N)wCC=KlNr$Eo};~V5_P1xVdIgoh%~B+Z^=`R7CXM z=I{uvdZ(RjMTLyZO-pE)RGhQHBQa@2aXAU48yd_mT2i8YZnv~;jo=VmW{;Da!`0B! zFQv@sw7XNRPFG5~!{%wEx;6?fH}!-vXw%d*1&R|;c_K37s~SCmQE=3VE@<`oJ54>j zT5Pqlt?4S&q+sXux-jgSS@g71vWM56ok^oJdUlOgH^Q3m>NOc+ZH_^|Uc3rM&#%>J z#^kP6ryi5P+RTyB&(ekozBX%QI5X7Ya?4Zwce|@mYcj>UlP*uWY!u1YX=(Q9dY#~| z6{O{Qm#xm`v2B!xW{<~Zt7`Cw!zRvDT(UCX$cm~g-&C~3R7M*@#XVkJy1Z<8v56KR zty7z$+D30~E{C2ov>OGN&1`2PQrAh_gf!7(=Z-W@*09S{I_Rs0=wX%FEfhHIPS;Yig|#QW zw=>neUYn((dhew)(oH9;3JHn#9p?(^y)#Rl3Y`ioLy-~f7f&I{E-@1E( z2fBBbI!mL@%o1M-BvLOs>b98ajg?bD-!3Sl;#*WKUG@3wTokHTI$ia(!x3>?=qbcD zW0Yh-$P_gVY;#IVN>>6xikCIga1Sc!(b)WL_`i+pXl#4H zGrIm7kH*nZMIiC-gcH#O6p1ELj6^Xg8bzVW6r)fadI-g$c#5%T3Q9x?D2ZYMnuZ=m zQ_*yaQ(3sT`JxQld_Kc_fdIuQe8iuM-whb?7lRH==kZTEI_R7qcXf8s`2hZNZ!cXN z#8en4KTJtXgnb<|U@phO>;6>8~`6`%9zRPih6wW18*7>B(w~!q2r;>L9D$+NYMq(2+B#r0EH zJ9EjUUIY1O5Xd9kVuA|`$vW#&@|98KK<%h@mh{ZM-RN3E8;k$ z7ta=COFzJ{f8H&I!C<;UoR1!On&JH8dl({gilOGfHHNjnj1p@D1%t^92VT`P>}o5K z=3D9*9yry;aPp#^3?tA%hNgwTVt8`Tn+zk#2MoWO@-ai}_`gf@wEo0>E_^+S;r5|; zh7&%X&QNtcnc<(eQ!5y@UtGlyq3)AKhlM5uw`Is6R6wxMUG`IKgc^Nw$3c?AOWWA@TLJ4^r{KKT_V0xqozrLynjK8hIzbGQG>XXg*SZX$O_+P|3 zVzh9%Zy%m|GZii-`f&`J3;n^97-!6ew%vcgEr+H-#If_Z!;%2+>9625n_|E?>2v%t zngCb6zJck#CSWia#H&q1_`^$)uuR{NFJFy@?z5lZT{GihXi7J3-#8Wa%no4Pmown# z%{TF*ZOM>&^aSo(I1iA?kI_e|ko?!5;xAuR!?VphaY242L@w~*=Kfq*+tY|2-IfoR zx-9r?LJ?HNn(*H?8R6_zJ$~rzRS;7-7oYlUHJ}{{xV5JOW@g_uT;975_(k1@H8TZ> z(VZ}~JZS^_mfeQ)#dToVQE#|BR1e+FxrRB*Jd`iiu*l$r?)Wo#Ti$Pkp}y9c*tJg>N*&yLs)oTW@TJq1qR6j9o22e?Rc_wU^~CUC!kmImff)-0zobBGM?;O1fM_ z6W2<$Ws_^pAlIT*uF<#U+AWZ4x+O`fb^Ttc2cDOEZS82h4sQK2c_OC ZIU)6A|2Q@4#eR*{!~Aurx2X@u{|)ch8?XQX literal 0 HcmV?d00001 diff --git a/games/devtest/mods/gltf/models/gltf_morph_animated2.gltf b/games/devtest/mods/gltf/models/gltf_morph_animated2.gltf new file mode 100644 index 000000000..3b6efd8d0 --- /dev/null +++ b/games/devtest/mods/gltf/models/gltf_morph_animated2.gltf @@ -0,0 +1,192 @@ +{ + "scene" : 0, + "scenes":[ + { + "nodes":[ + 0 + ] + } + ], + "nodes":[ + { + "mesh":0 + } + ], + "meshes":[ + { + "primitives":[ + { + "attributes":{ + "POSITION":1 + }, + "targets":[ + { + "POSITION":2 + }, + { + "POSITION":3 + } + ], + "indices":0 + } + ], + "weights":[ + 0.5, + 0.5 + ] + } + ], + + "animations":[ + { + "samplers":[ + { + "input":4, + "interpolation":"LINEAR", + "output":5 + } + ], + "channels":[ + { + "sampler":0, + "target":{ + "node":0, + "path":"weights" + } + } + ] + } + ], + + "buffers":[ + { + "uri":"data:application/gltf-buffer;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAA/AAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIC/AACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA/AACAPwAAAAA=", + "byteLength":116 + }, + { + "uri":"data:application/gltf-buffer;base64,AAAAAAAAgD8AAABAAABAQAAAgEAAAAAAAAAAAAAAAAAAAIA/AACAPwAAgD8AAIA/AAAAAAAAAAAAAAAA", + "byteLength":60 + } + ], + "bufferViews":[ + { + "buffer":0, + "byteOffset":0, + "byteLength":6, + "target":34963 + }, + { + "buffer":0, + "byteOffset":8, + "byteLength":108, + "byteStride":12, + "target":34962 + }, + { + "buffer":1, + "byteOffset":0, + "byteLength":20 + }, + { + "buffer":1, + "byteOffset":20, + "byteLength":40 + } + ], + "accessors":[ + { + "bufferView":0, + "byteOffset":0, + "componentType":5123, + "count":3, + "type":"SCALAR", + "max":[ + 2 + ], + "min":[ + 0 + ] + }, + { + "bufferView":1, + "byteOffset":0, + "componentType":5126, + "count":3, + "type":"VEC3", + "max":[ + 1.0, + 0.5, + 0.0 + ], + "min":[ + 0.0, + 0.0, + 0.0 + ] + }, + { + "bufferView":1, + "byteOffset":36, + "componentType":5126, + "count":3, + "type":"VEC3", + "max":[ + 0.0, + 1.0, + 0.0 + ], + "min":[ + -1.0, + 0.0, + 0.0 + ] + }, + { + "bufferView":1, + "byteOffset":72, + "componentType":5126, + "count":3, + "type":"VEC3", + "max":[ + 1.0, + 1.0, + 0.0 + ], + "min":[ + 0.0, + 0.0, + 0.0 + ] + }, + { + "bufferView":2, + "byteOffset":0, + "componentType":5126, + "count":5, + "type":"SCALAR", + "max":[ + 4.0 + ], + "min":[ + 0.0 + ] + }, + { + "bufferView":3, + "byteOffset":0, + "componentType":5126, + "count":10, + "type":"SCALAR", + "max":[ + 1.0 + ], + "min":[ + 0.0 + ] + } + ], + + "asset":{ + "version":"2.0" + } +} \ No newline at end of file