From 958f8c57fdefea77ef01ce783d1ad1fd5db52cd5 Mon Sep 17 00:00:00 2001 From: Luca Della Vedova Date: Mon, 1 Aug 2022 16:56:33 +0200 Subject: [PATCH 1/2] Add a test for gltf with external textures Signed-off-by: Luca Della Vedova --- graphics/src/AssimpLoader_TEST.cc | 24 +++++ test/data/gltf/PurpleCube.bin | Bin 0 -> 840 bytes test/data/gltf/PurpleCube.gltf | 133 ++++++++++++++++++++++++++ test/data/gltf/PurpleCube_Diffuse.png | Bin 0 -> 5198 bytes 4 files changed, 157 insertions(+) create mode 100644 test/data/gltf/PurpleCube.bin create mode 100644 test/data/gltf/PurpleCube.gltf create mode 100644 test/data/gltf/PurpleCube_Diffuse.png diff --git a/graphics/src/AssimpLoader_TEST.cc b/graphics/src/AssimpLoader_TEST.cc index a32a0a33..75a179cd 100644 --- a/graphics/src/AssimpLoader_TEST.cc +++ b/graphics/src/AssimpLoader_TEST.cc @@ -620,6 +620,30 @@ TEST_F(AssimpLoader, LoadGlTF2Box) EXPECT_DOUBLE_EQ(mat->Transparency(), 0.0); } +///////////////////////////////////////////////// +// Open a gltf mesh with an external texture +TEST_F(AssimpLoader, LoadGlTF2BoxExternalTexture) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data/gltf", "PurpleCube.gltf")); + + EXPECT_STREQ("unknown", mesh->Name().c_str()); + + // Make sure we can read the submesh name + EXPECT_STREQ("PurpleCube", mesh->SubMeshByIndex(0).lock()->Name().c_str()); + + EXPECT_EQ(mesh->MaterialCount(), 1u); + + const common::MaterialPtr mat = mesh->MaterialByIndex(0u); + ASSERT_TRUE(mat.get()); + // No data (it is a file), but a populated filename + EXPECT_EQ(nullptr, mat->TextureData()); + auto testTextureFile = + common::testing::TestFile("data/gltf", "PurpleCube_Diffuse.png"); + EXPECT_EQ(testTextureFile, mat->TextureImage()); +} + ///////////////////////////////////////////////// // Use a fully featured glb test asset, including PBR textures, emissive maps // embedded textures, lightmaps, animations to test advanced glb features diff --git a/test/data/gltf/PurpleCube.bin b/test/data/gltf/PurpleCube.bin new file mode 100644 index 0000000000000000000000000000000000000000..59a9334fbb05d96eebc3bc20f70f2e091be473dd GIT binary patch literal 840 zcmah_IZgvX5G=q8tifP&n1qb$5fkh_1cbyVkO-{#!tNLR01^bDV;~|nAAyLf(Kc$2 zEPJHsuBoo-?p+|xkS=)E;@WAJ;YwXP%_>|wO^)f)9y)OyuAOEXwjI=G6*jLlIi8Vo z$96Ny|1-}SR`%bqz<0g>cgtp(*XM*YUD~1YojEhtux@j_(sWj{yrAiNTg@_X`#q`N z=94P^G~u53iTIpZeEezxetECjFy#A=7nf~#rRGtdq74t^|p~tIKqH&fK8mDkAktl5Pz7Cp^pFn literal 0 HcmV?d00001 diff --git a/test/data/gltf/PurpleCube.gltf b/test/data/gltf/PurpleCube.gltf new file mode 100644 index 00000000..48f941f4 --- /dev/null +++ b/test/data/gltf/PurpleCube.gltf @@ -0,0 +1,133 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v1.8.19", + "version" : "2.0" + }, + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 0 + ] + } + ], + "nodes" : [ + { + "mesh" : 0, + "name" : "PurpleCube" + } + ], + "materials" : [ + { + "doubleSided" : true, + "name" : "PurpleCube", + "pbrMetallicRoughness" : { + "baseColorTexture" : { + "index" : 0 + }, + "metallicFactor" : 0, + "roughnessFactor" : 0.5 + } + } + ], + "meshes" : [ + { + "name" : "PurpleCube", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TEXCOORD_0" : 2 + }, + "indices" : 3, + "material" : 0 + } + ] + } + ], + "textures" : [ + { + "sampler" : 0, + "source" : 0 + } + ], + "images" : [ + { + "mimeType" : "image/png", + "name" : "PurpleCube_Diffuse", + "uri" : "PurpleCube_Diffuse.png" + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 24, + "max" : [ + 1, + 1, + 2 + ], + "min" : [ + -1, + -1, + 0 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 24, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 24, + "type" : "VEC2" + }, + { + "bufferView" : 3, + "componentType" : 5123, + "count" : 36, + "type" : "SCALAR" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 288, + "byteOffset" : 0 + }, + { + "buffer" : 0, + "byteLength" : 288, + "byteOffset" : 288 + }, + { + "buffer" : 0, + "byteLength" : 192, + "byteOffset" : 576 + }, + { + "buffer" : 0, + "byteLength" : 72, + "byteOffset" : 768 + } + ], + "samplers" : [ + { + "magFilter" : 9729, + "minFilter" : 9987 + } + ], + "buffers" : [ + { + "byteLength" : 840, + "uri" : "PurpleCube.bin" + } + ] +} diff --git a/test/data/gltf/PurpleCube_Diffuse.png b/test/data/gltf/PurpleCube_Diffuse.png new file mode 100644 index 0000000000000000000000000000000000000000..09b608d6554a09806451fb26122b49926e0aa8b3 GIT binary patch literal 5198 zcmeHr`9D-&{QsR9#-4pl_BVwhODg*yvZYC3P(p;VFJX#dBs<})jqI`{yT&pYgSVza zcCrnTP$T=;$LIDRe1G}=@_BrIIFEDhx%ZsM>zw<1J)h6ljkiD>bFmAv0|3BfYGQa3 z03hHc1Ym`Ooqa&58`!b=nb-va00-aS1{s_VKLh{)z|>IR3Y)bujY|^U#!=S$eBJ1K zbhaqi&_Z_>dd`&H491qqBbS#@Q2h3$RgoayO=;^Rtq7YJH{%CC+z@>Cs8lWi zdioUPi-GigzFXo+5^F;z4``e7I;+%`PFm05K80G*_i@&)CA4k)Al%_!*ZJFS6nbxH zgzDy-liLCx;JoqoG8`aM=VKv~d`bV;{-4gEN2L{-R(RpLpx!v@xgY>Mbb>@ilN%rv zoK=!HHkE-*1xi%9qSSy+^t~B%zG+Lp!7Fm|ct>?anZeIBe3lwG1Q@h>>d$CBMwzNk9d+C4laS~AwzfEl1Pt*j2v4z zR4MfZny>8UE|zE(@pkv*yZ8y{XmRK76z>cWwvp#Oze){Uyu+cV5f5&PUE1I^s#a|N zfbRV3Q?P*22}!^C;$tSGcO`j*B`}5!Ot3T~O+VA*r*wqw54p3nSlf^d9@5bZVi4786^_1|Z-j2r*V!dc=ZAXa3 znPhA|eyW(?gpMw_P!H|mknf7fR5;ze-d__eAR-ZVqM7k4w}!zGN_7Z=yxd&pwK3~N zTczF!h2zxPVz<5|t|golP%3}wh=!&LLHwJ6FZ2Nw^#m?%oy6W0RPwX-f$Od1SRZ&) zNGtnHa%cAE?}L*K8?VWH7WFATnRVZ`D7x)m+YW_(T;f)11d_4t;s!fMqVEJ><%x2; zI}ll3ELXlP_kA8O0y!1%h%{r98g?m|Ne8%b~R>{wvx1HKN?vBD()gG&>sg zeKojt+s9*8YBYSgO?fT!c&FwdcUUyIHi@cpP_t4aAvN|Cf7@T^sDYGRk#fW{p3kfI zS@V?4SpZFp17A_`o4lRRy&Iih4uFr!8HZJ=v<$C_faSAhe*qY@LyC)>q&E5Hmy_`SnDlxh9zXQagvkH76tRcFZ;`M3y<5Oub3~1x z-i7YajK}H=uQ}F>g$$_a#^z-dc9y2|1Cz$J?zKhHDT{9XHFQoIg2_l51T><*?zfZY zvpTtCTX*r+X70HC9ezPTRy7t|-(R~^o$h)nK(zp+|1u$yThEvycn0w;o?TNd{M*00 z&Q|ek0Dj*(yux`LRo=*Pnr5=`uZ1wWHtF7uRX4Sx7I!LCHZwHrpSd4Qdh)vqr&?~7 z1^MO+wm4_nWD!i>!%p-#n##$|I+H93zJ=%04IY%YxvqY<;gh>_t9=|_k!QV9MnX7X z2|R1$hTC-U8`82sWb}ruE|_Kg=k{4D5w)Lkr!1O>pJ$qRM*p&h2QFe7XgbiocG{BU z6SD%>Ro;sQPz&MJ&f)K3a@Xk>BKAnh9m_$lPg199$#KPkWzh=7DPF$gGgXdg=Z${! zE+={8$4@O4lCKh&R}c2X9|tK$ZTeEFgV*Jj%K}fDi+)R<>xwK^y3K-cGiFhF(pW~i?hkwF1s1Vx6aq*b${@634X{^;;?)6rxDAW zhADE#*7`a1y+hcX4^8S%fRoraKaT8DM6C(8y`fuglZfW(@1I)h-|M*N*LFzpb9>g; z>@A6il`f0kkPcI!fg>#mvgu1-zex5jj`w~`%_;L+N^P8N(IxSPCiVazS^DvY`0dC+ zTU|aKOOvV=i#Lq%PoJ*KTe%UHH|h>*jwKkvLzH@GW-jAgiC|e5=a=~-lZV%(wI1#d z89Rj=Vh@*%{dW&$^d5LIzn$*ZzX#waG!~iyJuTFmApPv`1YP2auI9^RGL0bJ`pUa% zBqF$280&22VpPaVH!(Dqp@D0%z7;X zYrZnWi*y1|m&Z}GMh-2z%4E2ggl08Qqd&ImLYSH&eMss{d1KW%^tzL3p`h@Ih1}I}I2v%$zZjDz97XreDZBI3 zxbnW;KqT|Z$EHvOpQXtuBuwxBZ_DKrU^W}ez5kw&!00?Hq=U0LgX`K?3cF^fe{_)} zWqwY&sUQ{-2Xxatuh%lqzPOo&yI+)DN;Z8l`!;bqwq)Y-`7Enf1}q;(~gls2RrPE{Ga02%5+$YZs$)9HjMU z^i_$M1ZFClz=MD1^FwzkF0gH18_igh$oKQWSu*S&&hI{SG60Rn*38C0H>LrUR~!;5;%>;!}QWW|wAIRA1xv zlcyWO(}&>s-6Q={u_I?DPe>Pzy9=vFgy$UBtQ~xzS0P6ugkO9X7me7z(Q=&ad)Eyc zn9h({Hc|%QAmT`^2h|7hvNh}Z?jWP1HZn85_o^REWS5!;b$;$?Hx&Yn%Lpn>HE=t* zfpI3M)Sh~OF`~74U6JapcFu1eySjP|Up<m18O%>qkwFm!cx}{C~4Q^#3M;byT6eiVLh38a&7*Je_ZQ4t>$~MVd;#O}(C;-wT z<8!>Og!omVYgN!li0$KB?b&}WyAr#>sYRlz8#Mj%F%advTjnl45Bs+~kggh3u0Hv^ zzccf2BGE&?3v?IT^pk0$a+9%h`g-%~++-fL8MX@RA2IC{4ZPSBPdqroHQ1`2KXF7C z+%oS}Dw?(7TbsrnjX7w&6(gxk3ROF%iDxJU;!f>y89kcrJd#|gaFFEjJ;~u&(S^?CTsSNv-Hur$- zG0z!N7@+{OEq@4F>hDb8;ux@eql6{~4>?9a2m;(VA9!;+=^d=4-2q&H`(TCyR z%6h-TLijgjIBn%>jhmVRs|K`Mlp8bUy*|;uy{3TIziR}TErWXR{m+k2QPTMPPJsCh zVzAzdW&yT%HvQ@JwgrY9h36#$$iYuWVlo10dDcro)|h@&VWw*mMEMj=w)rLzS1Dpa z3{O}iDlKT^P41_!mM<7ztmf!PtHKQ^U)b}Iz&sL27gl#2MIdC(MET5*NbjH4HH{WgOy?>Xnk5|SDD+?n5gAQ>frfO|& zXn>F;9}*vT8%uYXWYvONWV%ECP6vZ=oy>-FHdkh`@cdoAEK+`P!gR?6m|~7&f|GeF ztV{Ec0;ZXPeus!k*93^N>6*S?4m=4Cmzma9{MxA*#~43C!j!))(R^uNCN}L`*Y&YaD|mM4Dmk{ zJ~^%o{8Ryo6(}5$!i}P@`dm2>|-N4+^Xh zJnQUL0C@C7#`cg)7qIy9B_WEX(s+fQ%pErxF1!qYndLwjiodx7LymY=^1AQcHw zew)?|Aq@HBjf?hoiE(NH$G6-bIz=CB-EPET-*CQ%&78oc@x#ElolK+`=|^S-=g`c*$WI(i zpN8xBvU@mewY`6NMlASA%AoBw%W>2j(ss7|YQ5_5nfC+pTw zN3z3z$i^K3)svtqcdWC$mxa8QWAs!hgA=k1HrXkkI(fCv3DiHv{~;XVb%YA zSj^L=%7!ofZuSSQ2}X-x`cWCU+EaB3ESXq-eyzCFde%q~T|wC;wR#7&buPq#>ykt$ zVD+fJHx=c)6Dgmrv%6Np?c#>5+f7S-ki}9x{NeKQAbZ$aRYW9h-_ka4(X)F)RQJPW zi{ufRe>5Dt`Oh7z8>^J0jCg(AGrtw|Q>N&;7ArjrEo6hw)9Grz%HL)Ybyyw@}`( zXBQe=&c1*pJUUFwS#4OGi2e;RdxdcVYiw+hz`w2hAWtoP7Pmj_bywL)ta934s;_S( z-E9K%>?T-pmTe+;dwgqt(bdvUibmfQURX!{HBE<~xd=`49LwB`A=~FV5S84vE%~t0 zK|ErU3LQj?+xR`89@j80$Hmd>JZ@Dao z*w0bTsk%)NzylK3>{rrkLHq#q`KLQ7g0~$&7MBB}z$H^|9=KL`QSD`>;Y%T7=J2i~4P0{{R3 literal 0 HcmV?d00001 From bab4260a0fb1f9a5551615efee86ba6fc42cffea Mon Sep 17 00:00:00 2001 From: Luca Della Vedova Date: Mon, 22 Aug 2022 16:58:14 +0800 Subject: [PATCH 2/2] Use joinPaths, image of gazebo logo Signed-off-by: Luca Della Vedova --- graphics/src/AssimpLoader_TEST.cc | 2 +- test/data/gltf/PurpleCube_Diffuse.png | Bin 5198 -> 19375 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/graphics/src/AssimpLoader_TEST.cc b/graphics/src/AssimpLoader_TEST.cc index 75a179cd..b80f561b 100644 --- a/graphics/src/AssimpLoader_TEST.cc +++ b/graphics/src/AssimpLoader_TEST.cc @@ -626,7 +626,7 @@ TEST_F(AssimpLoader, LoadGlTF2BoxExternalTexture) { common::AssimpLoader loader; common::Mesh *mesh = loader.Load( - common::testing::TestFile("data/gltf", "PurpleCube.gltf")); + common::testing::TestFile("data", "gltf", "PurpleCube.gltf")); EXPECT_STREQ("unknown", mesh->Name().c_str()); diff --git a/test/data/gltf/PurpleCube_Diffuse.png b/test/data/gltf/PurpleCube_Diffuse.png index 09b608d6554a09806451fb26122b49926e0aa8b3..2381764737ebb82fe31e4d49fe37ee19e55bd3b5 100644 GIT binary patch literal 19375 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 literal 5198 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