diff --git a/assets/models/cornell_box.mtl b/assets/models/cornell_box.mtl deleted file mode 100644 index d3a1c7a..0000000 --- a/assets/models/cornell_box.mtl +++ /dev/null @@ -1,24 +0,0 @@ -newmtl white -Ka 0 0 0 -Kd 1 1 1 -Ks 0 0 0 - -newmtl red -Ka 0 0 0 -Kd 1 0 0 -Ks 0 0 0 - -newmtl green -Ka 0 0 0 -Kd 0 1 0 -Ks 0 0 0 - -newmtl blue -Ka 0 0 0 -Kd 0 0 1 -Ks 0 0 0 - -newmtl light -Ka 20 20 20 -Kd 1 1 1 -Ks 0 0 0 diff --git a/assets/models/cornell_box.obj b/assets/models/cornell_box.obj deleted file mode 100644 index 43e021f..0000000 --- a/assets/models/cornell_box.obj +++ /dev/null @@ -1,145 +0,0 @@ -# cornell_box.obj and cornell_box.mtl are grabbed from Intel's embree project. -# original cornell box data - # comment - -# empty line including some space - - -mtllib cornell_box.mtl - -o floor -usemtl white -v 552.8 0.0 0.0 -v 0.0 0.0 0.0 -v 0.0 0.0 559.2 -v 549.6 0.0 559.2 - -v 130.0 0.0 65.0 -v 82.0 0.0 225.0 -v 240.0 0.0 272.0 -v 290.0 0.0 114.0 - -v 423.0 0.0 247.0 -v 265.0 0.0 296.0 -v 314.0 0.0 456.0 -v 472.0 0.0 406.0 - -f 1 2 3 4 -f 8 7 6 5 -f 12 11 10 9 - -o light -usemtl light -v 343.0 548.0 227.0 -v 343.0 548.0 332.0 -v 213.0 548.0 332.0 -v 213.0 548.0 227.0 -f -4 -3 -2 -1 - -o ceiling -usemtl white -v 556.0 548.8 0.0 -v 556.0 548.8 559.2 -v 0.0 548.8 559.2 -v 0.0 548.8 0.0 -f -4 -3 -2 -1 - -o back_wall -usemtl white -v 549.6 0.0 559.2 -v 0.0 0.0 559.2 -v 0.0 548.8 559.2 -v 556.0 548.8 559.2 -f -4 -3 -2 -1 - -o front_wall -usemtl blue -v 549.6 0.0 0 -v 0.0 0.0 0 -v 0.0 548.8 0 -v 556.0 548.8 0 -#f -1 -2 -3 -4 - -o green_wall -usemtl green -v 0.0 0.0 559.2 -v 0.0 0.0 0.0 -v 0.0 548.8 0.0 -v 0.0 548.8 559.2 -f -4 -3 -2 -1 - -o red_wall -usemtl red -v 552.8 0.0 0.0 -v 549.6 0.0 559.2 -v 556.0 548.8 559.2 -v 556.0 548.8 0.0 -f -4 -3 -2 -1 - -o short_block -usemtl white - -v 130.0 165.0 65.0 -v 82.0 165.0 225.0 -v 240.0 165.0 272.0 -v 290.0 165.0 114.0 -f -4 -3 -2 -1 - -v 290.0 0.0 114.0 -v 290.0 165.0 114.0 -v 240.0 165.0 272.0 -v 240.0 0.0 272.0 -f -4 -3 -2 -1 - -v 130.0 0.0 65.0 -v 130.0 165.0 65.0 -v 290.0 165.0 114.0 -v 290.0 0.0 114.0 -f -4 -3 -2 -1 - -v 82.0 0.0 225.0 -v 82.0 165.0 225.0 -v 130.0 165.0 65.0 -v 130.0 0.0 65.0 -f -4 -3 -2 -1 - -v 240.0 0.0 272.0 -v 240.0 165.0 272.0 -v 82.0 165.0 225.0 -v 82.0 0.0 225.0 -f -4 -3 -2 -1 - -o tall_block -usemtl white - -v 423.0 330.0 247.0 -v 265.0 330.0 296.0 -v 314.0 330.0 456.0 -v 472.0 330.0 406.0 -f -4 -3 -2 -1 - -usemtl white -v 423.0 0.0 247.0 -v 423.0 330.0 247.0 -v 472.0 330.0 406.0 -v 472.0 0.0 406.0 -f -4 -3 -2 -1 - -v 472.0 0.0 406.0 -v 472.0 330.0 406.0 -v 314.0 330.0 456.0 -v 314.0 0.0 456.0 -f -4 -3 -2 -1 - -v 314.0 0.0 456.0 -v 314.0 330.0 456.0 -v 265.0 330.0 296.0 -v 265.0 0.0 296.0 -f -4 -3 -2 -1 - -v 265.0 0.0 296.0 -v 265.0 330.0 296.0 -v 423.0 330.0 247.0 -v 423.0 0.0 247.0 -f -4 -3 -2 -1 - diff --git a/assets/models/tescoPiwo.mtl b/assets/models/tescoPiwo.mtl new file mode 100644 index 0000000..1c58cf2 --- /dev/null +++ b/assets/models/tescoPiwo.mtl @@ -0,0 +1,13 @@ +# Blender 4.2.0 MTL File: 'tescoPiwo.blend' +# www.blender.org + +newmtl Material.001 +Ns 360.000000 +Ka 0.500000 0.500000 0.500000 +Ks 0.500000 0.500000 0.500000 +Ke 0.000000 0.000000 0.000000 +Ni 1.500000 +d 1.000000 +illum 3 +map_Kd tescoPiwoTexture.png +map_Bump -bm 1.000000 /home/przmk/Downloads/Downloads/tescoPiwoNormal.png diff --git a/assets/models/tescoPiwo.obj b/assets/models/tescoPiwo.obj new file mode 100644 index 0000000..92a9452 --- /dev/null +++ b/assets/models/tescoPiwo.obj @@ -0,0 +1,1751 @@ +# Blender 4.2.0 +# www.blender.org +mtllib tescoPiwo.mtl +o Piwo +v -0.000000 0.044375 0.230400 +v -0.000000 1.086295 0.230400 +v -0.044949 0.044375 0.225973 +v -0.044949 1.086295 0.225973 +v -0.088170 0.044375 0.212862 +v -0.088170 1.086295 0.212862 +v -0.128003 0.044375 0.191571 +v -0.128003 1.086295 0.191571 +v -0.162917 0.044375 0.162917 +v -0.162917 1.086295 0.162917 +v -0.191571 0.044375 0.128003 +v -0.191571 1.086295 0.128003 +v -0.212862 0.044375 0.088170 +v -0.212862 1.086295 0.088170 +v -0.225973 0.044375 0.044949 +v -0.225973 1.086295 0.044949 +v -0.230400 0.044375 -0.000000 +v -0.230400 1.086295 -0.000000 +v -0.225973 0.044375 -0.044949 +v -0.225973 1.086295 -0.044949 +v -0.212862 0.044375 -0.088170 +v -0.212862 1.086295 -0.088170 +v -0.191571 0.044375 -0.128003 +v -0.191571 1.086295 -0.128003 +v -0.162917 0.044375 -0.162917 +v -0.162917 1.086295 -0.162917 +v -0.128003 0.044375 -0.191571 +v -0.128003 1.086295 -0.191571 +v -0.088170 0.044375 -0.212862 +v -0.088170 1.086295 -0.212862 +v -0.044949 0.044375 -0.225973 +v -0.044949 1.086295 -0.225973 +v 0.000000 0.044375 -0.230400 +v 0.000000 1.086295 -0.230400 +v 0.044949 0.044375 -0.225973 +v 0.044949 1.086295 -0.225973 +v 0.088170 0.044375 -0.212862 +v 0.088170 1.086295 -0.212862 +v 0.128003 0.044375 -0.191571 +v 0.128003 1.086295 -0.191571 +v 0.162917 0.044375 -0.162917 +v 0.162917 1.086295 -0.162917 +v 0.191571 0.044375 -0.128003 +v 0.191571 1.086295 -0.128003 +v 0.212862 0.044375 -0.088170 +v 0.212862 1.086295 -0.088170 +v 0.225973 0.044375 -0.044949 +v 0.225973 1.086295 -0.044949 +v 0.230400 0.044375 -0.000000 +v 0.230400 1.086295 -0.000000 +v 0.225973 0.044375 0.044949 +v 0.225973 1.086295 0.044949 +v 0.212862 0.044375 0.088170 +v 0.212862 1.086295 0.088170 +v 0.191571 0.044375 0.128003 +v 0.191571 1.086295 0.128003 +v 0.162917 0.044375 0.162917 +v 0.162917 1.086295 0.162917 +v 0.128003 0.044375 0.191571 +v 0.128003 1.086295 0.191571 +v 0.088170 0.044375 0.212862 +v 0.088170 1.086295 0.212862 +v 0.044949 0.044375 0.225973 +v 0.044949 1.086295 0.225973 +v -0.038174 1.185086 0.191913 +v -0.000000 1.185086 0.195673 +v -0.074881 1.185086 0.180778 +v -0.108710 1.185086 0.162696 +v -0.138361 1.185086 0.138361 +v -0.162696 1.185086 0.108710 +v -0.180778 1.185086 0.074881 +v -0.191913 1.185086 0.038174 +v -0.195673 1.185086 -0.000000 +v -0.191913 1.185086 -0.038174 +v -0.180778 1.185086 -0.074881 +v -0.162696 1.185086 -0.108710 +v -0.138361 1.185086 -0.138361 +v -0.108710 1.185086 -0.162696 +v -0.074881 1.185086 -0.180778 +v -0.038174 1.185086 -0.191913 +v 0.000000 1.185086 -0.195673 +v 0.038174 1.185086 -0.191913 +v 0.074881 1.185086 -0.180778 +v 0.108710 1.185086 -0.162696 +v 0.138361 1.185086 -0.138361 +v 0.162696 1.185086 -0.108710 +v 0.180778 1.185086 -0.074881 +v 0.191913 1.185086 -0.038174 +v 0.195673 1.185086 -0.000000 +v 0.191913 1.185086 0.038174 +v 0.180778 1.185086 0.074881 +v 0.162696 1.185086 0.108710 +v 0.138361 1.185086 0.138361 +v 0.108710 1.185086 0.162696 +v 0.074881 1.185086 0.180778 +v 0.038174 1.185086 0.191913 +v -0.037345 1.211296 0.187747 +v -0.000000 1.211296 0.191425 +v -0.073255 1.211296 0.176854 +v -0.106350 1.211296 0.159164 +v -0.135358 1.211296 0.135358 +v -0.159164 1.211296 0.106350 +v -0.176854 1.211296 0.073255 +v -0.187747 1.211296 0.037345 +v -0.191425 1.211296 -0.000000 +v -0.187747 1.211296 -0.037345 +v -0.176854 1.211296 -0.073255 +v -0.159164 1.211296 -0.106350 +v -0.135358 1.211296 -0.135358 +v -0.106350 1.211296 -0.159164 +v -0.073255 1.211296 -0.176854 +v -0.037345 1.211296 -0.187747 +v 0.000000 1.211296 -0.191425 +v 0.037345 1.211296 -0.187747 +v 0.073255 1.211296 -0.176854 +v 0.106350 1.211296 -0.159164 +v 0.135358 1.211296 -0.135358 +v 0.159164 1.211296 -0.106350 +v 0.176854 1.211296 -0.073255 +v 0.187747 1.211296 -0.037345 +v 0.191425 1.211296 -0.000000 +v 0.187747 1.211296 0.037345 +v 0.176854 1.211296 0.073255 +v 0.159164 1.211296 0.106350 +v 0.135358 1.211296 0.135358 +v 0.106350 1.211296 0.159164 +v 0.073255 1.211296 0.176854 +v 0.037345 1.211296 0.187747 +v 0.185004 1.204968 0.076631 +v 0.185004 1.191414 0.076631 +v 0.166499 1.191414 0.111251 +v 0.166499 1.204968 0.111251 +v -0.111251 1.204968 -0.166499 +v -0.111251 1.191414 -0.166499 +v -0.076631 1.191414 -0.185004 +v -0.076631 1.204968 -0.185004 +v -0.000000 1.204968 0.200246 +v -0.000000 1.191414 0.200246 +v -0.039066 1.191414 0.196399 +v -0.039066 1.204968 0.196399 +v 0.141596 1.191414 0.141596 +v 0.141596 1.204968 0.141596 +v -0.039066 1.191414 -0.196399 +v -0.039066 1.204968 -0.196399 +v -0.076631 1.191414 0.185004 +v -0.076631 1.204968 0.185004 +v 0.111251 1.191414 0.166499 +v 0.111251 1.204968 0.166499 +v 0.000000 1.191414 -0.200246 +v 0.000000 1.204968 -0.200246 +v -0.111251 1.191414 0.166499 +v -0.111251 1.204968 0.166499 +v 0.076631 1.191414 0.185004 +v 0.076631 1.204968 0.185004 +v 0.039066 1.191414 -0.196399 +v 0.039066 1.204968 -0.196399 +v -0.141596 1.191414 0.141596 +v -0.141596 1.204968 0.141596 +v 0.039066 1.191414 0.196399 +v 0.039066 1.204968 0.196399 +v 0.076631 1.191414 -0.185004 +v 0.076631 1.204968 -0.185004 +v -0.166499 1.191414 0.111251 +v -0.166499 1.204968 0.111251 +v 0.111251 1.191414 -0.166499 +v 0.111251 1.204968 -0.166499 +v -0.185004 1.191414 0.076631 +v -0.185004 1.204968 0.076631 +v 0.141596 1.191414 -0.141596 +v 0.141596 1.204968 -0.141596 +v -0.196399 1.191414 0.039066 +v -0.196399 1.204968 0.039066 +v 0.166499 1.191414 -0.111251 +v 0.166499 1.204968 -0.111251 +v -0.200246 1.191414 -0.000000 +v -0.200246 1.204968 -0.000000 +v 0.185004 1.191414 -0.076631 +v 0.185004 1.204968 -0.076631 +v -0.196399 1.191414 -0.039066 +v -0.196399 1.204968 -0.039066 +v 0.196399 1.191414 -0.039066 +v 0.196399 1.204968 -0.039066 +v -0.185004 1.191414 -0.076631 +v -0.185004 1.204968 -0.076631 +v 0.200246 1.191414 -0.000000 +v 0.200246 1.204968 -0.000000 +v -0.166499 1.191414 -0.111251 +v -0.166499 1.204968 -0.111251 +v 0.196399 1.191414 0.039066 +v 0.196399 1.204968 0.039066 +v -0.141596 1.191414 -0.141596 +v -0.141596 1.204968 -0.141596 +v -0.038174 1.211296 0.191913 +v -0.000000 1.211296 0.195673 +v -0.074881 1.211296 0.180778 +v -0.108710 1.211296 0.162696 +v -0.138361 1.211296 0.138361 +v -0.162696 1.211296 0.108710 +v -0.180778 1.211296 0.074881 +v -0.191913 1.211296 0.038174 +v -0.195673 1.211296 -0.000000 +v -0.191913 1.211296 -0.038174 +v -0.180778 1.211296 -0.074881 +v -0.162696 1.211296 -0.108710 +v -0.138361 1.211296 -0.138361 +v -0.108710 1.211296 -0.162696 +v -0.074881 1.211296 -0.180778 +v -0.038174 1.211296 -0.191913 +v 0.000000 1.211296 -0.195673 +v 0.038174 1.211296 -0.191913 +v 0.074881 1.211296 -0.180778 +v 0.108710 1.211296 -0.162696 +v 0.138361 1.211296 -0.138361 +v 0.162696 1.211296 -0.108710 +v 0.180778 1.211296 -0.074881 +v 0.191913 1.211296 -0.038174 +v 0.195673 1.211296 -0.000000 +v 0.191913 1.211296 0.038174 +v 0.180778 1.211296 0.074881 +v 0.162696 1.211296 0.108710 +v 0.138361 1.211296 0.138361 +v 0.108710 1.211296 0.162696 +v 0.074881 1.211296 0.180778 +v 0.038174 1.211296 0.191913 +v -0.037345 1.182776 0.187747 +v 0.000000 1.182776 0.191425 +v -0.073255 1.182776 0.176854 +v -0.106350 1.182776 0.159164 +v -0.135358 1.182776 0.135358 +v -0.159164 1.182776 0.106350 +v -0.176854 1.182776 0.073255 +v -0.187747 1.182776 0.037345 +v -0.191425 1.182776 -0.000000 +v -0.187747 1.182776 -0.037345 +v -0.176854 1.182776 -0.073255 +v -0.159164 1.182776 -0.106350 +v -0.135358 1.182776 -0.135358 +v -0.106350 1.182776 -0.159164 +v -0.073255 1.182776 -0.176854 +v -0.037345 1.182776 -0.187747 +v 0.000000 1.182776 -0.191425 +v 0.037345 1.182776 -0.187747 +v 0.073255 1.182776 -0.176854 +v 0.106350 1.182776 -0.159164 +v 0.135358 1.182776 -0.135358 +v 0.159164 1.182776 -0.106350 +v 0.176854 1.182776 -0.073255 +v 0.187747 1.182776 -0.037345 +v 0.191425 1.182776 -0.000000 +v 0.187747 1.182776 0.037345 +v 0.176854 1.182776 0.073255 +v 0.159164 1.182776 0.106350 +v 0.135358 1.182776 0.135358 +v 0.106350 1.182776 0.159164 +v 0.073255 1.182776 0.176854 +v 0.037345 1.182776 0.187747 +v -0.000000 0.002513 0.202216 +v -0.039450 0.002513 0.198330 +v -0.077385 0.002513 0.186823 +v -0.112345 0.002513 0.168136 +v -0.142988 0.002513 0.142988 +v -0.168136 0.002513 0.112345 +v -0.186823 0.002513 0.077385 +v -0.198330 0.002513 0.039450 +v -0.202216 0.002513 -0.000000 +v -0.198330 0.002513 -0.039450 +v -0.186823 0.002513 -0.077385 +v -0.168136 0.002513 -0.112345 +v -0.142988 0.002513 -0.142988 +v -0.112345 0.002513 -0.168136 +v -0.077385 0.002513 -0.186823 +v -0.039450 0.002513 -0.198330 +v 0.000000 0.002513 -0.202216 +v 0.039450 0.002513 -0.198330 +v 0.077385 0.002513 -0.186823 +v 0.112345 0.002513 -0.168136 +v 0.142988 0.002513 -0.142988 +v 0.168136 0.002513 -0.112345 +v 0.186823 0.002513 -0.077385 +v 0.198330 0.002513 -0.039450 +v 0.202216 0.002513 -0.000000 +v 0.198330 0.002513 0.039450 +v 0.186823 0.002513 0.077385 +v 0.168136 0.002513 0.112345 +v 0.142988 0.002513 0.142988 +v 0.112345 0.002513 0.168136 +v 0.077385 0.002513 0.186823 +v 0.039450 0.002513 0.198330 +v -0.000000 -0.009869 0.197613 +v -0.038552 -0.009869 0.193816 +v -0.075623 -0.009869 0.182570 +v -0.109788 -0.009869 0.164309 +v -0.139733 -0.009869 0.139733 +v -0.164309 -0.009869 0.109788 +v -0.182570 -0.009869 0.075623 +v -0.193816 -0.009869 0.038552 +v -0.197613 -0.009869 -0.000000 +v -0.193816 -0.009869 -0.038552 +v -0.182570 -0.009869 -0.075623 +v -0.164309 -0.009869 -0.109788 +v -0.139733 -0.009869 -0.139733 +v -0.109788 -0.009869 -0.164309 +v -0.075623 -0.009869 -0.182570 +v -0.038552 -0.009869 -0.193816 +v 0.000000 -0.009869 -0.197613 +v 0.038552 -0.009869 -0.193816 +v 0.075623 -0.009869 -0.182570 +v 0.109788 -0.009869 -0.164309 +v 0.139733 -0.009869 -0.139733 +v 0.164309 -0.009869 -0.109788 +v 0.182570 -0.009869 -0.075623 +v 0.193816 -0.009869 -0.038552 +v 0.197613 -0.009869 -0.000000 +v 0.193816 -0.009869 0.038552 +v 0.182570 -0.009869 0.075623 +v 0.164309 -0.009869 0.109788 +v 0.139733 -0.009869 0.139733 +v 0.109788 -0.009869 0.164309 +v 0.075623 -0.009869 0.182570 +v 0.038552 -0.009869 0.193816 +v 0.188661 -0.006239 -0.078146 +v 0.188661 -0.001118 -0.078146 +v 0.169791 -0.001118 -0.113451 +v 0.169791 -0.006239 -0.113451 +v -0.200282 -0.006239 -0.039839 +v -0.200282 -0.001118 -0.039839 +v -0.204206 -0.001118 -0.000000 +v -0.204206 -0.006239 -0.000000 +v 0.200282 -0.006239 -0.039839 +v 0.200282 -0.001118 -0.039839 +v -0.188661 -0.006239 -0.078146 +v -0.188661 -0.001118 -0.078146 +v 0.204206 -0.006239 -0.000000 +v 0.204206 -0.001118 -0.000000 +v -0.169791 -0.006239 -0.113451 +v -0.169791 -0.001118 -0.113451 +v 0.200282 -0.006239 0.039839 +v 0.200282 -0.001118 0.039839 +v -0.144395 -0.006239 -0.144395 +v -0.144395 -0.001118 -0.144395 +v 0.188661 -0.006239 0.078146 +v 0.188661 -0.001118 0.078146 +v -0.113451 -0.006239 -0.169791 +v -0.113451 -0.001118 -0.169791 +v 0.169791 -0.006239 0.113451 +v 0.169791 -0.001118 0.113451 +v -0.078146 -0.006239 -0.188661 +v -0.078146 -0.001118 -0.188661 +v -0.039839 -0.006239 0.200282 +v -0.039839 -0.001118 0.200282 +v -0.000000 -0.001118 0.204206 +v -0.000000 -0.006239 0.204206 +v 0.144395 -0.006239 0.144395 +v 0.144395 -0.001118 0.144395 +v -0.039839 -0.006239 -0.200282 +v -0.039839 -0.001118 -0.200282 +v -0.078146 -0.006239 0.188661 +v -0.078146 -0.001118 0.188661 +v 0.113451 -0.006239 0.169791 +v 0.113451 -0.001118 0.169791 +v 0.000000 -0.006239 -0.204206 +v 0.000000 -0.001118 -0.204206 +v -0.113451 -0.006239 0.169791 +v -0.113451 -0.001118 0.169791 +v 0.078146 -0.006239 0.188661 +v 0.078146 -0.001118 0.188661 +v 0.039839 -0.006239 -0.200282 +v 0.039839 -0.001118 -0.200282 +v -0.144395 -0.006239 0.144395 +v -0.144395 -0.001118 0.144395 +v 0.039839 -0.006239 0.200282 +v 0.039839 -0.001118 0.200282 +v 0.078146 -0.006239 -0.188661 +v 0.078146 -0.001118 -0.188661 +v -0.169791 -0.006239 0.113451 +v -0.169791 -0.001118 0.113451 +v 0.113451 -0.006239 -0.169791 +v 0.113451 -0.001118 -0.169791 +v -0.188661 -0.006239 0.078146 +v -0.188661 -0.001118 0.078146 +v 0.144395 -0.006239 -0.144395 +v 0.144395 -0.001118 -0.144395 +v -0.200282 -0.006239 0.039839 +v -0.200282 -0.001118 0.039839 +v -0.000000 -0.009869 0.202216 +v -0.039450 -0.009869 0.198330 +v -0.077385 -0.009869 0.186823 +v -0.112345 -0.009869 0.168136 +v -0.142988 -0.009869 0.142988 +v -0.168136 -0.009869 0.112345 +v -0.186823 -0.009869 0.077385 +v -0.198330 -0.009869 0.039450 +v -0.202216 -0.009869 -0.000000 +v -0.198330 -0.009869 -0.039450 +v -0.186823 -0.009869 -0.077385 +v -0.168136 -0.009869 -0.112345 +v -0.142988 -0.009869 -0.142988 +v -0.112345 -0.009869 -0.168136 +v -0.077385 -0.009869 -0.186823 +v -0.039450 -0.009869 -0.198330 +v 0.000000 -0.009869 -0.202216 +v 0.039450 -0.009869 -0.198330 +v 0.077385 -0.009869 -0.186823 +v 0.112345 -0.009869 -0.168136 +v 0.142988 -0.009869 -0.142988 +v 0.168136 -0.009869 -0.112345 +v 0.186823 -0.009869 -0.077385 +v 0.198330 -0.009869 -0.039450 +v 0.202216 -0.009869 -0.000000 +v 0.198330 -0.009869 0.039450 +v 0.186823 -0.009869 0.077385 +v 0.168136 -0.009869 0.112345 +v 0.142988 -0.009869 0.142988 +v 0.112345 -0.009869 0.168136 +v 0.077385 -0.009869 0.186823 +v 0.039450 -0.009869 0.198330 +v -0.000000 0.012240 0.183178 +v -0.035736 0.012240 0.179658 +v -0.070099 0.012240 0.169234 +v -0.101768 0.012240 0.152307 +v -0.129526 0.012240 0.129526 +v -0.152307 0.012240 0.101768 +v -0.169234 0.012240 0.070099 +v -0.179658 0.012240 0.035736 +v -0.183178 0.012240 -0.000000 +v -0.179658 0.012240 -0.035736 +v -0.169234 0.012240 -0.070099 +v -0.152307 0.012240 -0.101768 +v -0.129526 0.012240 -0.129526 +v -0.101768 0.012240 -0.152307 +v -0.070099 0.012240 -0.169234 +v -0.035736 0.012240 -0.179658 +v 0.000000 0.012240 -0.183178 +v 0.035736 0.012240 -0.179658 +v 0.070099 0.012240 -0.169234 +v 0.101768 0.012240 -0.152307 +v 0.129526 0.012240 -0.129526 +v 0.152307 0.012240 -0.101768 +v 0.169234 0.012240 -0.070099 +v 0.179658 0.012240 -0.035736 +v 0.183178 0.012240 -0.000000 +v 0.179658 0.012240 0.035736 +v 0.169234 0.012240 0.070099 +v 0.152307 0.012240 0.101768 +v 0.129526 0.012240 0.129526 +v 0.101768 0.012240 0.152307 +v 0.070099 0.012240 0.169234 +v 0.035736 0.012240 0.179658 +v -0.037345 1.194055 0.187747 +v -0.000000 1.194055 0.191425 +v -0.073255 1.194055 0.176854 +v -0.106350 1.194055 0.159164 +v -0.135358 1.194055 0.135358 +v -0.159164 1.194055 0.106350 +v -0.176854 1.194055 0.073255 +v -0.187747 1.194055 0.037345 +v -0.191425 1.194055 -0.000000 +v -0.187747 1.194055 -0.037345 +v -0.176854 1.194055 -0.073255 +v -0.159164 1.194055 -0.106350 +v -0.135358 1.194055 -0.135358 +v -0.106350 1.194055 -0.159164 +v -0.073255 1.194055 -0.176854 +v -0.037345 1.194055 -0.187747 +v 0.000000 1.194055 -0.191425 +v 0.037345 1.194055 -0.187747 +v 0.073255 1.194055 -0.176854 +v 0.106350 1.194055 -0.159164 +v 0.135358 1.194055 -0.135358 +v 0.159164 1.194055 -0.106350 +v 0.176854 1.194055 -0.073255 +v 0.187747 1.194055 -0.037345 +v 0.191425 1.194055 -0.000000 +v 0.187747 1.194055 0.037345 +v 0.176854 1.194055 0.073255 +v 0.159164 1.194055 0.106350 +v 0.135358 1.194055 0.135358 +v 0.106350 1.194055 0.159164 +v 0.073255 1.194055 0.176854 +v 0.037345 1.194055 0.187747 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 0.1665 0.9860 +vn -0.1924 0.1665 0.9671 +vn -0.1951 -0.0000 0.9808 +vn -0.3773 0.1665 0.9110 +vn -0.3827 -0.0000 0.9239 +vn -0.5478 0.1665 0.8199 +vn -0.5556 -0.0000 0.8315 +vn -0.6972 0.1665 0.6972 +vn -0.7071 -0.0000 0.7071 +vn -0.8199 0.1665 0.5478 +vn -0.8315 -0.0000 0.5556 +vn -0.9110 0.1665 0.3773 +vn -0.9239 -0.0000 0.3827 +vn -0.9671 0.1665 0.1924 +vn -0.9808 -0.0000 0.1951 +vn -0.9860 0.1665 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.9671 0.1665 -0.1924 +vn -0.9808 -0.0000 -0.1951 +vn -0.9110 0.1665 -0.3773 +vn -0.9239 -0.0000 -0.3827 +vn -0.8199 0.1665 -0.5478 +vn -0.8315 -0.0000 -0.5556 +vn -0.6972 0.1665 -0.6972 +vn -0.7071 -0.0000 -0.7071 +vn -0.5478 0.1665 -0.8199 +vn -0.5556 -0.0000 -0.8315 +vn -0.3773 0.1665 -0.9110 +vn -0.3827 -0.0000 -0.9239 +vn -0.1924 0.1665 -0.9671 +vn -0.1951 -0.0000 -0.9808 +vn -0.0000 0.1665 -0.9860 +vn -0.0000 -0.0000 -1.0000 +vn 0.1924 0.1665 -0.9671 +vn 0.1951 -0.0000 -0.9808 +vn 0.3773 0.1665 -0.9110 +vn 0.3827 -0.0000 -0.9239 +vn 0.5478 0.1665 -0.8199 +vn 0.5556 -0.0000 -0.8315 +vn 0.6972 0.1665 -0.6972 +vn 0.7071 -0.0000 -0.7071 +vn 0.8199 0.1665 -0.5478 +vn 0.8315 -0.0000 -0.5556 +vn 0.9110 0.1665 -0.3773 +vn 0.9239 -0.0000 -0.3827 +vn 0.9671 0.1665 -0.1924 +vn 0.9808 -0.0000 -0.1951 +vn 0.9860 0.1665 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn 0.9671 0.1665 0.1924 +vn 0.9808 -0.0000 0.1951 +vn 0.9110 0.1665 0.3773 +vn 0.9239 -0.0000 0.3827 +vn 0.8199 0.1665 0.5478 +vn 0.8315 -0.0000 0.5556 +vn 0.6972 0.1665 0.6972 +vn 0.7071 -0.0000 0.7071 +vn 0.5478 0.1665 0.8199 +vn 0.5556 -0.0000 0.8315 +vn 0.3773 0.1665 0.9110 +vn 0.3827 -0.0000 0.9239 +vn -0.9253 0.3316 -0.1840 +vn -0.8716 0.3316 -0.3610 +vn 0.1924 0.1665 0.9671 +vn 0.1951 -0.0000 0.9808 +vn -0.7664 -0.5585 0.3174 +vn -0.8136 -0.5585 0.1618 +vn 0.7488 -0.5858 0.3102 +vn 0.7949 -0.5858 0.1581 +vn 0.3610 0.3316 -0.8716 +vn 0.5241 0.3316 -0.7844 +vn 0.7844 0.3316 0.5241 +vn 0.6671 0.3316 0.6671 +vn -0.7844 0.3316 0.5241 +vn -0.8716 0.3316 0.3610 +vn -0.3610 0.3316 -0.8716 +vn -0.1841 0.3316 -0.9253 +vn 0.9253 0.3316 -0.1840 +vn 0.9434 0.3316 -0.0000 +vn -0.1841 0.3316 0.9253 +vn -0.3610 0.3316 0.8716 +vn -0.7844 0.3316 -0.5241 +vn 0.6671 0.3316 -0.6671 +vn 0.5241 0.3316 0.7844 +vn -0.9253 0.3316 0.1840 +vn -0.0000 0.3316 -0.9434 +vn 0.9253 0.3316 0.1840 +vn -0.5241 0.3316 0.7844 +vn -0.6671 0.3316 -0.6671 +vn 0.7844 0.3316 -0.5241 +vn 0.3610 0.3316 0.8716 +vn -0.9434 0.3316 -0.0000 +vn 0.1841 0.3316 -0.9253 +vn 0.8716 0.3316 0.3610 +vn -0.6671 0.3316 0.6671 +vn -0.5241 0.3316 -0.7844 +vn 0.8716 0.3316 -0.3610 +vn 0.1840 0.3316 0.9253 +vn -0.0000 0.3316 0.9434 +vn -0.4503 -0.5858 -0.6739 +vn -0.5731 -0.5858 -0.5731 +vn -0.0000 -0.5858 0.8105 +vn 0.1581 -0.5858 0.7949 +vn -0.4503 0.5858 -0.6739 +vn -0.5731 0.5858 -0.5731 +vn -0.0000 0.5858 0.8105 +vn 0.1581 0.5858 0.7949 +vn 0.4503 -0.5858 0.6739 +vn 0.5731 -0.5858 0.5731 +vn -0.0000 -0.5858 -0.8105 +vn -0.1581 -0.5858 -0.7949 +vn -0.4503 -0.5858 0.6739 +vn -0.3102 -0.5858 0.7488 +vn 0.3102 -0.5858 0.7488 +vn 0.1581 -0.5858 -0.7949 +vn -0.5731 -0.5858 0.5731 +vn 0.3102 -0.5858 -0.7488 +vn -0.6739 -0.5858 0.4503 +vn 0.4503 -0.5858 -0.6739 +vn -0.1581 -0.5858 0.7949 +vn -0.7488 -0.5858 0.3102 +vn 0.5731 -0.5858 -0.5731 +vn -0.7949 -0.5858 0.1581 +vn 0.6739 -0.5858 -0.4503 +vn -0.8105 -0.5858 -0.0000 +vn 0.7488 -0.5858 -0.3101 +vn -0.7949 -0.5858 -0.1581 +vn 0.7949 -0.5858 -0.1581 +vn -0.7488 -0.5858 -0.3101 +vn 0.8105 -0.5858 -0.0000 +vn -0.6739 -0.5858 -0.4503 +vn 0.6739 -0.5858 0.4503 +vn -0.3102 -0.5858 -0.7488 +vn -0.6739 0.5858 -0.4503 +vn 0.7949 0.5858 0.1581 +vn 0.8105 0.5858 -0.0000 +vn -0.7488 0.5858 -0.3102 +vn 0.7949 0.5858 -0.1581 +vn -0.7949 0.5858 -0.1581 +vn 0.7488 0.5858 -0.3102 +vn -0.8105 0.5858 -0.0000 +vn 0.6739 0.5858 -0.4503 +vn -0.7949 0.5858 0.1581 +vn 0.5731 0.5858 -0.5731 +vn -0.7488 0.5858 0.3102 +vn 0.4503 0.5858 -0.6739 +vn -0.6739 0.5858 0.4503 +vn 0.3102 0.5858 -0.7488 +vn -0.5731 0.5858 0.5731 +vn 0.1581 0.5858 -0.7949 +vn 0.3102 0.5858 0.7488 +vn -0.4503 0.5858 0.6739 +vn -0.0000 0.5858 -0.8105 +vn 0.4503 0.5858 0.6739 +vn -0.3102 0.5858 0.7488 +vn -0.1581 0.5858 -0.7949 +vn 0.5731 0.5858 0.5731 +vn -0.1581 0.5858 0.7949 +vn -0.3102 0.5858 -0.7488 +vn 0.6739 0.5858 0.4503 +vn 0.7488 0.5858 0.3102 +vn -0.0000 1.0000 -0.0000 +vn 0.8102 0.4806 -0.3356 +vn 0.8601 0.4806 -0.1711 +vn 0.9510 0.2444 -0.1892 +vn 0.8959 0.2444 -0.3711 +vn -0.1618 -0.5585 -0.8136 +vn -0.0000 -0.5585 -0.8295 +vn 0.8295 -0.5585 -0.0000 +vn 0.8136 -0.5585 0.1618 +vn -0.3174 -0.5585 0.7664 +vn -0.4609 -0.5585 0.6897 +vn -0.6897 -0.5585 -0.4609 +vn -0.5866 -0.5585 -0.5866 +vn 0.5866 -0.5585 -0.5866 +vn 0.6897 -0.5585 -0.4609 +vn 0.4609 -0.5585 0.6897 +vn 0.3174 -0.5585 0.7664 +vn -0.8295 -0.5585 -0.0000 +vn 0.1618 -0.5585 -0.8136 +vn 0.7664 -0.5585 0.3174 +vn -0.5866 -0.5585 0.5866 +vn -0.4609 -0.5585 -0.6897 +vn 0.7664 -0.5585 -0.3174 +vn 0.1618 -0.5585 0.8136 +vn -0.8136 -0.5585 -0.1618 +vn 0.3174 -0.5585 -0.7664 +vn 0.6897 -0.5585 0.4609 +vn -0.6897 -0.5585 0.4609 +vn -0.3174 -0.5585 -0.7664 +vn 0.8136 -0.5585 -0.1618 +vn -0.0000 -0.5585 0.8295 +vn -0.1618 -0.5585 0.8136 +vn -0.7664 -0.5585 -0.3174 +vn 0.4609 -0.5585 -0.6897 +vn 0.5866 -0.5585 0.5866 +vn -0.5921 -0.5467 0.5921 +vn -0.6962 -0.5467 0.4652 +vn -0.8601 0.4806 -0.1711 +vn -0.8102 0.4806 -0.3356 +vn -0.8959 0.2444 -0.3711 +vn -0.9510 0.2444 -0.1892 +vn 0.7291 0.4806 -0.4872 +vn 0.8063 0.2444 -0.5387 +vn -0.8769 0.4806 -0.0000 +vn -0.9697 0.2444 -0.0000 +vn 0.8769 0.4806 -0.0000 +vn 0.9697 0.2444 -0.0000 +vn -0.7291 0.4806 -0.4872 +vn -0.8063 0.2444 -0.5387 +vn 0.8601 0.4806 0.1711 +vn 0.9510 0.2444 0.1892 +vn -0.6201 0.4806 -0.6201 +vn -0.6857 0.2444 -0.6857 +vn 0.8102 0.4806 0.3356 +vn 0.8959 0.2444 0.3711 +vn -0.4872 0.4806 -0.7291 +vn -0.5387 0.2444 -0.8063 +vn 0.7291 0.4806 0.4872 +vn 0.8063 0.2444 0.5387 +vn -0.3356 0.4806 -0.8102 +vn -0.3711 0.2444 -0.8959 +vn -0.1711 0.4806 0.8601 +vn -0.3356 0.4806 0.8102 +vn -0.3711 0.2444 0.8959 +vn -0.1892 0.2444 0.9510 +vn 0.6201 0.4806 0.6201 +vn 0.6857 0.2444 0.6857 +vn -0.1711 0.4806 -0.8601 +vn -0.1892 0.2444 -0.9510 +vn -0.0000 0.4806 0.8769 +vn -0.0000 0.2444 0.9697 +vn 0.4872 0.4806 0.7291 +vn 0.5387 0.2444 0.8063 +vn -0.0000 0.4806 -0.8769 +vn -0.0000 0.2444 -0.9697 +vn -0.4872 0.4806 0.7291 +vn -0.5387 0.2444 0.8063 +vn 0.3356 0.4806 0.8102 +vn 0.3711 0.2444 0.8959 +vn 0.1711 0.4806 -0.8601 +vn 0.1892 0.2444 -0.9510 +vn -0.6201 0.4806 0.6201 +vn -0.6857 0.2444 0.6857 +vn 0.1711 0.4806 0.8601 +vn 0.1892 0.2444 0.9510 +vn 0.3356 0.4806 -0.8102 +vn 0.3711 0.2444 -0.8959 +vn -0.7291 0.4806 0.4872 +vn -0.8063 0.2444 0.5387 +vn 0.6857 -0.2444 0.6857 +vn 0.5387 -0.2444 0.8063 +vn 0.4872 -0.4806 0.7291 +vn 0.6201 -0.4806 0.6201 +vn 0.4872 0.4806 -0.7291 +vn 0.5387 0.2444 -0.8063 +vn -0.8102 0.4806 0.3356 +vn -0.8959 0.2444 0.3711 +vn 0.6201 0.4806 -0.6201 +vn 0.6857 0.2444 -0.6857 +vn -0.8601 0.4806 0.1711 +vn -0.9510 0.2444 0.1892 +vn -0.9510 -0.2444 -0.1892 +vn -0.8959 -0.2444 -0.3711 +vn -0.8102 -0.4806 -0.3356 +vn -0.8601 -0.4806 -0.1711 +vn 0.9510 -0.2444 -0.1892 +vn 0.9697 -0.2444 -0.0000 +vn 0.8769 -0.4806 -0.0000 +vn 0.8601 -0.4806 -0.1711 +vn -0.9510 -0.2444 0.1892 +vn -0.9697 -0.2444 -0.0000 +vn -0.8769 -0.4806 -0.0000 +vn -0.8601 -0.4806 0.1711 +vn 0.6857 -0.2444 -0.6857 +vn 0.8063 -0.2444 -0.5387 +vn 0.7291 -0.4806 -0.4872 +vn 0.6201 -0.4806 -0.6201 +vn -0.8959 -0.2444 0.3711 +vn -0.8102 -0.4806 0.3356 +vn 0.5387 -0.2444 -0.8063 +vn 0.4872 -0.4806 -0.7291 +vn -0.8063 -0.2444 0.5387 +vn -0.7291 -0.4806 0.4872 +vn 0.1892 -0.2444 0.9510 +vn -0.0000 -0.2444 0.9697 +vn -0.0000 -0.4806 0.8769 +vn 0.1711 -0.4806 0.8601 +vn 0.3711 -0.2444 -0.8959 +vn 0.3356 -0.4806 -0.8102 +vn -0.6857 -0.2444 0.6857 +vn -0.6201 -0.4806 0.6201 +vn 0.1892 -0.2444 -0.9510 +vn 0.1711 -0.4806 -0.8601 +vn 0.3711 -0.2444 0.8959 +vn 0.3356 -0.4806 0.8102 +vn -0.5387 -0.2444 0.8063 +vn -0.4872 -0.4806 0.7291 +vn -0.0000 -0.2444 -0.9697 +vn -0.0000 -0.4806 -0.8769 +vn -0.3711 -0.2444 0.8959 +vn -0.3356 -0.4806 0.8102 +vn -0.1892 -0.2444 -0.9510 +vn -0.1711 -0.4806 -0.8601 +vn -0.1892 -0.2444 0.9510 +vn -0.1711 -0.4806 0.8601 +vn -0.3711 -0.2444 -0.8959 +vn -0.3356 -0.4806 -0.8102 +vn 0.8063 -0.2444 0.5387 +vn 0.7291 -0.4806 0.4872 +vn -0.5387 -0.2444 -0.8063 +vn -0.4872 -0.4806 -0.7291 +vn 0.8959 -0.2444 0.3711 +vn 0.8102 -0.4806 0.3356 +vn -0.6857 -0.2444 -0.6857 +vn -0.6201 -0.4806 -0.6201 +vn 0.9510 -0.2444 0.1892 +vn 0.8601 -0.4806 0.1711 +vn -0.8063 -0.2444 -0.5387 +vn -0.7291 -0.4806 -0.4872 +vn 0.8959 -0.2444 -0.3711 +vn 0.8102 -0.4806 -0.3356 +vn -0.0000 -1.0000 -0.0000 +vn 0.8213 -0.5467 -0.1634 +vn 0.8373 -0.5467 -0.0000 +vn -0.7736 -0.5467 0.3204 +vn 0.8213 -0.5467 0.1634 +vn -0.8213 -0.5467 0.1634 +vn 0.7736 -0.5467 0.3204 +vn -0.8373 -0.5467 -0.0000 +vn 0.6962 -0.5467 0.4652 +vn -0.8213 -0.5467 -0.1634 +vn 0.5921 -0.5467 0.5921 +vn -0.7736 -0.5467 -0.3204 +vn 0.4652 -0.5467 0.6962 +vn -0.6962 -0.5467 -0.4652 +vn 0.3204 -0.5467 0.7736 +vn -0.0000 -0.5467 -0.8373 +vn 0.1634 -0.5467 -0.8213 +vn -0.5921 -0.5467 -0.5921 +vn 0.1634 -0.5467 0.8213 +vn 0.3204 -0.5467 -0.7736 +vn -0.4652 -0.5467 -0.6962 +vn -0.0000 -0.5467 0.8373 +vn 0.4652 -0.5467 -0.6962 +vn -0.3204 -0.5467 -0.7736 +vn -0.1634 -0.5467 0.8213 +vn 0.5921 -0.5467 -0.5921 +vn -0.1634 -0.5467 -0.8213 +vn -0.3204 -0.5467 0.7736 +vn 0.6962 -0.5467 -0.4652 +vn -0.4652 -0.5467 0.6962 +vn 0.7736 -0.5467 -0.3204 +vt 0.769149 0.045079 +vt 0.769149 0.696279 +vt 0.745399 0.696279 +vt 0.745399 0.045079 +vt 0.721649 0.696279 +vt 0.721649 0.045079 +vt 0.697899 0.696279 +vt 0.697899 0.045079 +vt 0.674148 0.696279 +vt 0.674148 0.045079 +vt 0.650398 0.696279 +vt 0.650398 0.045079 +vt 0.626649 0.696279 +vt 0.626649 0.045079 +vt 0.602899 0.696279 +vt 0.602899 0.045079 +vt 0.579149 0.696279 +vt 0.579149 0.045079 +vt 0.555399 0.696279 +vt 0.555398 0.045079 +vt 0.531649 0.696279 +vt 0.531649 0.045079 +vt 0.507899 0.696279 +vt 0.507899 0.045079 +vt 0.484149 0.696279 +vt 0.484149 0.045079 +vt 0.460399 0.696279 +vt 0.460399 0.045079 +vt 0.436649 0.696279 +vt 0.436648 0.045079 +vt 0.412899 0.696279 +vt 0.412898 0.045079 +vt 0.389149 0.696279 +vt 0.389149 0.045079 +vt 0.365399 0.696279 +vt 0.365398 0.045079 +vt 0.341649 0.696279 +vt 0.341649 0.045079 +vt 0.317899 0.696279 +vt 0.317899 0.045079 +vt 0.294149 0.696279 +vt 0.294149 0.045079 +vt 0.270399 0.696279 +vt 0.270399 0.045079 +vt 0.246649 0.696279 +vt 0.246649 0.045079 +vt 0.222899 0.696279 +vt 0.222899 0.045079 +vt 0.199148 0.696279 +vt 0.199149 0.045079 +vt 0.175398 0.696279 +vt 0.175399 0.045079 +vt 0.151648 0.696279 +vt 0.151649 0.045079 +vt 0.127898 0.696279 +vt 0.127899 0.045079 +vt 0.104148 0.696279 +vt 0.104149 0.045079 +vt 0.080398 0.696279 +vt 0.080399 0.045079 +vt 0.056648 0.696279 +vt 0.056648 0.045079 +vt 0.555399 0.758023 +vt 0.531649 0.758023 +vt 0.032899 0.696279 +vt 0.032899 0.045079 +vt 0.009149 0.696279 +vt 0.009149 0.045079 +vt 0.602899 0.018915 +vt 0.626649 0.018915 +vt 0.151648 0.758023 +vt 0.175398 0.758023 +vt 0.175398 0.761979 +vt 0.151648 0.761979 +vt 0.341649 0.758023 +vt 0.317899 0.758023 +vt 0.127898 0.758023 +vt 0.104148 0.758023 +vt 0.650398 0.758023 +vt 0.626649 0.758023 +vt 0.436649 0.758023 +vt 0.412899 0.758023 +vt 0.222898 0.758023 +vt 0.199148 0.758023 +vt 0.745399 0.758023 +vt 0.721649 0.758023 +vt 0.507899 0.758023 +vt 0.294149 0.758023 +vt 0.080398 0.758023 +vt 0.602899 0.758023 +vt 0.389149 0.758023 +vt 0.697899 0.758023 +vt 0.484149 0.758023 +vt 0.270399 0.758023 +vt 0.056648 0.758023 +vt 0.579149 0.758023 +vt 0.365399 0.758023 +vt 0.674148 0.758023 +vt 0.460399 0.758023 +vt 0.246649 0.758023 +vt 0.032898 0.758023 +vt 0.769149 0.758023 +vt 0.009149 0.758023 +vt 0.294149 0.774405 +vt 0.317899 0.774405 +vt 0.317899 0.754637 +vt 0.294149 0.754637 +vt 0.484149 0.761979 +vt 0.460399 0.761979 +vt 0.032898 0.761979 +vt 0.009149 0.761979 +vt 0.460399 0.770449 +vt 0.484149 0.770449 +vt 0.484149 0.774405 +vt 0.460399 0.774405 +vt 0.009149 0.770449 +vt 0.032898 0.770449 +vt 0.032898 0.774405 +vt 0.009149 0.774405 +vt 0.104148 0.761979 +vt 0.080398 0.761979 +vt 0.412899 0.761979 +vt 0.389149 0.761979 +vt 0.721649 0.761979 +vt 0.697899 0.761979 +vt 0.056648 0.761979 +vt 0.365399 0.761979 +vt 0.674148 0.761979 +vt 0.341649 0.761979 +vt 0.650398 0.761979 +vt 0.317899 0.761979 +vt 0.769149 0.761979 +vt 0.745399 0.761979 +vt 0.626649 0.761979 +vt 0.294149 0.761979 +vt 0.602899 0.761979 +vt 0.270399 0.761979 +vt 0.579149 0.761979 +vt 0.246649 0.761979 +vt 0.555399 0.761979 +vt 0.222898 0.761979 +vt 0.531649 0.761979 +vt 0.199148 0.761979 +vt 0.507899 0.761979 +vt 0.127898 0.761979 +vt 0.436649 0.761979 +vt 0.507899 0.770449 +vt 0.507899 0.774405 +vt 0.175398 0.770449 +vt 0.199148 0.770449 +vt 0.199148 0.774405 +vt 0.175398 0.774405 +vt 0.531649 0.770449 +vt 0.531649 0.774405 +vt 0.222898 0.770449 +vt 0.222898 0.774405 +vt 0.555399 0.770449 +vt 0.555399 0.774405 +vt 0.246649 0.770449 +vt 0.246649 0.774405 +vt 0.579149 0.770449 +vt 0.579149 0.774405 +vt 0.270399 0.770449 +vt 0.270399 0.774405 +vt 0.602899 0.770449 +vt 0.602899 0.774405 +vt 0.294149 0.770449 +vt 0.626649 0.770449 +vt 0.626649 0.774405 +vt 0.317899 0.770449 +vt 0.650398 0.770449 +vt 0.650398 0.774405 +vt 0.341649 0.770449 +vt 0.341649 0.774405 +vt 0.674148 0.770449 +vt 0.674148 0.774405 +vt 0.365399 0.770449 +vt 0.365399 0.774405 +vt 0.056648 0.770449 +vt 0.056648 0.774405 +vt 0.697899 0.770449 +vt 0.697899 0.774405 +vt 0.389149 0.770449 +vt 0.389149 0.774405 +vt 0.080398 0.770449 +vt 0.080398 0.774405 +vt 0.721649 0.770449 +vt 0.721649 0.774405 +vt 0.412899 0.770449 +vt 0.412899 0.774405 +vt 0.104148 0.770449 +vt 0.104148 0.774405 +vt 0.745399 0.770449 +vt 0.745399 0.774405 +vt 0.436649 0.770449 +vt 0.436649 0.774405 +vt 0.127898 0.770449 +vt 0.127898 0.774405 +vt 0.769149 0.770449 +vt 0.769149 0.774405 +vt 0.151648 0.770449 +vt 0.151648 0.774405 +vt 0.626649 0.754637 +vt 0.602899 0.754637 +vt 0.270399 0.754637 +vt 0.579149 0.754637 +vt 0.246648 0.754637 +vt 0.555399 0.754637 +vt 0.222898 0.754637 +vt 0.531649 0.754637 +vt 0.199148 0.754637 +vt 0.507899 0.754637 +vt 0.175398 0.754637 +vt 0.484149 0.754637 +vt 0.151648 0.754637 +vt 0.460399 0.754637 +vt 0.127898 0.754637 +vt 0.436649 0.754637 +vt 0.769149 0.754637 +vt 0.745399 0.754637 +vt 0.104148 0.754637 +vt 0.412899 0.754637 +vt 0.721649 0.754637 +vt 0.080398 0.754637 +vt 0.389149 0.754637 +vt 0.697899 0.754637 +vt 0.056648 0.754637 +vt 0.365399 0.754637 +vt 0.674148 0.754637 +vt 0.032898 0.754637 +vt 0.341649 0.754637 +vt 0.650398 0.754637 +vt 0.009149 0.754637 +vt 0.246649 0.018915 +vt 0.222899 0.018915 +vt 0.222899 0.016646 +vt 0.246649 0.016646 +vt 0.389149 0.018915 +vt 0.412898 0.018915 +vt 0.175399 0.018915 +vt 0.199149 0.018915 +vt 0.697899 0.018915 +vt 0.721649 0.018915 +vt 0.484148 0.018915 +vt 0.507899 0.018915 +vt 0.270399 0.018915 +vt 0.294149 0.018915 +vt 0.056649 0.018915 +vt 0.080399 0.018915 +vt 0.579149 0.018915 +vt 0.365398 0.018915 +vt 0.151649 0.018915 +vt 0.674148 0.018915 +vt 0.460399 0.018915 +vt 0.032899 0.018915 +vt 0.555398 0.018915 +vt 0.341649 0.018915 +vt 0.127899 0.018915 +vt 0.650398 0.018915 +vt 0.436648 0.018915 +vt 0.745399 0.018915 +vt 0.769149 0.018915 +vt 0.009149 0.018915 +vt 0.531649 0.018915 +vt 0.317899 0.018915 +vt 0.104149 0.018915 +vt 0.294149 0.011176 +vt 0.270399 0.011176 +vt 0.270399 0.024995 +vt 0.294149 0.024995 +vt 0.531649 0.016646 +vt 0.555398 0.016646 +vt 0.270399 0.016646 +vt 0.579149 0.016646 +vt 0.199149 0.016646 +vt 0.507899 0.016646 +vt 0.175399 0.016646 +vt 0.484148 0.016646 +vt 0.151649 0.016646 +vt 0.460399 0.016646 +vt 0.127899 0.016646 +vt 0.436648 0.016646 +vt 0.721649 0.016646 +vt 0.745399 0.016646 +vt 0.104149 0.016646 +vt 0.412898 0.016646 +vt 0.769149 0.016646 +vt 0.080399 0.016646 +vt 0.389149 0.016646 +vt 0.697899 0.016646 +vt 0.056649 0.016646 +vt 0.365398 0.016646 +vt 0.674148 0.016646 +vt 0.032899 0.016646 +vt 0.341649 0.016646 +vt 0.650398 0.016646 +vt 0.104149 0.013445 +vt 0.080399 0.013445 +vt 0.080399 0.011176 +vt 0.104149 0.011176 +vt 0.317899 0.016646 +vt 0.626649 0.016646 +vt 0.294149 0.016646 +vt 0.602899 0.016646 +vt 0.555398 0.013445 +vt 0.531649 0.013445 +vt 0.531649 0.011176 +vt 0.555398 0.011176 +vt 0.222899 0.013445 +vt 0.199149 0.013445 +vt 0.199149 0.011176 +vt 0.222899 0.011176 +vt 0.602899 0.013445 +vt 0.579149 0.013445 +vt 0.579149 0.011176 +vt 0.602899 0.011176 +vt 0.294149 0.013445 +vt 0.270399 0.013445 +vt 0.626649 0.013445 +vt 0.626649 0.011176 +vt 0.317899 0.013445 +vt 0.317899 0.011176 +vt 0.650398 0.013445 +vt 0.650398 0.011176 +vt 0.032899 0.013445 +vt 0.009149 0.013445 +vt 0.009149 0.011176 +vt 0.032899 0.011176 +vt 0.341649 0.013445 +vt 0.341649 0.011176 +vt 0.674148 0.013445 +vt 0.674148 0.011176 +vt 0.365398 0.013445 +vt 0.365398 0.011176 +vt 0.056649 0.013445 +vt 0.056649 0.011176 +vt 0.697899 0.013445 +vt 0.697899 0.011176 +vt 0.389149 0.013445 +vt 0.389149 0.011176 +vt 0.721649 0.013445 +vt 0.721649 0.011176 +vt 0.412898 0.013445 +vt 0.412898 0.011176 +vt 0.009149 0.016646 +vt 0.745399 0.013445 +vt 0.745399 0.011176 +vt 0.436648 0.013445 +vt 0.436648 0.011176 +vt 0.769149 0.013445 +vt 0.769149 0.011176 +vt 0.127899 0.013445 +vt 0.127899 0.011176 +vt 0.460399 0.013445 +vt 0.460399 0.011176 +vt 0.151649 0.013445 +vt 0.151649 0.011176 +vt 0.484148 0.013445 +vt 0.484148 0.011176 +vt 0.175399 0.013445 +vt 0.175399 0.011176 +vt 0.507899 0.013445 +vt 0.507899 0.011176 +vt 0.246649 0.013445 +vt 0.246649 0.011176 +vt 0.317898 0.011176 +vt 0.852947 0.217272 +vt 0.833579 0.209249 +vt 0.816148 0.197602 +vt 0.801324 0.182778 +vt 0.789677 0.165347 +vt 0.781654 0.145979 +vt 0.777564 0.125417 +vt 0.777564 0.104453 +vt 0.781654 0.083892 +vt 0.789677 0.064523 +vt 0.801324 0.047092 +vt 0.816148 0.032268 +vt 0.833579 0.020621 +vt 0.852947 0.012599 +vt 0.873509 0.008509 +vt 0.894473 0.008509 +vt 0.915034 0.012599 +vt 0.934402 0.020621 +vt 0.951834 0.032268 +vt 0.966657 0.047092 +vt 0.978305 0.064523 +vt 0.986327 0.083892 +vt 0.990417 0.104453 +vt 0.990417 0.125417 +vt 0.986327 0.145979 +vt 0.978305 0.165347 +vt 0.966657 0.182778 +vt 0.951834 0.197602 +vt 0.934402 0.209249 +vt 0.915034 0.217272 +vt 0.894473 0.221362 +vt 0.873508 0.221362 +vt 0.579149 0.024995 +vt 0.602899 0.024995 +vt 0.246649 0.024995 +vt 0.555398 0.024995 +vt 0.222899 0.024995 +vt 0.531649 0.024995 +vt 0.199149 0.024995 +vt 0.507899 0.024995 +vt 0.175399 0.024995 +vt 0.484148 0.024995 +vt 0.151649 0.024995 +vt 0.460399 0.024995 +vt 0.127899 0.024995 +vt 0.436648 0.024995 +vt 0.745399 0.024995 +vt 0.769149 0.024995 +vt 0.104149 0.024995 +vt 0.412898 0.024995 +vt 0.721649 0.024995 +vt 0.080399 0.024995 +vt 0.389149 0.024995 +vt 0.697899 0.024995 +vt 0.056649 0.024995 +vt 0.365398 0.024995 +vt 0.674148 0.024995 +vt 0.032899 0.024995 +vt 0.341649 0.024995 +vt 0.650398 0.024995 +vt 0.009149 0.024995 +vt 0.317898 0.024995 +vt 0.626649 0.024995 +vt 0.959679 0.255095 +vt 0.975171 0.270586 +vt 0.987342 0.288802 +vt 0.995726 0.309043 +vt 1.000000 0.330530 +vt 1.000000 0.352438 +vt 0.995726 0.373925 +vt 0.987342 0.394165 +vt 0.975171 0.412381 +vt 0.959679 0.427872 +vt 0.941463 0.440044 +vt 0.921223 0.448428 +vt 0.899736 0.452702 +vt 0.877828 0.452702 +vt 0.856341 0.448428 +vt 0.836101 0.440044 +vt 0.817885 0.427872 +vt 0.802393 0.412381 +vt 0.790222 0.394165 +vt 0.781838 0.373925 +vt 0.777564 0.352438 +vt 0.777564 0.330530 +vt 0.781838 0.309043 +vt 0.790222 0.288802 +vt 0.802393 0.270586 +vt 0.817885 0.255095 +vt 0.836101 0.242924 +vt 0.856341 0.234540 +vt 0.877828 0.230266 +vt 0.899736 0.230266 +vt 0.921223 0.234540 +vt 0.941464 0.242924 +s 1 +usemtl Material.001 +f 1/1/1 2/2/2 4/3/3 3/4/4 +f 3/4/4 4/3/3 6/5/5 5/6/6 +f 5/6/6 6/5/5 8/7/7 7/8/8 +f 7/8/8 8/7/7 10/9/9 9/10/10 +f 9/10/10 10/9/9 12/11/11 11/12/12 +f 11/12/12 12/11/11 14/13/13 13/14/14 +f 13/14/14 14/13/13 16/15/15 15/16/16 +f 15/16/16 16/15/15 18/17/17 17/18/18 +f 17/18/18 18/17/17 20/19/19 19/20/20 +f 19/20/20 20/19/19 22/21/21 21/22/22 +f 21/22/22 22/21/21 24/23/23 23/24/24 +f 23/24/24 24/23/23 26/25/25 25/26/26 +f 25/26/26 26/25/25 28/27/27 27/28/28 +f 27/28/28 28/27/27 30/29/29 29/30/30 +f 29/30/30 30/29/29 32/31/31 31/32/32 +f 31/32/32 32/31/31 34/33/33 33/34/34 +f 33/34/34 34/33/33 36/35/35 35/36/36 +f 35/36/36 36/35/35 38/37/37 37/38/38 +f 37/38/38 38/37/37 40/39/39 39/40/40 +f 39/40/40 40/39/39 42/41/41 41/42/42 +f 41/42/42 42/41/41 44/43/43 43/44/44 +f 43/44/44 44/43/43 46/45/45 45/46/46 +f 45/46/46 46/45/45 48/47/47 47/48/48 +f 47/48/48 48/47/47 50/49/49 49/50/50 +f 49/50/50 50/49/49 52/51/51 51/52/52 +f 51/52/52 52/51/51 54/53/53 53/54/54 +f 53/54/54 54/53/53 56/55/55 55/56/56 +f 55/56/56 56/55/55 58/57/57 57/58/58 +f 57/58/58 58/57/57 60/59/59 59/60/60 +f 59/60/60 60/59/59 62/61/61 61/62/62 +f 22/21/21 20/19/19 74/63/63 75/64/64 +f 61/62/62 62/61/61 64/65/65 63/66/66 +f 63/66/66 64/65/65 2/67/2 1/68/1 +f 13/14/67 15/16/68 264/69/68 263/70/67 +f 91/71/69 90/72/70 189/73/70 130/74/69 +f 40/39/39 38/37/37 83/75/71 84/76/72 +f 58/57/57 56/55/55 92/77/73 93/78/74 +f 14/13/13 12/11/11 70/79/75 71/80/76 +f 32/31/31 30/29/29 79/81/77 80/82/78 +f 50/49/49 48/47/47 88/83/79 89/84/80 +f 6/5/5 4/3/3 65/85/81 67/86/82 +f 24/23/23 22/21/21 75/64/64 76/87/83 +f 42/41/41 40/39/39 84/76/72 85/88/84 +f 60/59/59 58/57/57 93/78/74 94/89/85 +f 16/15/15 14/13/13 71/80/76 72/90/86 +f 34/33/33 32/31/31 80/82/78 81/91/87 +f 52/51/51 50/49/49 89/84/80 90/72/88 +f 8/7/7 6/5/5 67/86/82 68/92/89 +f 26/25/25 24/23/23 76/87/83 77/93/90 +f 44/43/43 42/41/41 85/88/84 86/94/91 +f 62/61/61 60/59/59 94/89/85 95/95/92 +f 18/17/17 16/15/15 72/90/86 73/96/93 +f 36/35/35 34/33/33 81/91/87 82/97/94 +f 54/53/53 52/51/51 90/72/88 91/71/95 +f 10/9/9 8/7/7 68/92/89 69/98/96 +f 28/27/27 26/25/25 77/93/90 78/99/97 +f 46/45/45 44/43/43 86/94/91 87/100/98 +f 64/65/65 62/61/61 95/95/92 96/101/99 +f 20/19/19 18/17/17 73/96/93 74/63/63 +f 38/37/37 36/35/35 82/97/94 83/75/71 +f 56/55/55 54/53/53 91/71/95 92/77/73 +f 12/11/11 10/9/9 69/98/96 70/79/75 +f 30/29/29 28/27/27 78/99/97 79/81/77 +f 48/47/47 46/45/45 87/100/98 88/83/79 +f 4/3/3 2/2/2 66/102/100 65/85/81 +f 2/67/2 64/65/65 96/101/99 66/103/100 +f 117/104/10 116/105/8 244/106/8 245/107/10 +f 78/99/101 77/93/102 191/108/102 134/109/101 +f 66/103/103 96/101/104 159/110/104 138/111/103 +f 133/112/105 192/113/106 205/114/106 206/115/105 +f 137/116/107 160/117/108 224/118/108 194/119/107 +f 94/89/109 93/78/110 141/120/110 147/121/109 +f 81/91/111 80/82/112 143/122/112 149/123/111 +f 68/92/113 67/86/114 145/124/114 151/125/113 +f 95/95/115 94/89/109 147/121/109 153/126/115 +f 82/97/116 81/91/111 149/123/111 155/127/116 +f 69/98/117 68/92/113 151/125/113 157/128/117 +f 96/101/104 95/95/115 153/126/115 159/110/104 +f 83/75/118 82/97/116 155/127/116 161/129/118 +f 70/79/119 69/98/117 157/128/117 163/130/119 +f 84/76/120 83/75/118 161/129/118 165/131/120 +f 65/85/121 66/102/103 138/132/103 139/133/121 +f 71/80/122 70/79/119 163/130/119 167/134/122 +f 85/88/123 84/76/120 165/131/120 169/135/123 +f 72/90/124 71/80/122 167/134/122 171/136/124 +f 86/94/125 85/88/123 169/135/123 173/137/125 +f 73/96/126 72/90/124 171/136/124 175/138/126 +f 87/100/127 86/94/125 173/137/125 177/139/127 +f 74/63/128 73/96/126 175/138/126 179/140/128 +f 88/83/129 87/100/127 177/139/127 181/141/129 +f 75/64/130 74/63/128 179/140/128 183/142/130 +f 89/84/131 88/83/129 181/141/129 185/143/131 +f 76/87/132 75/64/130 183/142/130 187/144/132 +f 90/72/70 89/84/131 185/143/131 189/73/70 +f 77/93/102 76/87/132 187/144/132 191/108/102 +f 92/77/133 91/71/69 130/74/69 131/145/133 +f 79/81/134 78/99/101 134/109/101 135/146/134 +f 80/82/112 79/81/134 135/146/134 143/122/112 +f 93/78/110 92/77/133 131/145/133 141/120/110 +f 192/113/106 188/147/135 204/148/135 205/114/106 +f 190/149/136 186/150/137 217/151/137 218/152/136 +f 188/147/135 184/153/138 203/154/138 204/148/135 +f 186/150/137 182/155/139 216/156/139 217/151/137 +f 184/153/138 180/157/140 202/158/140 203/154/138 +f 182/155/139 178/159/141 215/160/141 216/156/139 +f 180/157/140 176/161/142 201/162/142 202/158/140 +f 178/159/141 174/163/143 214/164/143 215/160/141 +f 176/161/142 172/165/144 200/166/144 201/162/142 +f 174/163/143 170/167/145 213/104/145 214/164/143 +f 172/165/144 168/168/146 199/169/146 200/166/144 +f 170/167/145 166/170/147 212/105/147 213/104/145 +f 168/168/146 164/171/148 198/172/148 199/169/146 +f 166/170/147 162/173/149 211/174/149 212/105/147 +f 67/86/114 65/85/121 139/133/121 145/124/114 +f 164/171/148 158/175/150 197/176/150 198/172/148 +f 162/173/149 156/177/151 210/178/151 211/174/149 +f 160/117/108 154/179/152 223/180/152 224/118/108 +f 158/175/150 152/181/153 196/182/153 197/176/150 +f 156/177/151 150/183/154 209/184/154 210/178/151 +f 154/179/152 148/185/155 222/186/155 223/180/152 +f 152/181/153 146/187/156 195/188/156 196/182/153 +f 150/183/154 144/189/157 208/190/157 209/184/154 +f 148/185/155 142/191/158 221/192/158 222/186/155 +f 146/187/156 140/193/159 193/194/159 195/188/156 +f 144/189/157 136/195/160 207/196/160 208/190/157 +f 142/191/158 132/197/161 220/198/161 221/192/158 +f 140/193/159 137/199/107 194/200/107 193/194/159 +f 136/195/160 133/112/105 206/115/105 207/196/160 +f 132/197/161 129/201/162 219/202/162 220/198/161 +f 192/113/26 133/112/28 134/109/28 191/108/26 +f 190/149/52 129/201/54 130/74/54 189/73/52 +f 188/147/24 192/113/26 191/108/26 187/144/24 +f 186/150/50 190/149/52 189/73/52 185/143/50 +f 184/153/22 188/147/24 187/144/24 183/142/22 +f 182/155/48 186/150/50 185/143/50 181/141/48 +f 180/157/20 184/153/22 183/142/22 179/140/20 +f 178/159/46 182/155/48 181/141/48 177/139/46 +f 176/161/18 180/157/20 179/140/20 175/138/18 +f 174/163/44 178/159/46 177/139/46 173/137/44 +f 172/165/16 176/161/18 175/138/18 171/136/16 +f 170/167/42 174/163/44 173/137/44 169/135/42 +f 168/168/14 172/165/16 171/136/16 167/134/14 +f 166/170/40 170/167/42 169/135/42 165/131/40 +f 164/171/12 168/168/14 167/134/14 163/130/12 +f 162/173/38 166/170/40 165/131/40 161/129/38 +f 160/117/66 137/116/1 138/111/1 159/110/66 +f 158/175/10 164/171/12 163/130/12 157/128/10 +f 156/177/36 162/173/38 161/129/38 155/127/36 +f 154/179/62 160/117/66 159/110/66 153/126/62 +f 152/181/8 158/175/10 157/128/10 151/125/8 +f 150/183/34 156/177/36 155/127/36 149/123/34 +f 148/185/60 154/179/62 153/126/62 147/121/60 +f 146/187/6 152/181/8 151/125/8 145/124/6 +f 144/189/32 150/183/34 149/123/34 143/122/32 +f 142/191/58 148/185/60 147/121/60 141/120/58 +f 140/193/4 146/187/6 145/124/6 139/133/4 +f 136/195/30 144/189/32 143/122/32 135/146/30 +f 132/197/56 142/191/58 141/120/58 131/145/56 +f 137/199/1 140/193/4 139/133/4 138/132/1 +f 133/112/28 136/195/30 135/146/30 134/109/28 +f 129/201/54 132/197/56 131/145/56 130/74/54 +f 129/201/162 190/149/136 218/152/136 219/202/162 +f 98/200/163 97/194/163 193/194/163 194/200/163 +f 97/194/163 99/188/163 195/188/163 193/194/163 +f 99/188/163 100/182/163 196/182/163 195/188/163 +f 100/182/163 101/176/163 197/176/163 196/182/163 +f 101/176/163 102/172/163 198/172/163 197/176/163 +f 102/172/163 103/169/163 199/169/163 198/172/163 +f 103/169/163 104/166/163 200/166/163 199/169/163 +f 104/166/163 105/162/163 201/162/163 200/166/163 +f 105/162/163 106/158/163 202/158/163 201/162/163 +f 106/158/163 107/154/163 203/154/163 202/158/163 +f 107/154/163 108/148/163 204/148/163 203/154/163 +f 108/148/163 109/114/163 205/114/163 204/148/163 +f 109/114/163 110/115/163 206/115/163 205/114/163 +f 110/115/163 111/196/163 207/196/163 206/115/163 +f 111/196/163 112/190/163 208/190/163 207/196/163 +f 112/190/163 113/184/163 209/184/163 208/190/163 +f 113/184/163 114/178/163 210/178/163 209/184/163 +f 114/178/163 115/174/163 211/174/163 210/178/163 +f 115/174/163 116/105/163 212/105/163 211/174/163 +f 116/105/163 117/104/163 213/104/163 212/105/163 +f 117/104/163 118/164/163 214/164/163 213/104/163 +f 118/164/163 119/160/163 215/160/163 214/164/163 +f 119/160/163 120/156/163 216/156/163 215/160/163 +f 120/156/163 121/151/163 217/151/163 216/156/163 +f 121/151/163 122/152/163 218/152/163 217/151/163 +f 122/152/163 123/202/163 219/202/163 218/152/163 +f 123/202/163 124/198/163 220/198/163 219/202/163 +f 124/198/163 125/192/163 221/192/163 220/198/163 +f 125/192/163 126/186/163 222/186/163 221/192/163 +f 126/186/163 127/180/163 223/180/163 222/186/163 +f 127/180/163 128/118/163 224/118/163 223/180/163 +f 128/118/163 98/119/163 194/119/163 224/118/163 +f 245/107/42 244/106/40 468/106/40 469/107/42 +f 104/166/48 103/169/46 231/203/46 232/204/48 +f 118/164/12 117/104/10 245/107/10 246/205/12 +f 105/162/50 104/166/48 232/204/48 233/206/50 +f 119/160/14 118/164/12 246/205/12 247/207/14 +f 106/158/52 105/162/50 233/206/50 234/208/52 +f 120/156/16 119/160/14 247/207/14 248/209/16 +f 107/154/54 106/158/52 234/208/52 235/210/54 +f 121/151/18 120/156/16 248/209/16 249/211/18 +f 108/148/56 107/154/54 235/210/54 236/212/56 +f 122/152/20 121/151/18 249/211/18 250/213/20 +f 109/114/58 108/148/56 236/212/56 237/214/58 +f 123/202/22 122/152/20 250/213/20 251/215/22 +f 110/115/60 109/114/58 237/214/58 238/216/60 +f 124/198/24 123/202/22 251/215/22 252/217/24 +f 111/196/62 110/115/60 238/216/60 239/218/62 +f 97/194/36 98/200/34 226/219/34 225/220/36 +f 125/192/26 124/198/24 252/217/24 253/221/26 +f 112/190/66 111/196/62 239/218/62 240/222/66 +f 99/188/38 97/194/36 225/220/36 227/223/38 +f 126/186/28 125/192/26 253/221/26 254/224/28 +f 113/184/1 112/190/66 240/222/66 241/225/1 +f 100/182/40 99/188/38 227/223/38 228/226/40 +f 127/180/30 126/186/28 254/224/28 255/227/30 +f 114/178/4 113/184/1 241/225/1 242/228/4 +f 101/176/42 100/182/40 228/226/40 229/229/42 +f 128/118/32 127/180/30 255/227/30 256/230/32 +f 115/174/6 114/178/4 242/228/4 243/231/6 +f 102/172/44 101/176/42 229/229/42 230/232/44 +f 98/119/34 128/118/32 256/230/32 226/233/34 +f 116/105/8 115/174/6 243/231/6 244/106/8 +f 103/169/46 102/172/44 230/232/44 231/203/46 +f 279/234/164 280/235/165 330/236/166 322/237/167 +f 31/32/168 33/34/169 273/238/169 272/239/168 +f 49/50/170 51/52/171 282/240/171 281/241/170 +f 5/6/172 7/8/173 260/242/173 259/243/172 +f 23/24/174 25/26/175 269/244/175 268/245/174 +f 41/42/176 43/44/177 278/246/177 277/247/176 +f 59/60/178 61/62/179 287/248/179 286/249/178 +f 15/16/68 17/18/180 265/250/180 264/69/68 +f 33/34/169 35/36/181 274/251/181 273/238/169 +f 51/52/171 53/54/182 283/252/182 282/240/171 +f 7/8/173 9/10/183 261/253/183 260/242/173 +f 25/26/175 27/28/184 270/254/184 269/244/175 +f 43/44/177 45/46/185 279/234/185 278/246/177 +f 61/62/179 63/66/186 288/255/186 287/248/179 +f 17/18/180 19/20/187 266/256/187 265/250/180 +f 35/36/181 37/38/188 275/257/188 274/251/181 +f 53/54/182 55/56/189 284/258/189 283/252/182 +f 9/10/183 11/12/190 262/259/190 261/253/183 +f 27/28/184 29/30/191 271/260/191 270/254/184 +f 45/46/185 47/48/192 280/235/192 279/234/185 +f 1/1/193 3/4/194 258/261/194 257/262/193 +f 63/66/186 1/68/193 257/263/193 288/255/186 +f 19/20/187 21/22/195 267/264/195 266/256/187 +f 37/38/188 39/40/196 276/265/196 275/257/188 +f 55/56/189 57/58/197 285/266/197 284/258/189 +f 11/12/190 13/14/67 263/70/67 262/259/190 +f 29/30/191 31/32/168 272/239/168 271/260/191 +f 47/48/192 49/50/170 281/241/170 280/235/192 +f 3/4/194 5/6/172 259/243/172 258/261/194 +f 21/22/195 23/24/174 268/245/174 267/264/195 +f 39/40/196 41/42/176 277/247/176 276/265/196 +f 57/58/197 59/60/178 286/249/178 285/266/197 +f 309/267/198 310/268/199 438/269/199 437/270/198 +f 266/256/200 267/264/201 332/271/202 326/272/203 +f 278/246/204 279/234/164 322/237/167 323/273/205 +f 265/250/206 266/256/200 326/272/203 327/274/207 +f 280/235/165 281/241/208 334/275/209 330/236/166 +f 267/264/201 268/245/210 336/276/211 332/271/202 +f 281/241/208 282/240/212 338/277/213 334/275/209 +f 268/245/210 269/244/214 340/278/215 336/276/211 +f 282/240/212 283/252/216 342/279/217 338/277/213 +f 269/244/214 270/254/218 344/280/219 340/278/215 +f 283/252/216 284/258/220 346/281/221 342/279/217 +f 270/254/218 271/260/222 348/282/223 344/280/219 +f 258/261/224 259/243/225 358/283/226 350/284/227 +f 284/258/220 285/266/228 354/285/229 346/281/221 +f 271/260/222 272/239/230 356/286/231 348/282/223 +f 257/262/232 258/261/224 350/284/227 351/287/233 +f 285/266/228 286/249/234 360/288/235 354/285/229 +f 272/239/230 273/238/236 362/289/237 356/286/231 +f 259/243/225 260/242/238 364/290/239 358/283/226 +f 286/249/234 287/248/240 366/291/241 360/288/235 +f 273/238/236 274/251/242 368/292/243 362/289/237 +f 260/242/238 261/253/244 370/293/245 364/290/239 +f 287/248/240 288/255/246 372/294/247 366/291/241 +f 274/251/242 275/257/248 374/295/249 368/292/243 +f 261/253/244 262/259/250 376/296/251 370/293/245 +f 353/297/252 359/298/253 414/299/254 413/300/255 +f 275/257/248 276/265/256 378/301/257 374/295/249 +f 262/259/250 263/70/258 380/302/259 376/296/251 +f 276/265/256 277/247/260 382/303/261 378/301/257 +f 263/70/258 264/69/262 384/304/263 380/302/259 +f 325/305/264 331/306/265 395/307/266 394/308/267 +f 329/309/268 333/310/269 409/311/270 408/312/271 +f 383/313/272 328/314/273 393/315/274 392/316/275 +f 381/317/276 324/318/277 406/268/278 405/267/279 +f 379/319/280 383/313/272 392/316/275 391/320/281 +f 377/321/282 381/317/276 405/267/279 404/322/283 +f 375/323/284 379/319/280 391/320/281 390/324/285 +f 371/325/286 352/326/287 385/327/288 416/328/289 +f 373/329/290 377/321/282 404/322/283 403/330/291 +f 369/331/292 375/323/284 390/324/285 389/332/293 +f 367/333/294 373/329/290 403/330/291 402/334/295 +f 365/335/296 371/325/286 416/328/289 415/336/297 +f 363/337/298 369/331/292 389/332/293 388/338/299 +f 361/339/300 367/333/294 402/334/295 401/340/301 +f 359/298/253 365/335/296 415/336/297 414/299/254 +f 357/341/302 363/337/298 388/338/299 387/342/303 +f 355/343/304 361/339/300 401/340/301 400/344/305 +f 288/255/246 257/263/232 351/345/233 372/294/247 +f 349/346/306 357/341/302 387/342/303 386/347/307 +f 347/348/308 355/343/304 400/344/305 399/349/309 +f 352/350/287 349/346/306 386/347/307 385/351/288 +f 345/352/310 353/297/252 413/300/255 412/353/311 +f 343/354/312 347/348/308 399/349/309 398/355/313 +f 341/356/314 345/352/310 412/353/311 411/357/315 +f 339/358/316 343/354/312 398/355/313 397/359/317 +f 337/360/318 341/356/314 411/357/315 410/361/319 +f 335/362/320 339/358/316 397/359/317 396/363/321 +f 333/310/269 337/360/318 410/361/319 409/311/270 +f 331/306/265 335/362/320 396/363/321 395/307/266 +f 264/69/262 265/250/206 327/274/207 384/304/263 +f 277/247/260 278/246/204 323/273/205 382/303/261 +f 328/314/273 325/305/264 394/308/267 393/315/274 +f 324/318/277 321/364/322 407/365/323 406/268/278 +f 328/314/273 383/313/272 384/304/263 327/274/207 +f 324/318/277 381/317/276 382/303/261 323/273/205 +f 383/313/272 379/319/280 380/302/259 384/304/263 +f 381/317/276 377/321/282 378/301/257 382/303/261 +f 379/319/280 375/323/284 376/296/251 380/302/259 +f 377/321/282 373/329/290 374/295/249 378/301/257 +f 352/326/287 371/325/286 372/294/247 351/345/233 +f 375/323/284 369/331/292 370/293/245 376/296/251 +f 373/329/290 367/333/294 368/292/243 374/295/249 +f 371/325/286 365/335/296 366/291/241 372/294/247 +f 369/331/292 363/337/298 364/290/239 370/293/245 +f 367/333/294 361/339/300 362/289/237 368/292/243 +f 365/335/296 359/298/253 360/288/235 366/291/241 +f 363/337/298 357/341/302 358/283/226 364/290/239 +f 361/339/300 355/343/304 356/286/231 362/289/237 +f 359/298/253 353/297/252 354/285/229 360/288/235 +f 357/341/302 349/346/306 350/284/227 358/283/226 +f 355/343/304 347/348/308 348/282/223 356/286/231 +f 353/297/252 345/352/310 346/281/221 354/285/229 +f 349/346/306 352/350/287 351/287/233 350/284/227 +f 347/348/308 343/354/312 344/280/219 348/282/223 +f 345/352/310 341/356/314 342/279/217 346/281/221 +f 343/354/312 339/358/316 340/278/215 344/280/219 +f 341/356/314 337/360/318 338/277/213 342/279/217 +f 339/358/316 335/362/320 336/276/211 340/278/215 +f 337/360/318 333/310/269 334/275/209 338/277/213 +f 335/362/320 331/306/265 332/271/202 336/276/211 +f 333/310/269 329/309/268 330/236/166 334/275/209 +f 331/306/265 325/305/264 326/272/203 332/271/202 +f 329/309/268 321/364/322 322/237/167 330/236/166 +f 325/305/264 328/314/273 327/274/207 326/272/203 +f 321/364/322 324/318/277 323/273/205 322/237/167 +f 321/364/322 329/309/268 408/312/271 407/365/323 +f 290/347/324 289/351/324 385/351/324 386/347/324 +f 291/342/324 290/347/324 386/347/324 387/342/324 +f 292/338/324 291/342/324 387/342/324 388/338/324 +f 293/332/324 292/338/324 388/338/324 389/332/324 +f 294/324/324 293/332/324 389/332/324 390/324/324 +f 295/320/324 294/324/324 390/324/324 391/320/324 +f 296/316/324 295/320/324 391/320/324 392/316/324 +f 297/315/324 296/316/324 392/316/324 393/315/324 +f 298/308/324 297/315/324 393/315/324 394/308/324 +f 299/307/324 298/308/324 394/308/324 395/307/324 +f 300/363/324 299/307/324 395/307/324 396/363/324 +f 301/359/324 300/363/324 396/363/324 397/359/324 +f 302/355/324 301/359/324 397/359/324 398/355/324 +f 303/349/324 302/355/324 398/355/324 399/349/324 +f 304/344/324 303/349/324 399/349/324 400/344/324 +f 305/340/324 304/344/324 400/344/324 401/340/324 +f 306/334/324 305/340/324 401/340/324 402/334/324 +f 307/330/324 306/334/324 402/334/324 403/330/324 +f 308/366/324 307/330/324 403/330/324 404/322/324 +f 309/267/324 308/366/324 404/322/324 405/267/324 +f 310/268/324 309/267/324 405/267/324 406/268/324 +f 311/365/324 310/268/324 406/268/324 407/365/324 +f 312/312/324 311/365/324 407/365/324 408/312/324 +f 313/311/324 312/312/324 408/312/324 409/311/324 +f 314/361/324 313/311/324 409/311/324 410/361/324 +f 315/357/324 314/361/324 410/361/324 411/357/324 +f 316/353/324 315/357/324 411/357/324 412/353/324 +f 317/300/324 316/353/324 412/353/324 413/300/324 +f 318/299/324 317/300/324 413/300/324 414/299/324 +f 319/336/324 318/299/324 414/299/324 415/336/324 +f 320/328/324 319/336/324 415/336/324 416/328/324 +f 289/327/324 320/328/324 416/328/324 385/327/324 +f 417/367/324 418/368/324 419/369/324 420/370/324 421/371/324 422/372/324 423/373/324 424/374/324 425/375/324 426/376/324 427/377/324 428/378/324 429/379/324 430/380/324 431/381/324 432/382/324 433/383/324 434/384/324 435/385/324 436/386/324 437/387/324 438/388/324 439/389/324 440/390/324 441/391/324 442/392/324 443/393/324 444/394/324 445/395/324 446/396/324 447/397/324 448/398/324 +f 296/316/325 297/315/326 425/399/326 424/400/325 +f 310/268/199 311/365/327 439/401/327 438/269/199 +f 297/315/326 298/308/328 426/402/328 425/399/326 +f 311/365/327 312/312/329 440/403/329 439/401/327 +f 298/308/328 299/307/330 427/404/330 426/402/328 +f 312/312/329 313/311/331 441/405/331 440/403/329 +f 299/307/330 300/363/332 428/406/332 427/404/330 +f 313/311/331 314/361/333 442/407/333 441/405/331 +f 300/363/332 301/359/334 429/408/334 428/406/332 +f 314/361/333 315/357/335 443/409/335 442/407/333 +f 301/359/334 302/355/336 430/410/336 429/408/334 +f 315/357/335 316/353/337 444/411/337 443/409/335 +f 302/355/336 303/349/338 431/412/338 430/410/336 +f 289/351/339 290/347/340 418/413/340 417/414/339 +f 316/353/337 317/300/341 445/415/341 444/411/337 +f 303/349/338 304/344/342 432/416/342 431/412/338 +f 290/347/340 291/342/343 419/417/343 418/413/340 +f 317/300/341 318/299/344 446/418/344 445/415/341 +f 304/344/342 305/340/345 433/419/345 432/416/342 +f 291/342/343 292/338/346 420/420/346 419/417/343 +f 318/299/344 319/336/347 447/421/347 446/418/344 +f 305/340/345 306/334/348 434/422/348 433/419/345 +f 292/338/346 293/332/349 421/423/349 420/420/346 +f 319/336/347 320/328/350 448/424/350 447/421/347 +f 306/334/348 307/330/351 435/425/351 434/422/348 +f 293/332/349 294/324/352 422/426/352 421/423/349 +f 320/328/350 289/327/339 417/427/339 448/424/350 +f 307/330/351 308/366/353 436/428/353 435/425/351 +f 294/324/352 295/320/354 423/429/354 422/426/352 +f 308/366/353 309/267/198 437/270/198 436/428/353 +f 295/320/354 296/316/325 424/400/325 423/429/354 +f 449/430/163 450/431/163 480/432/163 479/433/163 478/434/163 477/435/163 476/436/163 475/437/163 474/438/163 473/439/163 472/440/163 471/441/163 470/442/163 469/443/163 468/444/163 467/445/163 466/446/163 465/447/163 464/448/163 463/449/163 462/450/163 461/451/163 460/452/163 459/453/163 458/454/163 457/455/163 456/456/163 455/457/163 454/458/163 453/459/163 452/460/163 451/461/163 +f 232/204/16 231/203/14 455/203/14 456/204/16 +f 246/205/44 245/107/42 469/107/42 470/205/44 +f 233/206/18 232/204/16 456/204/16 457/206/18 +f 247/207/46 246/205/44 470/205/44 471/207/46 +f 234/208/20 233/206/18 457/206/18 458/208/20 +f 248/209/48 247/207/46 471/207/46 472/209/48 +f 235/210/22 234/208/20 458/208/20 459/210/22 +f 249/211/50 248/209/48 472/209/48 473/211/50 +f 236/212/24 235/210/22 459/210/22 460/212/24 +f 250/213/52 249/211/50 473/211/50 474/213/52 +f 237/214/26 236/212/24 460/212/24 461/214/26 +f 251/215/54 250/213/52 474/213/52 475/215/54 +f 238/216/28 237/214/26 461/214/26 462/216/28 +f 252/217/56 251/215/54 475/215/54 476/217/56 +f 239/218/30 238/216/28 462/216/28 463/218/30 +f 225/220/4 226/219/1 450/219/1 449/220/4 +f 253/221/58 252/217/56 476/217/56 477/221/58 +f 240/222/32 239/218/30 463/218/30 464/222/32 +f 227/223/6 225/220/4 449/220/4 451/223/6 +f 254/224/60 253/221/58 477/221/58 478/224/60 +f 241/225/34 240/222/32 464/222/32 465/225/34 +f 228/226/8 227/223/6 451/223/6 452/226/8 +f 255/227/62 254/224/60 478/224/60 479/227/62 +f 242/228/36 241/225/34 465/225/34 466/228/36 +f 229/229/10 228/226/8 452/226/8 453/229/10 +f 256/230/66 255/227/62 479/227/62 480/230/66 +f 243/231/38 242/228/36 466/228/36 467/231/38 +f 230/232/12 229/229/10 453/229/10 454/232/12 +f 226/233/1 256/230/66 480/230/66 450/233/1 +f 244/106/40 243/231/38 467/231/38 468/106/40 +f 231/203/14 230/232/12 454/232/12 455/203/14 diff --git a/assets/textures/tescoPiwoNormal.png b/assets/textures/tescoPiwoNormal.png new file mode 100644 index 0000000..1192b94 Binary files /dev/null and b/assets/textures/tescoPiwoNormal.png differ diff --git a/assets/textures/tescoPiwoTexture.png b/assets/textures/tescoPiwoTexture.png new file mode 100644 index 0000000..fa252f1 Binary files /dev/null and b/assets/textures/tescoPiwoTexture.png differ diff --git a/build.zig b/build.zig index 0a72756..2090664 100644 --- a/build.zig +++ b/build.zig @@ -1,6 +1,6 @@ const std = @import("std"); -const sdl = @import("libs/sdl/build.zig"); -const vkgen = @import("vulkan_zig"); +const sdl = @import("sdl"); +const vkgen = @import("vulkan"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); @@ -20,7 +20,7 @@ pub fn build(b: *std.Build) void { // --- Dependencies --- // Vulkan - const vkzig_dep = b.dependency("vulkan_zig", .{ + const vkzig_dep = b.dependency("vulkan", .{ .registry = @as([]const u8, b.pathFromRoot("./vk.xml")), }); const vkzig_bindings = vkzig_dep.module("vulkan-zig"); @@ -28,15 +28,18 @@ pub fn build(b: *std.Build) void { const shader_comp = vkgen.ShaderCompileStep.create( b, - &[_][]const u8{ "glslc", "--target-env=vulkan1.3" }, + .{ .real_path = "glslc" }, + &[_][]const u8{"--target-env=vulkan1.3"}, "-o", ); shader_comp.add("shader_frag", "src/shaders/shader.frag", .{}); shader_comp.add("shader_vert", "src/shaders/shader.vert", .{}); + shader_comp.add("second_frag", "src/shaders/second.frag", .{}); + shader_comp.add("second_vert", "src/shaders/second.vert", .{}); exe.root_module.addImport("shaders", shader_comp.getModule()); // SDL2 - const sdl_sdk = sdl.init(b, null, null); + const sdl_sdk = sdl.init(b, .{}); sdl_sdk.link(exe, .dynamic, sdl.Library.SDL2); exe.root_module.addImport("sdl2", sdl_sdk.getWrapperModuleVulkan(vkzig_bindings)); diff --git a/build.zig.zon b/build.zig.zon index bf20cb5..bd0d9d0 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -6,9 +6,10 @@ .dependencies = .{ .zmath = .{ .path = "libs/zmath" }, .zstbi = .{ .path = "libs/zstbi" }, - .vulkan_zig = .{ - .url = "https://github.com/Snektron/vulkan-zig/archive/9f6e6177b1fdb3ed22231d9216a24480e84cfa5e.tar.gz", - .hash = "1220f2961df224f7d35dee774b26194b8b937cc252fa8e4023407776c58521d53e38", + .sdl = .{ .path = "libs/sdl" }, + .vulkan = .{ + .url = "https://github.com/Snektron/vulkan-zig/archive/f7b21d034f527765f62935de1b62855033621989.tar.gz", + .hash = "12201e484e173e70634e664864763223427703e677f28c63ebec9332513c8ca5121c", }, .obj = .{ .url = "https://github.com/chip2n/zig-obj/archive/58f524ed6834790b29ac1e97b2f9e6b7de7b5346.tar.gz", diff --git a/libs/sdl b/libs/sdl index 9663dc7..172a84e 160000 --- a/libs/sdl +++ b/libs/sdl @@ -1 +1 @@ -Subproject commit 9663dc70c19b13afcb4b9f596c928d7b2838e548 +Subproject commit 172a84e7b5ce7d4891b8b970c68f4532f96aa7e9 diff --git a/libs/zmath/src/zmath.zig b/libs/zmath/src/zmath.zig index e38eebf..782a3d1 100644 --- a/libs/zmath/src/zmath.zig +++ b/libs/zmath/src/zmath.zig @@ -329,7 +329,7 @@ pub inline fn boolx16( // zig fmt: on pub inline fn veclen(comptime T: type) comptime_int { - return @typeInfo(T).Vector.len; + return @typeInfo(T).vector.len; } pub inline fn splat(comptime T: type, value: f32) T { @@ -413,14 +413,14 @@ pub inline fn storeArr4(arr: *[4]f32, v: F32x4) void { } pub inline fn arr3Ptr(ptr: anytype) *const [3]f32 { - comptime assert(@typeInfo(@TypeOf(ptr)) == .Pointer); + comptime assert(@typeInfo(@TypeOf(ptr)) == .pointer); const T = std.meta.Child(@TypeOf(ptr)); comptime assert(T == F32x4); return @as(*const [3]f32, @ptrCast(ptr)); } pub inline fn arrNPtr(ptr: anytype) [*]const f32 { - comptime assert(@typeInfo(@TypeOf(ptr)) == .Pointer); + comptime assert(@typeInfo(@TypeOf(ptr)) == .pointer); const T = std.meta.Child(@TypeOf(ptr)); comptime assert(T == Mat or T == F32x4 or T == F32x8 or T == F32x16); return @as([*]const f32, @ptrCast(ptr)); diff --git a/src/main.zig b/src/main.zig index 5937000..9855338 100644 --- a/src/main.zig +++ b/src/main.zig @@ -71,7 +71,7 @@ pub fn main() !void { var angle: f32 = 0.0; const move_speed: f32 = 1000; - const model_handle = try vulkan_renderer.createMeshModel("teapot.obj"); + const model_handle = try vulkan_renderer.createMeshModel("tescoPiwo.obj"); mainLoop: while (true) { while (sdl.pollEvent()) |ev| { diff --git a/src/shaders/second.frag b/src/shaders/second.frag new file mode 100644 index 0000000..7c98a5c --- /dev/null +++ b/src/shaders/second.frag @@ -0,0 +1,22 @@ +#version 450 + +// Colour output from subpass 1 +layout(input_attachment_index = 0, binding = 0) uniform subpassInput inputColour; +// Depth output from subpass 1 +layout(input_attachment_index = 1, binding = 1) uniform subpassInput inputDepth; + +layout(location = 0) out vec4 colour; + +void main() { + int xHalf = 800 / 2; + if (gl_FragCoord.x > xHalf) { + float lowerBound = 0.98; + float upperBound = 1; + + float depth = subpassLoad(inputDepth).r; + float depthColourScaled = 1.0f - ((depth - lowerBound) / (upperBound - lowerBound)); + colour = vec4(subpassLoad(inputColour).rgb * depthColourScaled, 1.0f); + } else { + colour = subpassLoad(inputColour).rgba; + } +} diff --git a/src/shaders/second.vert b/src/shaders/second.vert new file mode 100644 index 0000000..e9b3199 --- /dev/null +++ b/src/shaders/second.vert @@ -0,0 +1,12 @@ +#version 450 + +// Array for triangle that fills screen +vec2 positions[3] = vec2[]( + vec2(3.0, -1.0), + vec2(-1.0, -1.0), + vec2(-1.0, 3.0) +); + +void main() { + gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0); +} diff --git a/src/vulkan_renderer.zig b/src/vulkan_renderer.zig index f58728a..75eabd9 100644 --- a/src/vulkan_renderer.zig +++ b/src/vulkan_renderer.zig @@ -82,19 +82,26 @@ pub const VulkanRenderer = struct { swapchain_framebuffers: []vk.Framebuffer, command_buffers: []CommandBuffer, - depth_buffer_image: vk.Image, - depth_buffer_image_memory: vk.DeviceMemory, - depth_buffer_image_view: vk.ImageView, + depth_buffer_image: []vk.Image, + depth_buffer_image_memory: []vk.DeviceMemory, + depth_buffer_image_view: []vk.ImageView, + + colour_buffer_image: []vk.Image, + colour_buffer_image_memory: []vk.DeviceMemory, + colour_buffer_image_view: []vk.ImageView, // Descriptors descriptor_set_layout: vk.DescriptorSetLayout, sampler_set_layout: vk.DescriptorSetLayout, + input_set_layout: vk.DescriptorSetLayout, push_constant_range: vk.PushConstantRange, descriptor_pool: vk.DescriptorPool, sampler_descriptor_pool: vk.DescriptorPool, + input_descriptor_pool: vk.DescriptorPool, descriptor_sets: []vk.DescriptorSet, sampler_descriptor_sets: std.ArrayList(vk.DescriptorSet), + input_descriptor_sets: []vk.DescriptorSet, vp_uniform_buffer: []vk.Buffer, vp_uniform_buffer_memory: []vk.DeviceMemory, @@ -109,6 +116,10 @@ pub const VulkanRenderer = struct { // Pipeline graphics_pipeline: vk.Pipeline, pipeline_layout: vk.PipelineLayout, + + second_pipeline: vk.Pipeline, + second_pipeline_layout: vk.PipelineLayout, + render_pass: vk.RenderPass, // Pools @@ -146,6 +157,7 @@ pub const VulkanRenderer = struct { try self.getPhysicalDevice(); try self.createLogicalDevice(); try self.createSwapchain(); + try self.createColourBufferImage(); try self.createDepthBufferImage(); try self.createRenderPass(); try self.createDescriptorSetLayout(); @@ -154,12 +166,14 @@ pub const VulkanRenderer = struct { try self.createFramebuffers(); try self.createCommandPool(); + self.sampler_descriptor_sets = try std.ArrayList(vk.DescriptorSet).initCapacity(self.allocator, self.swapchain_images.len); + try self.createCommandBuffers(); try self.createTextureSampler(); try self.createUniformBuffers(); try self.createDescriptorPool(); try self.createDescriptorSets(); - + try self.createInputDescriptorSets(); try self.createSynchronisation(); self.image_files = std.ArrayList(img.Image).init(self.allocator); @@ -167,7 +181,6 @@ pub const VulkanRenderer = struct { self.texture_image_memory = std.ArrayList(vk.DeviceMemory).init(self.allocator); self.texture_image_views = std.ArrayList(vk.ImageView).init(self.allocator); self.model_list = std.ArrayList(MeshModel).init(allocator); - self.sampler_descriptor_sets = std.ArrayList(vk.DescriptorSet).init(self.allocator); const aspect: f32 = @as(f32, @floatFromInt(self.extent.width)) / @as(f32, @floatFromInt(self.extent.height)); self.ubo_view_projection.projection = zm.perspectiveFovRh( @@ -289,15 +302,34 @@ pub const VulkanRenderer = struct { self.texture_image_memory.deinit(); self.texture_image_views.deinit(); - self.device.destroyImageView(self.depth_buffer_image_view, null); - self.device.destroyImage(self.depth_buffer_image, null); - self.device.freeMemory(self.depth_buffer_image_memory, null); + for (0..self.depth_buffer_image.len) |i| { + self.device.destroyImageView(self.depth_buffer_image_view[i], null); + self.device.destroyImage(self.depth_buffer_image[i], null); + self.device.freeMemory(self.depth_buffer_image_memory[i], null); + } + self.allocator.free(self.depth_buffer_image); + self.allocator.free(self.depth_buffer_image_memory); + self.allocator.free(self.depth_buffer_image_view); + + for (0..self.colour_buffer_image.len) |i| { + self.device.destroyImageView(self.colour_buffer_image_view[i], null); + self.device.destroyImage(self.colour_buffer_image[i], null); + self.device.freeMemory(self.colour_buffer_image_memory[i], null); + } + + self.allocator.free(self.colour_buffer_image); + self.allocator.free(self.colour_buffer_image_memory); + self.allocator.free(self.colour_buffer_image_view); + + self.device.destroyDescriptorPool(self.input_descriptor_pool, null); self.device.destroyDescriptorPool(self.descriptor_pool, null); self.device.destroyDescriptorSetLayout(self.descriptor_set_layout, null); self.device.destroyDescriptorPool(self.sampler_descriptor_pool, null); self.device.destroyDescriptorSetLayout(self.sampler_set_layout, null); + self.device.destroyDescriptorSetLayout(self.input_set_layout, null); self.sampler_descriptor_sets.deinit(); + self.allocator.free(self.input_descriptor_sets); for (0..self.swapchain_images.len) |i| { self.device.destroyBuffer(self.vp_uniform_buffer[i], null); @@ -322,6 +354,8 @@ pub const VulkanRenderer = struct { self.allocator.free(self.swapchain_framebuffers); + self.device.destroyPipeline(self.second_pipeline, null); + self.device.destroyPipelineLayout(self.second_pipeline_layout, null); self.device.destroyPipeline(self.graphics_pipeline, null); self.device.destroyPipelineLayout(self.pipeline_layout, null); self.device.destroyRenderPass(self.render_pass, null); @@ -523,8 +557,65 @@ pub const VulkanRenderer = struct { fn createRenderPass(self: *Self) !void { // -- Attachments -- - // Colour attachment of the render pass + + var subpasses: [2]vk.SubpassDescription = undefined; + + // Subpass 1 attachments and references (input attachments) + + // Colour attachment (input) + const colour_format = chooseSupportedFormat( + self.physical_device, + self.instance, + &[_]vk.Format{.r8g8b8a8_srgb}, + .optimal, + .{ .color_attachment_bit = true }, + ); const colour_attachment: vk.AttachmentDescription = .{ + .format = colour_format.?, + .samples = .{ .@"1_bit" = true }, + .load_op = .clear, + .store_op = .dont_care, + .stencil_load_op = .dont_care, + .stencil_store_op = .dont_care, + .initial_layout = .undefined, + .final_layout = .color_attachment_optimal, + }; + + // Depth attachment (input) + const depth_attachment: vk.AttachmentDescription = .{ + .format = self.depth_format, + .samples = .{ .@"1_bit" = true }, + .load_op = .clear, + .store_op = .dont_care, + .stencil_load_op = .dont_care, + .stencil_store_op = .dont_care, + .initial_layout = .undefined, + .final_layout = .depth_stencil_attachment_optimal, + }; + + // Colour attachment (input) reference + const colour_attachment_reference: vk.AttachmentReference = .{ + .attachment = 1, + .layout = .color_attachment_optimal, + }; + + // Depth attachment (input) reference + const depth_attachment_reference: vk.AttachmentReference = .{ + .attachment = 2, + .layout = .depth_stencil_attachment_optimal, + }; + + subpasses[0] = .{ + .pipeline_bind_point = .graphics, // Pipeline type subpass is to be bound to + .color_attachment_count = 1, + .p_color_attachments = @ptrCast(&colour_attachment_reference), + .p_depth_stencil_attachment = &depth_attachment_reference, + }; + + // Subpass 2 attachments and references + + // Colour attachment of the render pass + const swapchain_colour_attachment: vk.AttachmentDescription = .{ .format = self.swapchain_image_format, // Format to use for attachment .samples = .{ .@"1_bit" = true }, // Number of samples to write for multisampling .load_op = .clear, // Describes what to do with attachment before rendering @@ -537,42 +628,38 @@ pub const VulkanRenderer = struct { .final_layout = vk.ImageLayout.present_src_khr, // Image data layout after render pass (to change to) }; - // Depth attachment of render pass - const depth_attachment: vk.AttachmentDescription = .{ - .format = self.depth_format, - .samples = .{ .@"1_bit" = true }, - .load_op = .clear, - .store_op = .dont_care, - .stencil_load_op = .dont_care, - .stencil_store_op = .dont_care, - .initial_layout = .undefined, - .final_layout = .depth_stencil_attachment_optimal, - }; - - // -- References -- // Attachment reference uses an attachment index that refers to index in the attachment list passed to render pass create info - const colour_attachment_reference: vk.AttachmentReference = .{ + const swapchain_colour_attachment_reference: vk.AttachmentReference = .{ .attachment = 0, .layout = vk.ImageLayout.color_attachment_optimal, }; - const depth_attachment_reference: vk.AttachmentReference = .{ - .attachment = 1, - .layout = vk.ImageLayout.depth_stencil_attachment_optimal, + // References to attachments that subpass will take input from + const input_references = [_]vk.AttachmentReference{ + .{ + .attachment = 1, // Colour attachment + .layout = .shader_read_only_optimal, + }, + .{ + .attachment = 2, // Depth attachment + .layout = .shader_read_only_optimal, + }, }; - // Information about a particular subpass the render pass is using - const subpass: vk.SubpassDescription = .{ - .pipeline_bind_point = .graphics, // Pipeline type subpass is to be bound to + subpasses[1] = .{ + .pipeline_bind_point = .graphics, .color_attachment_count = 1, - .p_color_attachments = @ptrCast(&colour_attachment_reference), - .p_depth_stencil_attachment = &depth_attachment_reference, + .p_color_attachments = @ptrCast(&swapchain_colour_attachment_reference), + .input_attachment_count = @intCast(input_references.len), + .p_input_attachments = &input_references, }; + // -- Subpass dependencies + // Need to determine when layout transitions occur using subpass dependencies - const subpass_dependencies = [2]vk.SubpassDependency{ + const subpass_dependencies = [_]vk.SubpassDependency{ // Conversion from VK_IMAGE_LAYOUT_UNDEFINED to VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL - vk.SubpassDependency{ + .{ // Transition must happen after... .src_subpass = vk.SUBPASS_EXTERNAL, // Subpass index (VK_SUBPASS_EXTERNAL = outside of renderpass) .src_stage_mask = .{ .bottom_of_pipe_bit = true }, // Pipeline stage @@ -582,8 +669,17 @@ pub const VulkanRenderer = struct { .dst_stage_mask = .{ .color_attachment_output_bit = true }, .dst_access_mask = .{ .color_attachment_read_bit = true, .color_attachment_write_bit = true }, }, + // Subpass 1 layout (colour/depth) to subpass 2 layout (shader read) + .{ + .src_subpass = 0, + .src_stage_mask = .{ .color_attachment_output_bit = true }, + .src_access_mask = .{ .color_attachment_write_bit = true }, + .dst_subpass = 1, + .dst_stage_mask = .{ .fragment_shader_bit = true }, + .dst_access_mask = .{ .shader_read_bit = true }, + }, // Conversion from VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL to VK_IMAGE_LAYOUT_PRESENT_SRC_KHR - vk.SubpassDependency{ + .{ // Transition must happen after... .src_subpass = 0, .src_stage_mask = .{ .color_attachment_output_bit = true }, @@ -596,13 +692,13 @@ pub const VulkanRenderer = struct { }; // Order matters - const render_pass_attachments = [_]vk.AttachmentDescription{ colour_attachment, depth_attachment }; + const render_pass_attachments = [_]vk.AttachmentDescription{ swapchain_colour_attachment, colour_attachment, depth_attachment }; const render_pass_create_info: vk.RenderPassCreateInfo = .{ .attachment_count = @intCast(render_pass_attachments.len), .p_attachments = &render_pass_attachments, - .subpass_count = 1, - .p_subpasses = @ptrCast(&subpass), + .subpass_count = @intCast(subpasses.len), + .p_subpasses = &subpasses, .dependency_count = @intCast(subpass_dependencies.len), .p_dependencies = &subpass_dependencies, }; @@ -651,6 +747,34 @@ pub const VulkanRenderer = struct { }; self.sampler_set_layout = try self.device.createDescriptorSetLayout(&texture_layout_info, null); + + // -- Create input attachment image descriptor set layout + // Colour input binding + const colour_input_layout_binding: vk.DescriptorSetLayoutBinding = .{ + .binding = 0, + .descriptor_type = .input_attachment, + .descriptor_count = 1, + .stage_flags = .{ .fragment_bit = true }, + }; + + // Depth input binding + const depth_input_layout_binding: vk.DescriptorSetLayoutBinding = .{ + .binding = 1, + .descriptor_type = .input_attachment, + .descriptor_count = 1, + .stage_flags = .{ .fragment_bit = true }, + }; + + // Array of input attachment bindings + const input_bindings = [_]vk.DescriptorSetLayoutBinding{ colour_input_layout_binding, depth_input_layout_binding }; + + // Create a descriptor set layout for input attachments + const input_layout_create_info: vk.DescriptorSetLayoutCreateInfo = .{ + .binding_count = @intCast(input_bindings.len), + .p_bindings = &input_bindings, + }; + + self.input_set_layout = try self.device.createDescriptorSetLayout(&input_layout_create_info, null); } fn createPushConstantRange(self: *Self) !void { @@ -662,7 +786,45 @@ pub const VulkanRenderer = struct { }; } + fn createColourBufferImage(self: *Self) !void { + self.colour_buffer_image = try self.allocator.alloc(vk.Image, self.swapchain_images.len); + self.colour_buffer_image_memory = try self.allocator.alloc(vk.DeviceMemory, self.swapchain_images.len); + self.colour_buffer_image_view = try self.allocator.alloc(vk.ImageView, self.swapchain_images.len); + + // Get supported format for colour attachment + const colour_format = chooseSupportedFormat( + self.physical_device, + self.instance, + &[_]vk.Format{.r8g8b8a8_srgb}, + .optimal, + .{ .color_attachment_bit = true }, + ) orelse return error.FormatNotSupported; + + // Create colour buffers + for (0..self.colour_buffer_image.len) |i| { + self.colour_buffer_image[i] = try self.createImage( + self.extent.width, + self.extent.height, + colour_format, + .optimal, + .{ .color_attachment_bit = true, .input_attachment_bit = true }, + .{ .device_local_bit = true }, + &self.colour_buffer_image_memory[i], + ); + + self.colour_buffer_image_view[i] = try self.createImageView( + self.colour_buffer_image[i], + colour_format, + .{ .color_bit = true }, + ); + } + } + fn createDepthBufferImage(self: *Self) !void { + self.depth_buffer_image = try self.allocator.alloc(vk.Image, self.swapchain_images.len); + self.depth_buffer_image_memory = try self.allocator.alloc(vk.DeviceMemory, self.swapchain_images.len); + self.depth_buffer_image_view = try self.allocator.alloc(vk.ImageView, self.swapchain_images.len); + // Get supported depth buffer format const formats = [_]vk.Format{ .d32_sfloat_s8_uint, .d32_sfloat, .d24_unorm_s8_uint }; self.depth_format = chooseSupportedFormat( @@ -673,19 +835,21 @@ pub const VulkanRenderer = struct { .{ .depth_stencil_attachment_bit = true }, ) orelse return error.UnsupportedDepthBufferFormat; - // Create depth buffer image - self.depth_buffer_image = try self.createImage( - self.extent.width, - self.extent.height, - self.depth_format, - .optimal, - .{ .depth_stencil_attachment_bit = true }, - .{ .device_local_bit = true }, - &self.depth_buffer_image_memory, - ); + for (0..self.depth_buffer_image.len) |i| { + // Create depth buffer image + self.depth_buffer_image[i] = try self.createImage( + self.extent.width, + self.extent.height, + self.depth_format, + .optimal, + .{ .depth_stencil_attachment_bit = true, .input_attachment_bit = true }, + .{ .device_local_bit = true }, + &self.depth_buffer_image_memory[i], + ); - // Create depth buffer image view - self.depth_buffer_image_view = try self.createImageView(self.depth_buffer_image, self.depth_format, .{ .depth_bit = true }); + // Create depth buffer image view + self.depth_buffer_image_view[i] = try self.createImageView(self.depth_buffer_image[i], self.depth_format, .{ .depth_bit = true }); + } } fn createGraphicsPipeline(self: *Self) !void { @@ -705,14 +869,14 @@ pub const VulkanRenderer = struct { // -- Shader stage creation information -- // Vertex stage creation information - const vertex_shader_create_info: vk.PipelineShaderStageCreateInfo = .{ + var vertex_shader_create_info: vk.PipelineShaderStageCreateInfo = .{ .stage = .{ .vertex_bit = true }, .module = vert, .p_name = "main", }; // Fragment stage creation information - const fragment_shader_create_info: vk.PipelineShaderStageCreateInfo = .{ + var fragment_shader_create_info: vk.PipelineShaderStageCreateInfo = .{ .stage = .{ .fragment_bit = true }, .module = frag, .p_name = "main", @@ -758,7 +922,7 @@ pub const VulkanRenderer = struct { }; // -- Vertex input -- - const vertex_input_create_info: vk.PipelineVertexInputStateCreateInfo = .{ + var vertex_input_create_info: vk.PipelineVertexInputStateCreateInfo = .{ .vertex_binding_description_count = 1, .p_vertex_binding_descriptions = @ptrCast(&binding_description), // List of vertex binding descriptions (data spacing, stride info) .vertex_attribute_description_count = @intCast(attribute_descriptions.len), @@ -864,7 +1028,7 @@ pub const VulkanRenderer = struct { self.pipeline_layout = try self.device.createPipelineLayout(&pipeline_layout_create_info, null); // -- Depth stencil testing -- - const depth_stencil_create_info: vk.PipelineDepthStencilStateCreateInfo = .{ + var depth_stencil_create_info: vk.PipelineDepthStencilStateCreateInfo = .{ .depth_test_enable = vk.TRUE, // Enable checking depth to determine fragment write .depth_write_enable = vk.TRUE, // Enable writing to depth buffer to replace all values .depth_compare_op = .less, // Comparison operation that allows an overwrite (is in front) @@ -877,7 +1041,7 @@ pub const VulkanRenderer = struct { }; // -- Graphics pipeline creation -- - const pipeline_create_info: vk.GraphicsPipelineCreateInfo = .{ + var pipeline_create_info: vk.GraphicsPipelineCreateInfo = .{ .stage_count = @intCast(shader_create_infos.len), // Number of shader stages .p_stages = &shader_create_infos, // List of shader stages .p_vertex_input_state = &vertex_input_create_info, @@ -903,6 +1067,57 @@ pub const VulkanRenderer = struct { null, @ptrCast(&self.graphics_pipeline), ); + + // -- Create second pass pipeline + // Second pass shaders + const second_vert_shader_module = try self.device.createShaderModule(&.{ + .code_size = shaders.second_vert.len, + .p_code = @ptrCast(&shaders.second_vert), + }, null); + defer self.device.destroyShaderModule(second_vert_shader_module, null); + + const second_frag_shader_module = try self.device.createShaderModule(&.{ + .code_size = shaders.second_frag.len, + .p_code = @ptrCast(&shaders.second_frag), + }, null); + defer self.device.destroyShaderModule(second_frag_shader_module, null); + + // Set new shaders + vertex_shader_create_info.module = second_vert_shader_module; + fragment_shader_create_info.module = second_frag_shader_module; + + const second_shader_stages = [_]vk.PipelineShaderStageCreateInfo{ vertex_shader_create_info, fragment_shader_create_info }; + + // No vertex data for second pass + vertex_input_create_info.vertex_binding_description_count = 0; + vertex_input_create_info.p_vertex_binding_descriptions = null; + vertex_input_create_info.vertex_attribute_description_count = 0; + vertex_input_create_info.p_vertex_attribute_descriptions = null; + + // Don't want to write to depth buffer + depth_stencil_create_info.depth_write_enable = vk.FALSE; + + // Create new pipeline layout + const second_pipeline_layout_create_info: vk.PipelineLayoutCreateInfo = .{ + .set_layout_count = 1, + .p_set_layouts = @ptrCast(&self.input_set_layout), + }; + + self.second_pipeline_layout = try self.device.createPipelineLayout(&second_pipeline_layout_create_info, null); + + pipeline_create_info.stage_count = @intCast(second_shader_stages.len); + pipeline_create_info.p_stages = &second_shader_stages; + pipeline_create_info.layout = self.second_pipeline_layout; + pipeline_create_info.subpass = 1; + + // Create second pipeline + _ = try self.device.createGraphicsPipelines( + .null_handle, + 1, + @ptrCast(&pipeline_create_info), + null, + @ptrCast(&self.second_pipeline), + ); } fn createFramebuffers(self: *Self) !void { @@ -911,7 +1126,11 @@ pub const VulkanRenderer = struct { // Create a frammebuffer for each swapchain image for (self.swapchain_images, 0..) |swapchain_image, i| { // Order matters - const attachments = [_]vk.ImageView{ swapchain_image.image_view, self.depth_buffer_image_view }; + const attachments = [_]vk.ImageView{ + swapchain_image.image_view, + self.colour_buffer_image_view[i], + self.depth_buffer_image_view[i], + }; const framebuffer_create_info: vk.FramebufferCreateInfo = .{ .render_pass = self.render_pass, // Render pass layout the frambuffer will be used with @@ -1056,6 +1275,30 @@ pub const VulkanRenderer = struct { }; self.sampler_descriptor_pool = try self.device.createDescriptorPool(&sampler_pool_create_info, null); + + // -- Create input attachment descriptor pool + // Colour attachment pool size + const colour_input_pool_size: vk.DescriptorPoolSize = .{ + .type = .input_attachment, + .descriptor_count = @intCast(self.colour_buffer_image_view.len), + }; + + // Depth attachment pool size + const depth_input_pool_size: vk.DescriptorPoolSize = .{ + .type = .input_attachment, + .descriptor_count = @intCast(self.depth_buffer_image_view.len), + }; + + const input_pool_sizes = [_]vk.DescriptorPoolSize{ colour_input_pool_size, depth_input_pool_size }; + + // Create input attachment pool + const input_pool_create_info: vk.DescriptorPoolCreateInfo = .{ + .max_sets = @intCast(self.swapchain_images.len), + .pool_size_count = @intCast(input_pool_sizes.len), + .p_pool_sizes = &input_pool_sizes, + }; + + self.input_descriptor_pool = try self.device.createDescriptorPool(&input_pool_create_info, null); } fn createDescriptorSets(self: *Self) !void { @@ -1108,6 +1351,74 @@ pub const VulkanRenderer = struct { } } + fn createInputDescriptorSets(self: *Self) !void { + self.input_descriptor_sets = try self.allocator.alloc(vk.DescriptorSet, self.swapchain_images.len); + + // Fill array of layouts ready for set creation + var set_layouts = try self.allocator.alloc(vk.DescriptorSetLayout, self.swapchain_images.len); + defer self.allocator.free(set_layouts); + for (0..set_layouts.len) |i| { + set_layouts[i] = self.input_set_layout; + } + + // Input attachment descriptor set allocation info + const set_alloc_info: vk.DescriptorSetAllocateInfo = .{ + .descriptor_pool = self.input_descriptor_pool, + .descriptor_set_count = @intCast(self.swapchain_images.len), + .p_set_layouts = set_layouts.ptr, + }; + + // Allocate descriptor sets + try self.device.allocateDescriptorSets(&set_alloc_info, self.input_descriptor_sets.ptr); + + // Update each descriptor set with input attachment + for (0..self.swapchain_images.len) |i| { + // Colour attachment descriptor + const colour_attachment_descriptor: vk.DescriptorImageInfo = .{ + .image_layout = .shader_read_only_optimal, + .image_view = self.colour_buffer_image_view[i], + .sampler = .null_handle, + }; + + // Colour attachment descriptor write + const colour_write: vk.WriteDescriptorSet = .{ + .dst_set = self.input_descriptor_sets[i], + .dst_binding = 0, + .dst_array_element = 0, + .descriptor_type = .input_attachment, + .descriptor_count = 1, + .p_image_info = @ptrCast(&colour_attachment_descriptor), + .p_buffer_info = undefined, + .p_texel_buffer_view = undefined, + }; + + // Depth attachment descriptor + const depth_attachment_descriptor: vk.DescriptorImageInfo = .{ + .image_layout = .shader_read_only_optimal, + .image_view = self.depth_buffer_image_view[i], + .sampler = .null_handle, + }; + + // Depth attachment descriptor write + const depth_write: vk.WriteDescriptorSet = .{ + .dst_set = self.input_descriptor_sets[i], + .dst_binding = 1, + .dst_array_element = 0, + .descriptor_type = .input_attachment, + .descriptor_count = 1, + .p_image_info = @ptrCast(&depth_attachment_descriptor), + .p_buffer_info = undefined, + .p_texel_buffer_view = undefined, + }; + + // List of input descriptor set writes + const set_writes = [_]vk.WriteDescriptorSet{ colour_write, depth_write }; + + // Update descriptor sets + self.device.updateDescriptorSets(@intCast(set_writes.len), &set_writes, 0, null); + } + } + fn updateUniformBuffers(self: *Self, image_index: u32) !void { // Copy VP data const data = try self.device.mapMemory( @@ -1130,7 +1441,8 @@ pub const VulkanRenderer = struct { }; const clear_values = [_]vk.ClearValue{ - .{ .color = .{ .float_32 = [4]f32{ 0.6, 0.65, 0.4, 1.0 } } }, + .{ .color = .{ .float_32 = .{ 0.0, 0.0, 0.0, 0.0 } } }, + .{ .color = .{ .float_32 = .{ 0.6, 0.65, 0.4, 1.0 } } }, .{ .depth_stencil = .{ .depth = 1.0, .stencil = 1 } }, }; @@ -1204,6 +1516,21 @@ pub const VulkanRenderer = struct { } } + // Start second subpass + command_buffer.nextSubpass(.@"inline"); + + command_buffer.bindPipeline(.graphics, self.second_pipeline); + command_buffer.bindDescriptorSets( + .graphics, + self.second_pipeline_layout, + 0, + 1, + @ptrCast(&self.input_descriptor_sets[current_image]), + 0, + null, + ); + command_buffer.draw(3, 1, 0, 0); + // End render pass command_buffer.endRenderPass(); }