From 62cc1faf33350f3f164ebc37094c63b50e299035 Mon Sep 17 00:00:00 2001 From: saschawillems Date: Thu, 18 Aug 2016 18:52:50 +0200 Subject: [PATCH] Split model and view matrix for clarity, destroy Vulkan resources --- data/shaders/skeletalanimation/mesh.vert | 21 +++++++++--------- data/shaders/skeletalanimation/mesh.vert.spv | Bin 4768 -> 4920 bytes data/shaders/skeletalanimation/texture.vert | 11 ++++----- .../skeletalanimation/texture.vert.spv | Bin 2760 -> 2912 bytes skeletalanimation/skeletalanimation.cpp | 18 ++++++++++----- 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/data/shaders/skeletalanimation/mesh.vert b/data/shaders/skeletalanimation/mesh.vert index 073de04d..79abee9b 100644 --- a/data/shaders/skeletalanimation/mesh.vert +++ b/data/shaders/skeletalanimation/mesh.vert @@ -15,6 +15,7 @@ layout (location = 5) in ivec4 inBoneIDs; layout (binding = 0) uniform UBO { mat4 projection; + mat4 view; mat4 model; mat4 bones[MAX_BONES]; vec4 lightPos; @@ -29,24 +30,24 @@ layout (location = 4) out vec3 outLightVec; out gl_PerVertex { - vec4 gl_Position; + vec4 gl_Position; }; void main() { - mat4 boneTransform = ubo.bones[inBoneIDs[0]] * inBoneWeights[0]; - boneTransform += ubo.bones[inBoneIDs[1]] * inBoneWeights[1]; - boneTransform += ubo.bones[inBoneIDs[2]] * inBoneWeights[2]; - boneTransform += ubo.bones[inBoneIDs[3]] * inBoneWeights[3]; - + mat4 boneTransform = ubo.bones[inBoneIDs[0]] * inBoneWeights[0]; + boneTransform += ubo.bones[inBoneIDs[1]] * inBoneWeights[1]; + boneTransform += ubo.bones[inBoneIDs[2]] * inBoneWeights[2]; + boneTransform += ubo.bones[inBoneIDs[3]] * inBoneWeights[3]; + outNormal = inNormal; outColor = inColor; outUV = inUV; - gl_Position = ubo.projection * ubo.model * boneTransform * vec4(inPos.xyz, 1.0); + gl_Position = ubo.projection * ubo.view * ubo.model * boneTransform * vec4(inPos.xyz, 1.0); - vec4 pos = ubo.model * vec4(inPos, 1.0); + vec4 pos = ubo.model * vec4(inPos, 1.0); outNormal = mat3(inverse(transpose(ubo.model))) * inNormal; - outLightVec = ubo.lightPos.xyz - pos.xyz; - outViewVec = ubo.viewPos.xyz - pos.xyz; + outLightVec = ubo.lightPos.xyz - pos.xyz; + outViewVec = ubo.viewPos.xyz - pos.xyz; } \ No newline at end of file diff --git a/data/shaders/skeletalanimation/mesh.vert.spv b/data/shaders/skeletalanimation/mesh.vert.spv index d06ec8571e07e0943df96cf37800e14eecaf90b6..76d380cf0b4b5197e83df1066cbb41498db4b00e 100644 GIT binary patch delta 1673 zcmZ9MOKVe66opT6bCW1mES;!>qLw;wBu)frr6UCe6BPe|#x~d(!CG;kH?_Vs*7RE6 zkNSSwYBbg-ojMQ&e~7=J;QErg>!l|w&faUUv(Mh=oSVt+nYC?RvMb|ULcgs0UTfRG z=%jP*wa}=IOmzGz1y^fw)SzDtzU{$tT z7UQU(OPCdDIzQrmhey3XtEr+>U~F-z=Fa%6#BYS9R5g=rcA5?6Qack~J@5ZY1nU%R zm*}{_5p0q_pqYdTfp}W;X~DV5=2h}9%Ca)?FUhB5uw4Fa%>@CCt-m9iLH>Q3IU2=# zn*s`WBTy{~r!-Rx32i|`wk1UWQSif`nGHVMkJbI`wsg>^LtH605I8`(>QTb1=86D6 zE)D*Oa7?HOra2*dv0$1}+34WW(A6n{)5$9jCvzs^GzIhI*@)x_O?WQi=q#t+=ZNS+zU6;ME*c;;DcSYBBQ#RZZ9X8i?OQ5JV z0N+1oC9;h;;g;)K6~%8XC@2lo9nvLsbbC;k6+$=Z*(1B z5*TCNfp()l8}9PD2T~YEs-xvo>{)&V_B1$A86FucRVAbPk)8?b-rr3DN@X;5`NWQ6 zpCr)dr_|NcWBYaZaQSGYwZm5GXEDy8%ta7%8?(n{wc2F(BmHMhfVCQE?KYVxqwI{e z+u>qnBAqjZaL_;Kr8+JDmsi`0dxU@hcwhr|mi+=i-O-PI4W{zU!^pm2x$KqL_u0!p zG4A{WxR&xCW7qYZe>wbpY;TMbe!$Q)mCzk%#{p479q52eIFR4$tNeJUoZpwNZ6kXg z^E_AzrWlOu8aM}}D@NVbK>&t`(G4#GXz{%I0Mdt?F>S;;^gmRzZupGJ+%oj;99-~4}fd$He8yP()i+A`*;sow)?V=a(x2wjtY z2;_6i>5mYc9=9LIKThbnf{m}4C)S~0Etlvi+!aqIdX~@=iA>Y#(zINj7F>CxC-Xdy zbe^dkLWz6noq7RuJKaQGJN+eG&8jgq;q+JVCQunq}fZDO4nb1U*sX09TxX8P?2Ty|mT))~Zj` z>J#`8`WU@wt$x3I&&I2Vwdd^pKmWbYemLC0f$_()>@ofhW}8{Lj%EYcS#~HJF7~;F z<%Nk}e{*8$!laDD*ahofudK3bn^UV@nAn5aQS6o3MXDSwbj)nG+ws;`hf0QF$+6Cz&St*N9+>&x zZRJ0+?fcu6?bg8uQ@5?oxV`A%_LVpo`7ruGh$5y)x zIz)ss*jw9;dfr{lyZ!tZ%p$J1%d<|eRTN=dXW$y*&soru8=dY>(|W|5O{={R6_~Sv zw_rJ|`9^^`JFrzs5z6LLkIm1e9doxo^Vs&!WxezKhCN=O4`V#U?3sdB`q}rYpSFHA zBw~p@>gU~6KW+W)A>k+Xz^}|}5KP`*NbsDU*!>D-Y_Wfkx%7^VXZ_CbG~x<-tTYST zUPZsW<4iiUZ!Y7BMLg#v-#U%wtg5zi(l&R`osqWw$M|(0Xwv+y5gm&!1#BmpIopcd>Jv8>{>xWHsX-!4|WRr}%ZgV%j6z=6ete@k}wk z_dUyQZt~1W+a8M@$9|4|6p8z_k0Z`V{}b$TBi;*1_YU)WiQW97zL(LBCGLIN(eJ2l z6fDc`T^+&8SsBZ_USl_on7-O)6Q-}Zy^gr#zrk*9)*k0?B`oYoZ1a(Sncett-<4!X zuG-THv)41|p6L_0&!W4cwmQ1;we|Ns1>bzXOt$y0pqsDv2Y)S{N50=5~8#JBW2EbYSy^F7UgIm?rX^LNJKcPin(Cco#g^%bAyX5X)v zeEabV;!Ky|JNvPOvF&506J~FMH=Z!-s*|C8coorKzUQNecUqfg=Ixx{M9kayn@2hG z5)aPXiQ^jx&IG#npTyDU9poG$9)9nl8{4-Me&^A}!|y$GeZ}RN`xIiHQQw7xvF&3Q z6ISiR`w6oT;d?1z&N+JX0lG1bp^uzDsKdKIM9fK!b@;YFLi~TRNA^%#UetLN{n0vW zVB$+m(pi3t)R0(#e*#cTU|CDazgEG^dP@9y!sWUm&K!CT5wFIXui(`&a8 zuOZ^qIG5{ z(|2ITlxI%M>|&AA59sFPHz@9Cpo_;Hx6s8DSKJZ&CRjD6b!;)k75vC)1MC(e&z#oS K#r}hN3Hcvk0Jqox literal 2760 zcmY+EYj;ys5QdKpttbj2a#69SR7FK=#eygTZN0Q=BrVvA*BIJEh_*>rlA<4R`Q4@d z0)Gp?$}g_v^PID%J?yN>%)I;Ev*)st+Sv4?S@sB@gV~Q+xsGOI_*r%+n<(^B<7Q)K zINF?M&g6n|~8NtF|YjhpQZ`rg{@Q^^D@Io7$|-^{nr!8QM_Zs+c3 zrB8Bo%i#WKFVa*ZR)e1|_>pbuj_y6mZfSDv%S)pPoun@1v+*#5aPzIV&J zj|8ulus9z@)*N+vNA%wMUB(lOc=lbs`5MojSAF}f zZ=UYkYkkij<6Aw&uKU_2uqM!TR?%R|Jo#{oRhJ<>lL(d#5}8iHesGMw^tFD z{MXRtX5F#>2DbOR|1R2i5&ym9M{fGQ4LSDp3fevW$n`3=D{ArW7+>G>O(gi{w}P0H z_pc_~`-5Np-|px8HG7`F$UF9&eRqld3o?%OtbO-?$vIrXS3iOHZvKF!e>h>jodqyw zcM@^l&NR-QO89T-+_U(e6~D^OzEv^#_Txpw8Lq;2)>8>X?O|sUW^aNwoiOWKAw&D{ z65@IJ?$;6Tv^Mw5+qu4un78vbk8;K(9-KE5$C(Fb23!1Z;&|pQJ?|vUdgAO{!kkyscmdm(#_)`szsSeCFCyk7$2xqYmk{5%wb~1Pc~R$O zYdestroyTexture(textures.colorMap); + textureLoader->destroyTexture(textures.floor); vkTools::destroyUniformData(device, &uniformData.vsScene); + vkTools::destroyUniformData(device, &uniformData.floor); // Destroy and free mesh resources + vkMeshLoader::freeMeshBufferResources(device, &meshes.floor); vkMeshLoader::freeMeshBufferResources(device, &skinnedMesh->meshBuffer); delete(skinnedMesh->meshLoader); delete(skinnedMesh); @@ -951,15 +956,16 @@ public: viewMatrix = glm::rotate(viewMatrix, glm::radians(90.0f), glm::vec3(1.0f, 0.0f, 0.0f)); viewMatrix = glm::scale(viewMatrix, glm::vec3(0.025f)); - uboVS.model = viewMatrix * glm::translate(glm::mat4(), glm::vec3(cameraPos.x, -cameraPos.z, cameraPos.y) * 100.0f); - uboVS.model = glm::rotate(uboVS.model, glm::radians(rotation.x), glm::vec3(1.0f, 0.0f, 0.0f)); - uboVS.model = glm::rotate(uboVS.model, glm::radians(rotation.z), glm::vec3(0.0f, 1.0f, 0.0f)); - uboVS.model = glm::rotate(uboVS.model, glm::radians(-rotation.y), glm::vec3(0.0f, 0.0f, 1.0f)); + uboVS.view = viewMatrix * glm::translate(glm::mat4(), glm::vec3(cameraPos.x, -cameraPos.z, cameraPos.y) * 100.0f); + uboVS.view = glm::rotate(uboVS.view, glm::radians(rotation.x), glm::vec3(1.0f, 0.0f, 0.0f)); + uboVS.view = glm::rotate(uboVS.view, glm::radians(rotation.z), glm::vec3(0.0f, 1.0f, 0.0f)); + uboVS.view = glm::rotate(uboVS.view, glm::radians(-rotation.y), glm::vec3(0.0f, 0.0f, 1.0f)); uboVS.viewPos = glm::vec4(0.0f, 0.0f, -zoom, 0.0f); uboFloor.projection = uboVS.projection; - uboFloor.model = viewMatrix * glm::translate(glm::mat4(), glm::vec3(cameraPos.x, -cameraPos.z, cameraPos.y) * 100.0f); + uboFloor.view = viewMatrix; + uboFloor.model = glm::translate(glm::mat4(), glm::vec3(cameraPos.x, -cameraPos.z, cameraPos.y) * 100.0f); uboFloor.model = glm::rotate(uboFloor.model, glm::radians(rotation.x), glm::vec3(1.0f, 0.0f, 0.0f)); uboFloor.model = glm::rotate(uboFloor.model, glm::radians(rotation.z), glm::vec3(0.0f, 1.0f, 0.0f)); uboFloor.model = glm::rotate(uboFloor.model, glm::radians(-rotation.y), glm::vec3(0.0f, 0.0f, 1.0f));