diff --git a/build3/stringifyShaders.bat b/build3/stringifyShaders.bat index 4d4b7ed88..9727bc0ac 100644 --- a/build3/stringifyShaders.bat +++ b/build3/stringifyShaders.bat @@ -2,16 +2,16 @@ rem @echo off -premake4 --file=stringifyKernel.lua --kernelfile="../btgui/OpenGLWindow/Shaders/instancingVS.glsl" --headerfile="../btgui/OpenGLWindow/Shaders/instancingVS.h" --stringname="instancingVertexShader" stringify -premake4 --file=stringifyKernel.lua --kernelfile="../btgui/OpenGLWindow/Shaders/instancingPS.glsl" --headerfile="../btgui/OpenGLWindow/Shaders/instancingPS.h" --stringname="instancingFragmentShader" stringify -premake4 --file=stringifyKernel.lua --kernelfile="../btgui/OpenGLWindow/Shaders/pointSpriteVS.glsl" --headerfile="../btgui/OpenGLWindow/Shaders/pointSpriteVS.h" --stringname="pointSpriteVertexShader" stringify -premake4 --file=stringifyKernel.lua --kernelfile="../btgui/OpenGLWindow/Shaders/pointSpritePS.glsl" --headerfile="../btgui/OpenGLWindow/Shaders/pointSpritePS.h" --stringname="pointSpriteFragmentShader" stringify -premake4 --file=stringifyKernel.lua --kernelfile="../btgui/OpenGLWindow/Shaders/createShadowMapInstancingPS.glsl" --headerfile="../btgui/OpenGLWindow/Shaders/createShadowMapInstancingPS.h" --stringname="createShadowMapInstancingFragmentShader" stringify -premake4 --file=stringifyKernel.lua --kernelfile="../btgui/OpenGLWindow/Shaders/createShadowMapInstancingVS.glsl" --headerfile="../btgui/OpenGLWindow/Shaders/createShadowMapInstancingVS.h" --stringname="createShadowMapInstancingVertexShader" stringify -premake4 --file=stringifyKernel.lua --kernelfile="../btgui/OpenGLWindow/Shaders/useShadowMapInstancingPS.glsl" --headerfile="../btgui/OpenGLWindow/Shaders/useShadowMapInstancingPS.h" --stringname="useShadowMapInstancingFragmentShader" stringify -premake4 --file=stringifyKernel.lua --kernelfile="../btgui/OpenGLWindow/Shaders/useShadowMapInstancingVS.glsl" --headerfile="../btgui/OpenGLWindow/Shaders/useShadowMapInstancingVS.h" --stringname="useShadowMapInstancingVertexShader" stringify -premake4 --file=stringifyKernel.lua --kernelfile="../btgui/OpenGLWindow/Shaders/linesVS.glsl" --headerfile="../btgui/OpenGLWindow/Shaders/linesVS.h" --stringname="linesVertexShader" stringify -premake4 --file=stringifyKernel.lua --kernelfile="../btgui/OpenGLWindow/Shaders/linesPS.glsl" --headerfile="../btgui/OpenGLWindow/Shaders/linesPS.h" --stringname="linesFragmentShader" stringify +premake4 --file=stringifyKernel.lua --kernelfile="../examples/OpenGLWindow/Shaders/instancingVS.glsl" --headerfile="../examples/OpenGLWindow/Shaders/instancingVS.h" --stringname="instancingVertexShader" stringify +premake4 --file=stringifyKernel.lua --kernelfile="../examples/OpenGLWindow/Shaders/instancingPS.glsl" --headerfile="../examples/OpenGLWindow/Shaders/instancingPS.h" --stringname="instancingFragmentShader" stringify +premake4 --file=stringifyKernel.lua --kernelfile="../examples/OpenGLWindow/Shaders/pointSpriteVS.glsl" --headerfile="../examples/OpenGLWindow/Shaders/pointSpriteVS.h" --stringname="pointSpriteVertexShader" stringify +premake4 --file=stringifyKernel.lua --kernelfile="../examples/OpenGLWindow/Shaders/pointSpritePS.glsl" --headerfile="../examples/OpenGLWindow/Shaders/pointSpritePS.h" --stringname="pointSpriteFragmentShader" stringify +premake4 --file=stringifyKernel.lua --kernelfile="../examples/OpenGLWindow/Shaders/createShadowMapInstancingPS.glsl" --headerfile="../examples/OpenGLWindow/Shaders/createShadowMapInstancingPS.h" --stringname="createShadowMapInstancingFragmentShader" stringify +premake4 --file=stringifyKernel.lua --kernelfile="../examples/OpenGLWindow/Shaders/createShadowMapInstancingVS.glsl" --headerfile="../examples/OpenGLWindow/Shaders/createShadowMapInstancingVS.h" --stringname="createShadowMapInstancingVertexShader" stringify +premake4 --file=stringifyKernel.lua --kernelfile="../examples/OpenGLWindow/Shaders/useShadowMapInstancingPS.glsl" --headerfile="../examples/OpenGLWindow/Shaders/useShadowMapInstancingPS.h" --stringname="useShadowMapInstancingFragmentShader" stringify +premake4 --file=stringifyKernel.lua --kernelfile="../examples/OpenGLWindow/Shaders/useShadowMapInstancingVS.glsl" --headerfile="../examples/OpenGLWindow/Shaders/useShadowMapInstancingVS.h" --stringname="useShadowMapInstancingVertexShader" stringify +premake4 --file=stringifyKernel.lua --kernelfile="../examples/OpenGLWindow/Shaders/linesVS.glsl" --headerfile="../examples/OpenGLWindow/Shaders/linesVS.h" --stringname="linesVertexShader" stringify +premake4 --file=stringifyKernel.lua --kernelfile="../examples/OpenGLWindow/Shaders/linesPS.glsl" --headerfile="../examples/OpenGLWindow/Shaders/linesPS.h" --stringname="linesFragmentShader" stringify diff --git a/data/multibody.bullet b/data/multibody.bullet index 9262fb2b3..55457695a 100644 Binary files a/data/multibody.bullet and b/data/multibody.bullet differ diff --git a/data/slope.bullet b/data/slope.bullet index 01617a5c3..035cc6a6b 100644 Binary files a/data/slope.bullet and b/data/slope.bullet differ diff --git a/data/sphere8.mtl b/data/sphere8.mtl new file mode 100644 index 000000000..5c0065662 --- /dev/null +++ b/data/sphere8.mtl @@ -0,0 +1,7 @@ +newmtl acmat_0 +Kd 1 1 1 +Ka 0.2 0.2 0.2 +Ks 0.2 0.2 0.2 +Ns 16 +Tr 0 +map_Kd uvmap.png diff --git a/data/sphere8.obj b/data/sphere8.obj new file mode 100644 index 000000000..19d3606d7 --- /dev/null +++ b/data/sphere8.obj @@ -0,0 +1,1695 @@ +mtllib sphere8.mtl +g g0 +v 0.129409 -0.484548 0 +v 0.112072 -0.484548 0.0647048 +v 0.0647047 -0.484548 0.112072 +v 0 -0.484548 0.129409 +v -0.0647047 -0.484548 0.112072 +v -0.112072 -0.484548 0.0647048 +v -0.129409 -0.484548 0 +v -0.112072 -0.484548 -0.0647048 +v -0.0647047 -0.484548 -0.112072 +v 0 -0.484548 -0.129409 +v 0.0647048 -0.484548 -0.112072 +v 0.112072 -0.484548 -0.0647047 +v 0.25 -0.434434 0 +v 0.216506 -0.434434 0.125 +v 0.125 -0.434434 0.216506 +v 0 -0.434434 0.25 +v -0.125 -0.434434 0.216506 +v -0.216506 -0.434434 0.125 +v -0.25 -0.434434 0 +v -0.216506 -0.434434 -0.125 +v -0.125 -0.434434 -0.216506 +v 2.98023e-008 -0.434434 -0.25 +v 0.125 -0.434434 -0.216506 +v 0.216506 -0.434434 -0.125 +v 0.353553 -0.354714 0 +v 0.306186 -0.354714 0.176777 +v 0.176777 -0.354714 0.306186 +v 0 -0.354714 0.353553 +v -0.176777 -0.354714 0.306186 +v -0.306186 -0.354714 0.176777 +v -0.353553 -0.354714 0 +v -0.306186 -0.354714 -0.176777 +v -0.176777 -0.354714 -0.306186 +v 2.98023e-008 -0.354714 -0.353553 +v 0.176777 -0.354714 -0.306186 +v 0.306186 -0.354714 -0.176777 +v 0.433013 -0.25082 0 +v 0.375 -0.25082 0.216506 +v 0.216506 -0.25082 0.375 +v 0 -0.25082 0.433013 +v -0.216506 -0.25082 0.375 +v -0.375 -0.25082 0.216506 +v -0.433013 -0.25082 0 +v -0.375 -0.25082 -0.216506 +v -0.216506 -0.25082 -0.375 +v 5.96046e-008 -0.25082 -0.433013 +v 0.216506 -0.25082 -0.375 +v 0.375 -0.25082 -0.216506 +v 0.482963 -0.129834 0 +v 0.418258 -0.129834 0.241481 +v 0.241481 -0.129834 0.418258 +v 0 -0.129834 0.482963 +v -0.241481 -0.129834 0.418258 +v -0.418258 -0.129834 0.241481 +v -0.482963 -0.129834 0 +v -0.418258 -0.129834 -0.241482 +v -0.241481 -0.129834 -0.418258 +v 5.96046e-008 -0.129834 -0.482963 +v 0.241482 -0.129834 -0.418258 +v 0.418258 -0.129834 -0.241481 +v 0.5 2.99001e-008 0 +v 0.433013 2.99001e-008 0.25 +v 0.25 2.99001e-008 0.433013 +v 0 2.99001e-008 0.5 +v -0.25 2.99001e-008 0.433013 +v -0.433013 2.99001e-008 0.25 +v -0.5 2.99001e-008 0 +v -0.433013 2.99001e-008 -0.25 +v -0.25 2.99001e-008 -0.433013 +v 5.96046e-008 2.99001e-008 -0.5 +v 0.25 2.99001e-008 -0.433013 +v 0.433013 2.99001e-008 -0.25 +v 0.482963 0.129834 0 +v 0.418258 0.129834 0.241481 +v 0.241481 0.129834 0.418258 +v 0 0.129834 0.482963 +v -0.241481 0.129834 0.418258 +v -0.418258 0.129834 0.241481 +v -0.482963 0.129834 0 +v -0.418258 0.129834 -0.241482 +v -0.241481 0.129834 -0.418258 +v 5.96046e-008 0.129834 -0.482963 +v 0.241482 0.129834 -0.418258 +v 0.418258 0.129834 -0.241481 +v 0.433013 0.25082 0 +v 0.375 0.25082 0.216506 +v 0.216506 0.25082 0.375 +v 0 0.25082 0.433013 +v -0.216506 0.25082 0.375 +v -0.375 0.25082 0.216506 +v -0.433013 0.25082 0 +v -0.375 0.25082 -0.216506 +v -0.216506 0.25082 -0.375 +v 5.96046e-008 0.25082 -0.433013 +v 0.216506 0.25082 -0.375 +v 0.375 0.25082 -0.216506 +v 0.353553 0.354714 0 +v 0.306186 0.354714 0.176777 +v 0.176777 0.354714 0.306186 +v 0 0.354714 0.353553 +v -0.176777 0.354714 0.306186 +v -0.306186 0.354714 0.176777 +v -0.353553 0.354714 0 +v -0.306186 0.354714 -0.176777 +v -0.176777 0.354714 -0.306186 +v 2.98023e-008 0.354714 -0.353553 +v 0.176777 0.354714 -0.306186 +v 0.306186 0.354714 -0.176777 +v 0.25 0.434434 0 +v 0.216506 0.434434 0.125 +v 0.125 0.434434 0.216506 +v 0 0.434434 0.25 +v -0.125 0.434434 0.216506 +v -0.216506 0.434434 0.125 +v -0.25 0.434434 0 +v -0.216506 0.434434 -0.125 +v -0.125 0.434434 -0.216506 +v 2.98023e-008 0.434434 -0.25 +v 0.125 0.434434 -0.216506 +v 0.216506 0.434434 -0.125 +v 0.129409 0.484548 0 +v 0.112072 0.484548 0.0647048 +v 0.0647047 0.484548 0.112072 +v 0 0.484548 0.129409 +v -0.0647047 0.484548 0.112072 +v -0.112072 0.484548 0.0647048 +v -0.129409 0.484548 0 +v -0.112072 0.484548 -0.0647048 +v -0.0647047 0.484548 -0.112072 +v 0 0.484548 -0.129409 +v 0.0647048 0.484548 -0.112072 +v 0.112072 0.484548 -0.0647047 +v 0 -0.497368 -0.0323524 +v 0 -0.497368 0.0323524 +v 0 0.497368 -0.0323524 +v 0 0.497368 0.0323524 +v 0.0323524 0.497368 0 +v -0.0323524 0.497368 0 +v 0.0323524 -0.497368 0 +v -0.0323524 -0.497368 0 +v 0.0161762 0.497368 -0.028018 +v -0.0161762 0.497368 0.028018 +v 0.0161762 -0.497368 -0.028018 +v -0.0161762 -0.497368 0.028018 +v -0.0161762 0.497368 -0.028018 +v 0.0161762 0.497368 0.028018 +v -0.0161762 -0.497368 -0.028018 +v 0.0161762 -0.497368 0.028018 +v -0.028018 0.497368 -0.0161762 +v 0.028018 0.497368 0.0161762 +v -0.028018 -0.497368 -0.0161762 +v 0.028018 -0.497368 0.0161762 +v 0.028018 -0.497368 -0.0161762 +v -0.028018 -0.497368 0.0161762 +v 0.028018 0.497368 -0.0161762 +v -0.028018 0.497368 0.0161762 +v 0 -0.5 -0.00202203 +v 0 -0.5 0.00202202 +v 0 0.5 -0.00202203 +v 0 0.5 0.00202202 +v -0.00101101 -0.5 -0.00175113 +v 0.00101101 -0.5 0.00175112 +v -0.00101101 0.5 -0.00175113 +v 0.00101101 0.5 0.00175112 +v 0.00101101 -0.5 -0.00175113 +v -0.00101101 -0.5 0.00175112 +v 0.00101101 0.5 -0.00175113 +v -0.00101101 0.5 0.00175112 +v 0.00175112 -0.5 -0.00101101 +v -0.00175112 -0.5 0.00101101 +v 0.00175112 0.5 -0.00101101 +v -0.00175112 0.5 0.00101101 +v 0.00202202 -0.5 -3.25963e-009 +v -0.00202202 -0.5 -3.25963e-009 +v 0.00202202 0.5 -3.25963e-009 +v -0.00202202 0.5 -3.25963e-009 +v -0.00175112 0.5 -0.00101102 +v 0.00175112 0.5 0.00101101 +v -0.00175112 -0.5 -0.00101102 +v 0.00175112 -0.5 0.00101101 +vn 0.259289 -0.9658 -1.1306e-008 +vn 0.500735 -0.865601 1.89616e-009 +vn 0.433649 -0.865601 0.250367 +vn 0.224551 -0.9658 0.129645 +vn 0.224551 -0.9658 0.129645 +vn 0.433649 -0.865601 0.250367 +vn 0.250367 -0.865601 0.433649 +vn 0.129645 -0.9658 0.224551 +vn 0.129645 -0.9658 0.224551 +vn 0.250367 -0.865601 0.433649 +vn 0 -0.865601 0.500735 +vn 0 -0.9658 0.259289 +vn 0 -0.9658 0.259289 +vn 0 -0.865601 0.500735 +vn -0.250367 -0.865601 0.433649 +vn -0.129645 -0.9658 0.224551 +vn -0.129645 -0.9658 0.224551 +vn -0.250367 -0.865601 0.433649 +vn -0.433649 -0.865601 0.250367 +vn -0.224551 -0.9658 0.129645 +vn -0.224551 -0.9658 0.129645 +vn -0.433649 -0.865601 0.250367 +vn -0.500735 -0.865601 0 +vn -0.259289 -0.9658 0 +vn -0.259289 -0.9658 0 +vn -0.500735 -0.865601 1.89616e-009 +vn -0.433649 -0.865601 -0.250367 +vn -0.224551 -0.9658 -0.129645 +vn -0.224551 -0.9658 -0.129645 +vn -0.433649 -0.865601 -0.250367 +vn -0.250367 -0.865601 -0.433649 +vn -0.129645 -0.9658 -0.224551 +vn -0.129645 -0.9658 -0.224551 +vn -0.250367 -0.865601 -0.433649 +vn 2.08578e-008 -0.865601 -0.500734 +vn 0 -0.9658 -0.259289 +vn 0 -0.9658 -0.259289 +vn 2.27539e-008 -0.865601 -0.500735 +vn 0.250367 -0.865601 -0.433649 +vn 0.129645 -0.9658 -0.224551 +vn 0.129645 -0.9658 -0.224551 +vn 0.250367 -0.865601 -0.433649 +vn 0.433649 -0.865601 -0.250367 +vn 0.224551 -0.9658 -0.129645 +vn 0.224551 -0.9658 -0.129645 +vn 0.433649 -0.865601 -0.250367 +vn 0.500735 -0.865601 1.89616e-009 +vn 0.259289 -0.9658 -1.1306e-008 +vn 0.500735 -0.865601 1.89616e-009 +vn 0.707808 -0.706405 0 +vn 0.61298 -0.706404 0.353905 +vn 0.433649 -0.865601 0.250367 +vn 0.433649 -0.865601 0.250367 +vn 0.61298 -0.706404 0.353905 +vn 0.353905 -0.706404 0.61298 +vn 0.250367 -0.865601 0.433649 +vn 0.250367 -0.865601 0.433649 +vn 0.353905 -0.706404 0.61298 +vn 0 -0.706405 0.707808 +vn 0 -0.865601 0.500735 +vn 0 -0.865601 0.500735 +vn -3.82437e-009 -0.706405 0.707808 +vn -0.353905 -0.706404 0.61298 +vn -0.250367 -0.865601 0.433649 +vn -0.250367 -0.865601 0.433649 +vn -0.353905 -0.706404 0.61298 +vn -0.61298 -0.706404 0.353905 +vn -0.433649 -0.865601 0.250367 +vn -0.433649 -0.865601 0.250367 +vn -0.61298 -0.706404 0.353905 +vn -0.707808 -0.706405 0 +vn -0.500735 -0.865601 0 +vn -0.500735 -0.865601 0 +vn -0.707808 -0.706405 -3.82437e-009 +vn -0.61298 -0.706404 -0.353905 +vn -0.433649 -0.865601 -0.250367 +vn -0.433649 -0.865601 -0.250367 +vn -0.61298 -0.706404 -0.353905 +vn -0.353905 -0.706404 -0.61298 +vn -0.250367 -0.865601 -0.433649 +vn -0.250367 -0.865601 -0.433649 +vn -0.353905 -0.706404 -0.61298 +vn 3.44193e-008 -0.706405 -0.707808 +vn 2.08578e-008 -0.865601 -0.500735 +vn 2.08578e-008 -0.865601 -0.500735 +vn 3.82437e-008 -0.706405 -0.707808 +vn 0.353905 -0.706404 -0.61298 +vn 0.250367 -0.865601 -0.433649 +vn 0.250367 -0.865601 -0.433649 +vn 0.353905 -0.706404 -0.61298 +vn 0.61298 -0.706404 -0.353905 +vn 0.433649 -0.865601 -0.250367 +vn 0.433649 -0.865601 -0.250367 +vn 0.61298 -0.706404 -0.353905 +vn 0.707808 -0.706405 -3.82437e-009 +vn 0.500735 -0.865601 1.89616e-009 +vn 0.707808 -0.706405 0 +vn 0.86646 -0.499247 0 +vn 0.750376 -0.499245 0.433231 +vn 0.61298 -0.706404 0.353905 +vn 0.61298 -0.706404 0.353905 +vn 0.750376 -0.499245 0.433231 +vn 0.433231 -0.499245 0.750376 +vn 0.353905 -0.706404 0.61298 +vn 0.353905 -0.706404 0.61298 +vn 0.433231 -0.499245 0.750376 +vn 0 -0.499247 0.86646 +vn 0 -0.706405 0.707808 +vn 0 -0.706405 0.707808 +vn 3.85612e-009 -0.499247 0.86646 +vn -0.433231 -0.499245 0.750376 +vn -0.353905 -0.706404 0.61298 +vn -0.353905 -0.706404 0.61298 +vn -0.433231 -0.499245 0.750376 +vn -0.750376 -0.499245 0.433231 +vn -0.61298 -0.706404 0.353905 +vn -0.61298 -0.706404 0.353905 +vn -0.750376 -0.499245 0.433231 +vn -0.86646 -0.499247 2.62216e-007 +vn -0.707808 -0.706405 0 +vn -0.707808 -0.706405 0 +vn -0.86646 -0.499247 2.66072e-007 +vn -0.750376 -0.499246 -0.433231 +vn -0.61298 -0.706404 -0.353905 +vn -0.61298 -0.706404 -0.353905 +vn -0.750376 -0.499246 -0.433231 +vn -0.43323 -0.499246 -0.750377 +vn -0.353905 -0.706404 -0.61298 +vn -0.353905 -0.706404 -0.61298 +vn -0.43323 -0.499246 -0.750377 +vn -2.0823e-007 -0.499247 -0.86646 +vn 3.44193e-008 -0.706405 -0.707808 +vn 3.44193e-008 -0.706405 -0.707808 +vn -2.04374e-007 -0.499247 -0.86646 +vn 0.433231 -0.499246 -0.750376 +vn 0.353905 -0.706404 -0.61298 +vn 0.353905 -0.706404 -0.61298 +vn 0.433231 -0.499246 -0.750376 +vn 0.750377 -0.499246 -0.43323 +vn 0.61298 -0.706404 -0.353905 +vn 0.61298 -0.706404 -0.353905 +vn 0.750377 -0.499246 -0.43323 +vn 0.86646 -0.499247 3.85612e-009 +vn 0.707808 -0.706405 0 +vn 0.86646 -0.499247 0 +vn 0.966056 -0.258331 0 +vn 0.836629 -0.258332 0.483028 +vn 0.750376 -0.499245 0.433231 +vn 0.750376 -0.499245 0.433231 +vn 0.836629 -0.258332 0.483028 +vn 0.483028 -0.258332 0.836629 +vn 0.433231 -0.499245 0.750376 +vn 0.433231 -0.499245 0.750376 +vn 0.483028 -0.258332 0.836629 +vn 0 -0.258331 0.966056 +vn 0 -0.499247 0.86646 +vn 0 -0.499247 0.86646 +vn 3.87916e-009 -0.258331 0.966056 +vn -0.483028 -0.258332 0.836629 +vn -0.433231 -0.499245 0.750376 +vn -0.433231 -0.499245 0.750376 +vn -0.483028 -0.258332 0.836629 +vn -0.836629 -0.258332 0.483028 +vn -0.750376 -0.499245 0.433231 +vn -0.750376 -0.499245 0.433231 +vn -0.836629 -0.258332 0.483028 +vn -0.966056 -0.258331 2.56025e-007 +vn -0.86646 -0.499247 2.62216e-007 +vn -0.86646 -0.499247 2.62216e-007 +vn -0.966056 -0.258331 2.52146e-007 +vn -0.836629 -0.258332 -0.483029 +vn -0.750376 -0.499246 -0.433231 +vn -0.750376 -0.499246 -0.433231 +vn -0.836629 -0.258332 -0.483029 +vn -0.483027 -0.258332 -0.83663 +vn -0.43323 -0.499246 -0.750377 +vn -0.43323 -0.499246 -0.750377 +vn -0.483028 -0.258332 -0.83663 +vn -1.97837e-007 -0.258331 -0.966056 +vn -2.0823e-007 -0.499247 -0.86646 +vn -2.0823e-007 -0.499247 -0.86646 +vn -1.97837e-007 -0.258331 -0.966056 +vn 0.483029 -0.258332 -0.836629 +vn 0.433231 -0.499246 -0.750376 +vn 0.433231 -0.499246 -0.750376 +vn 0.483029 -0.258332 -0.836629 +vn 0.83663 -0.258332 -0.483027 +vn 0.750377 -0.499246 -0.43323 +vn 0.750377 -0.499246 -0.43323 +vn 0.83663 -0.258332 -0.483028 +vn 0.966056 -0.258331 3.87916e-009 +vn 0.86646 -0.499247 0 +vn 0.966056 -0.258331 0 +vn 1 2.33254e-008 0 +vn 0.866025 2.33254e-008 0.5 +vn 0.836629 -0.258332 0.483028 +vn 0.836629 -0.258332 0.483028 +vn 0.866025 2.33254e-008 0.5 +vn 0.5 2.33254e-008 0.866025 +vn 0.483028 -0.258332 0.836629 +vn 0.483028 -0.258332 0.836629 +vn 0.5 2.33254e-008 0.866025 +vn 0 2.33254e-008 1 +vn 0 -0.258331 0.966056 +vn 0 -0.258331 0.966056 +vn -7.77512e-009 2.33254e-008 1 +vn -0.5 2.33254e-008 0.866025 +vn -0.483028 -0.258332 0.836629 +vn -0.483028 -0.258332 0.836629 +vn -0.5 2.33254e-008 0.866025 +vn -0.866025 2.33254e-008 0.5 +vn -0.836629 -0.258332 0.483028 +vn -0.836629 -0.258332 0.483028 +vn -0.866025 2.33254e-008 0.5 +vn -1 2.72129e-008 2.33254e-007 +vn -0.966056 -0.258331 2.56025e-007 +vn -0.966056 -0.258331 2.56025e-007 +vn -1 2.72129e-008 2.41029e-007 +vn -0.866025 2.72129e-008 -0.5 +vn -0.836629 -0.258332 -0.483029 +vn -0.836629 -0.258332 -0.483029 +vn -0.866025 2.72129e-008 -0.5 +vn -0.499999 2.33254e-008 -0.866026 +vn -0.483027 -0.258332 -0.83663 +vn -0.483027 -0.258332 -0.83663 +vn -0.499999 2.33254e-008 -0.866026 +vn -1.71053e-007 2.72129e-008 -1 +vn -1.97837e-007 -0.258331 -0.966056 +vn -1.97837e-007 -0.258331 -0.966056 +vn -1.78828e-007 2.72129e-008 -1 +vn 0.5 2.72129e-008 -0.866025 +vn 0.483028 -0.258332 -0.836629 +vn 0.483028 -0.258332 -0.836629 +vn 0.5 2.72129e-008 -0.866025 +vn 0.866026 2.33254e-008 -0.499999 +vn 0.83663 -0.258332 -0.483027 +vn 0.83663 -0.258332 -0.483027 +vn 0.866026 2.33254e-008 -0.499999 +vn 1 2.33254e-008 -7.77512e-009 +vn 0.966056 -0.258331 0 +vn 1 2.33254e-008 0 +vn 0.966056 0.258331 0 +vn 0.836629 0.258332 0.483029 +vn 0.866025 2.33254e-008 0.5 +vn 0.866025 2.33254e-008 0.5 +vn 0.836629 0.258332 0.483029 +vn 0.483029 0.258332 0.836629 +vn 0.5 2.33254e-008 0.866025 +vn 0.5 2.33254e-008 0.866025 +vn 0.483029 0.258332 0.836629 +vn 0 0.258331 0.966056 +vn 0 2.33254e-008 1 +vn 0 2.33254e-008 1 +vn 0 0.258331 0.966056 +vn -0.483029 0.258332 0.836629 +vn -0.5 2.33254e-008 0.866025 +vn -0.5 2.33254e-008 0.866025 +vn -0.483029 0.258332 0.836629 +vn -0.836629 0.258332 0.483029 +vn -0.866025 2.33254e-008 0.5 +vn -0.866025 2.33254e-008 0.5 +vn -0.836629 0.258332 0.483029 +vn -0.966056 0.258331 2.63783e-007 +vn -1 3.11005e-008 2.33254e-007 +vn -1 3.11005e-008 2.33254e-007 +vn -0.966056 0.258331 2.63783e-007 +vn -0.836629 0.258332 -0.483029 +vn -0.866025 2.33254e-008 -0.5 +vn -0.866025 2.33254e-008 -0.5 +vn -0.836629 0.258332 -0.483029 +vn -0.483028 0.258332 -0.836629 +vn -0.499999 2.33254e-008 -0.866026 +vn -0.499999 2.33254e-008 -0.866026 +vn -0.483028 0.258332 -0.836629 +vn -2.01717e-007 0.258331 -0.966056 +vn -1.71053e-007 3.11005e-008 -1 +vn -1.71053e-007 3.11005e-008 -1 +vn -2.01717e-007 0.258331 -0.966056 +vn 0.483029 0.258332 -0.836629 +vn 0.5 2.33254e-008 -0.866025 +vn 0.5 2.33254e-008 -0.866025 +vn 0.483029 0.258332 -0.836629 +vn 0.836629 0.258332 -0.483028 +vn 0.866026 2.33254e-008 -0.499999 +vn 0.866026 2.33254e-008 -0.499999 +vn 0.836629 0.258332 -0.483028 +vn 0.966056 0.258331 -7.75833e-009 +vn 1 2.33254e-008 0 +vn 0.966056 0.258331 0 +vn 0.86646 0.499247 -3.85612e-009 +vn 0.750377 0.499246 0.433231 +vn 0.836629 0.258332 0.483029 +vn 0.836629 0.258332 0.483029 +vn 0.750377 0.499246 0.433231 +vn 0.433231 0.499246 0.750377 +vn 0.483029 0.258332 0.836629 +vn 0.483029 0.258332 0.836629 +vn 0.433231 0.499246 0.750377 +vn 3.85612e-009 0.499247 0.86646 +vn 0 0.258331 0.966056 +vn 0 0.258331 0.966056 +vn 3.85612e-009 0.499247 0.86646 +vn -0.433231 0.499246 0.750377 +vn -0.483029 0.258332 0.836629 +vn -0.483029 0.258332 0.836629 +vn -0.433231 0.499246 0.750377 +vn -0.750377 0.499246 0.433231 +vn -0.836629 0.258332 0.483029 +vn -0.836629 0.258332 0.483029 +vn -0.750377 0.499246 0.433231 +vn -0.86646 0.499247 2.31367e-008 +vn -0.966056 0.258331 2.63783e-007 +vn -0.966056 0.258331 2.63783e-007 +vn -0.86646 0.499247 2.69928e-008 +vn -0.750376 0.499246 -0.43323 +vn -0.836629 0.258332 -0.483029 +vn -0.836629 0.258332 -0.483029 +vn -0.750376 0.499246 -0.43323 +vn -0.43323 0.499246 -0.750377 +vn -0.483028 0.258332 -0.836629 +vn -0.483028 0.258332 -0.836629 +vn -0.43323 0.499246 -0.750376 +vn 2.31367e-008 0.499247 -0.86646 +vn -2.01717e-007 0.258331 -0.966056 +vn -2.01717e-007 0.258331 -0.966056 +vn 1.92806e-008 0.499247 -0.86646 +vn 0.43323 0.499246 -0.750376 +vn 0.483029 0.258332 -0.836629 +vn 0.483029 0.258332 -0.836629 +vn 0.43323 0.499246 -0.750376 +vn 0.750376 0.499246 -0.43323 +vn 0.836629 0.258332 -0.483028 +vn 0.836629 0.258332 -0.483028 +vn 0.750376 0.499246 -0.43323 +vn 0.86646 0.499247 -7.71223e-009 +vn 0.966056 0.258331 0 +vn 0.86646 0.499247 -3.85612e-009 +vn 0.707808 0.706405 0 +vn 0.61298 0.706404 0.353905 +vn 0.750377 0.499246 0.433231 +vn 0.750377 0.499246 0.433231 +vn 0.61298 0.706404 0.353905 +vn 0.353905 0.706404 0.61298 +vn 0.433231 0.499246 0.750377 +vn 0.433231 0.499246 0.750377 +vn 0.353905 0.706404 0.61298 +vn 0 0.706405 0.707808 +vn 3.85612e-009 0.499247 0.86646 +vn 3.85612e-009 0.499247 0.86646 +vn 0 0.706405 0.707808 +vn -0.353905 0.706404 0.61298 +vn -0.433231 0.499246 0.750377 +vn -0.433231 0.499246 0.750377 +vn -0.353905 0.706404 0.61298 +vn -0.61298 0.706404 0.353905 +vn -0.750377 0.499246 0.433231 +vn -0.750377 0.499246 0.433231 +vn -0.61298 0.706404 0.353905 +vn -0.707808 0.706405 0 +vn -0.86646 0.499247 2.31367e-008 +vn -0.86646 0.499247 2.31367e-008 +vn -0.707808 0.706405 0 +vn -0.61298 0.706404 -0.353905 +vn -0.750376 0.499246 -0.43323 +vn -0.750376 0.499246 -0.43323 +vn -0.61298 0.706404 -0.353905 +vn -0.353905 0.706404 -0.61298 +vn -0.43323 0.499246 -0.750376 +vn -0.43323 0.499246 -0.750376 +vn -0.353905 0.706404 -0.61298 +vn 3.44193e-008 0.706405 -0.707808 +vn 2.31367e-008 0.499247 -0.86646 +vn 2.31367e-008 0.499247 -0.86646 +vn 3.44193e-008 0.706405 -0.707808 +vn 0.353905 0.706404 -0.61298 +vn 0.43323 0.499246 -0.750376 +vn 0.43323 0.499246 -0.750376 +vn 0.353905 0.706404 -0.61298 +vn 0.61298 0.706404 -0.353905 +vn 0.750376 0.499246 -0.43323 +vn 0.750376 0.499246 -0.43323 +vn 0.61298 0.706404 -0.353905 +vn 0.707808 0.706405 0 +vn 0.86646 0.499247 -3.85612e-009 +vn 0.707808 0.706405 0 +vn 0.500735 0.865601 -3.41309e-008 +vn 0.433649 0.865601 0.250367 +vn 0.61298 0.706404 0.353905 +vn 0.61298 0.706404 0.353905 +vn 0.433649 0.865601 0.250367 +vn 0.250367 0.865601 0.433649 +vn 0.353905 0.706404 0.61298 +vn 0.353905 0.706404 0.61298 +vn 0.250367 0.865601 0.433649 +vn 0 0.865601 0.500735 +vn 0 0.706405 0.707808 +vn 0 0.706405 0.707808 +vn 0 0.865601 0.500735 +vn -0.250367 0.865601 0.433649 +vn -0.353905 0.706404 0.61298 +vn -0.353905 0.706404 0.61298 +vn -0.250367 0.865601 0.433649 +vn -0.433649 0.865601 0.250367 +vn -0.61298 0.706404 0.353905 +vn -0.61298 0.706404 0.353905 +vn -0.433649 0.865601 0.250367 +vn -0.500735 0.865601 0 +vn -0.707808 0.706405 0 +vn -0.707808 0.706405 0 +vn -0.500735 0.865601 0 +vn -0.433649 0.865601 -0.250367 +vn -0.61298 0.706404 -0.353905 +vn -0.61298 0.706404 -0.353905 +vn -0.433649 0.865601 -0.250367 +vn -0.250367 0.865601 -0.433649 +vn -0.353905 0.706404 -0.61298 +vn -0.353905 0.706404 -0.61298 +vn -0.250367 0.865601 -0.433649 +vn -1.89616e-008 0.865601 -0.500735 +vn 3.44193e-008 0.706405 -0.707808 +vn 3.44193e-008 0.706405 -0.707808 +vn -1.51693e-008 0.865601 -0.500735 +vn 0.250367 0.865601 -0.433649 +vn 0.353905 0.706404 -0.61298 +vn 0.353905 0.706404 -0.61298 +vn 0.250367 0.865601 -0.433649 +vn 0.433649 0.865601 -0.250367 +vn 0.61298 0.706404 -0.353905 +vn 0.61298 0.706404 -0.353905 +vn 0.433649 0.865601 -0.250367 +vn 0.500735 0.865601 -3.03386e-008 +vn 0.707808 0.706405 0 +vn 0.500735 0.865601 -3.41309e-008 +vn 0.25929 0.9658 -4.71082e-008 +vn 0.224551 0.9658 0.129644 +vn 0.433649 0.865601 0.250367 +vn 0.433649 0.865601 0.250367 +vn 0.224551 0.9658 0.129644 +vn 0.129643 0.9658 0.224551 +vn 0.250367 0.865601 0.433649 +vn 0.250367 0.865601 0.433649 +vn 0.129643 0.9658 0.224551 +vn 0 0.9658 0.25929 +vn 0 0.865601 0.500735 +vn 0 0.865601 0.500735 +vn 1.88433e-009 0.9658 0.25929 +vn -0.129643 0.9658 0.224551 +vn -0.250367 0.865601 0.433649 +vn -0.250367 0.865601 0.433649 +vn -0.129643 0.9658 0.224551 +vn -0.224551 0.9658 0.129644 +vn -0.433649 0.865601 0.250367 +vn -0.433649 0.865601 0.250367 +vn -0.224551 0.9658 0.129644 +vn -0.25929 0.9658 0 +vn -0.500735 0.865601 0 +vn -0.500735 0.865601 0 +vn -0.25929 0.9658 0 +vn -0.224551 0.9658 -0.129644 +vn -0.433649 0.865601 -0.250367 +vn -0.433649 0.865601 -0.250367 +vn -0.224551 0.9658 -0.129644 +vn -0.129643 0.9658 -0.224551 +vn -0.250367 0.865601 -0.433649 +vn -0.250367 0.865601 -0.433649 +vn -0.129643 0.9658 -0.224551 +vn -4.89926e-008 0.9658 -0.25929 +vn -1.51693e-008 0.865601 -0.500735 +vn -1.51693e-008 0.865601 -0.500735 +vn -4.71082e-008 0.9658 -0.25929 +vn 0.129644 0.9658 -0.224551 +vn 0.250367 0.865601 -0.433649 +vn 0.250367 0.865601 -0.433649 +vn 0.129644 0.9658 -0.224551 +vn 0.224551 0.9658 -0.129643 +vn 0.433649 0.865601 -0.250367 +vn 0.433649 0.865601 -0.250367 +vn 0.224551 0.9658 -0.129643 +vn 0.25929 0.9658 -4.52239e-008 +vn 0.500735 0.865601 -3.41309e-008 +vn 0.108725 -0.994072 -1.30475e-008 +vn 0.259289 -0.9658 -1.1306e-008 +vn 0.224551 -0.9658 0.129645 +vn 0.0941583 -0.994072 0.054362 +vn 0.0941583 -0.994072 0.054362 +vn 0.224551 -0.9658 0.129645 +vn 0.129645 -0.9658 0.224551 +vn 0.054362 -0.994072 0.0941584 +vn 0.054362 -0.994072 0.0941584 +vn 0.129645 -0.9658 0.224551 +vn 0 -0.9658 0.259289 +vn 0 -0.994072 0.108725 +vn 0 -0.994072 0.108725 +vn 0 -0.9658 0.259289 +vn -0.129645 -0.9658 0.224551 +vn -0.054362 -0.994072 0.0941584 +vn -0.054362 -0.994072 0.0941584 +vn -0.129645 -0.9658 0.224551 +vn -0.224551 -0.9658 0.129645 +vn -0.0941583 -0.994072 0.054362 +vn -0.0941583 -0.994072 0.054362 +vn -0.224551 -0.9658 0.129645 +vn -0.259289 -0.9658 0 +vn -0.108725 -0.994072 -9.31968e-010 +vn -0.108725 -0.994072 0 +vn -0.259289 -0.9658 0 +vn -0.224551 -0.9658 -0.129645 +vn -0.0941583 -0.994072 -0.054362 +vn -0.0941583 -0.994072 -0.054362 +vn -0.224551 -0.9658 -0.129645 +vn -0.129645 -0.9658 -0.224551 +vn -0.054362 -0.994072 -0.0941584 +vn -0.054362 -0.994072 -0.0941584 +vn -0.129645 -0.9658 -0.224551 +vn 0 -0.9658 -0.259289 +vn -1.30475e-008 -0.994072 -0.108725 +vn -1.30475e-008 -0.994072 -0.108725 +vn 0 -0.9658 -0.259289 +vn 0.129645 -0.9658 -0.224551 +vn 0.054362 -0.994072 -0.0941583 +vn 0.054362 -0.994072 -0.0941583 +vn 0.129645 -0.9658 -0.224551 +vn 0.224551 -0.9658 -0.129645 +vn 0.0941584 -0.994072 -0.054362 +vn 0.0941584 -0.994072 -0.054362 +vn 0.224551 -0.9658 -0.129645 +vn 0.259289 -0.9658 -1.1306e-008 +vn 0.108725 -0.994072 -1.30475e-008 +vn 0.0941583 0.994072 0.054362 +vn 0.224551 0.9658 0.129644 +vn 0.25929 0.9658 -4.71082e-008 +vn 0.108725 0.994072 -1.39795e-008 +vn 0.054362 0.994072 0.0941584 +vn 0.129643 0.9658 0.224551 +vn 0.224551 0.9658 0.129644 +vn 0.0941583 0.994072 0.054362 +vn 0 0.994072 0.108725 +vn 0 0.9658 0.25929 +vn 0.129643 0.9658 0.224551 +vn 0.054362 0.994072 0.0941584 +vn -0.054362 0.994072 0.0941584 +vn -0.129643 0.9658 0.224551 +vn 0 0.9658 0.25929 +vn 0 0.994072 0.108725 +vn -0.0941583 0.994072 0.054362 +vn -0.224551 0.9658 0.129644 +vn -0.129643 0.9658 0.224551 +vn -0.054362 0.994072 0.0941584 +vn -0.108725 0.994072 -9.31968e-010 +vn -0.25929 0.9658 0 +vn -0.224551 0.9658 0.129644 +vn -0.0941583 0.994072 0.054362 +vn -0.0941583 0.994072 -0.054362 +vn -0.224551 0.9658 -0.129644 +vn -0.25929 0.9658 0 +vn -0.108725 0.994072 0 +vn -0.054362 0.994072 -0.0941584 +vn -0.129643 0.9658 -0.224551 +vn -0.224551 0.9658 -0.129644 +vn -0.0941583 0.994072 -0.054362 +vn -1.30475e-008 0.994072 -0.108725 +vn -4.89926e-008 0.9658 -0.25929 +vn -0.129643 0.9658 -0.224551 +vn -0.054362 0.994072 -0.0941584 +vn 0.054362 0.994072 -0.0941583 +vn 0.129644 0.9658 -0.224551 +vn -4.89926e-008 0.9658 -0.25929 +vn -1.30475e-008 0.994072 -0.108725 +vn 0.0941584 0.994072 -0.054362 +vn 0.224551 0.9658 -0.129643 +vn 0.129644 0.9658 -0.224551 +vn 0.054362 0.994072 -0.0941583 +vn 0.108725 0.994072 -1.30475e-008 +vn 0.25929 0.9658 -4.71082e-008 +vn 0.224551 0.9658 -0.129643 +vn 0.0941584 0.994072 -0.054362 +vn -0.0864525 -0.996256 -9.31572e-010 +vn -0.108725 -0.994072 0 +vn -0.0941583 -0.994072 -0.054362 +vn -0.0748701 -0.996256 -0.0432263 +vn -0.0748701 0.996256 -0.0432263 +vn -0.0941583 0.994072 -0.054362 +vn -0.108725 0.994072 0 +vn -0.0864525 0.996256 -9.31572e-010 +vn -0.0748701 -0.996256 -0.0432263 +vn -0.0941583 -0.994072 -0.054362 +vn -0.054362 -0.994072 -0.0941584 +vn -0.0432263 -0.996256 -0.0748701 +vn -0.0432263 0.996256 -0.0748701 +vn -0.054362 0.994072 -0.0941584 +vn -0.0941583 0.994072 -0.054362 +vn -0.0748701 0.996256 -0.0432263 +vn -0.0432263 -0.996256 -0.0748701 +vn -0.054362 -0.994072 -0.0941584 +vn -1.30475e-008 -0.994072 -0.108725 +vn 0 -0.996256 -0.0864526 +vn 0 0.996256 -0.0864526 +vn -1.30475e-008 0.994072 -0.108725 +vn -0.054362 0.994072 -0.0941584 +vn -0.0432263 0.996256 -0.0748701 +vn 0 -0.996256 -0.0864526 +vn -1.30475e-008 -0.994072 -0.108725 +vn 0.054362 -0.994072 -0.0941583 +vn 0.0432263 -0.996256 -0.0748701 +vn 0.0432263 0.996256 -0.0748701 +vn 0.054362 0.994072 -0.0941583 +vn -1.30475e-008 0.994072 -0.108725 +vn 0 0.996256 -0.0864526 +vn 0.0432263 -0.996256 -0.0748701 +vn 0.054362 -0.994072 -0.0941583 +vn 0.0941584 -0.994072 -0.054362 +vn 0.0748701 -0.996256 -0.0432263 +vn 0.0748701 0.996256 -0.0432263 +vn 0.0941584 0.994072 -0.054362 +vn 0.054362 0.994072 -0.0941583 +vn 0.0432263 0.996256 -0.0748701 +vn 0.0748701 -0.996256 -0.0432263 +vn 0.0941584 -0.994072 -0.054362 +vn 0.108725 -0.994072 -1.30475e-008 +vn 0.0864525 -0.996256 0 +vn 0.0864525 0.996256 -9.31572e-010 +vn 0.108725 0.994072 -1.30475e-008 +vn 0.0941584 0.994072 -0.054362 +vn 0.0748701 0.996256 -0.0432263 +vn 0.0864525 -0.996256 0 +vn 0.108725 -0.994072 -1.30475e-008 +vn 0.0941583 -0.994072 0.054362 +vn 0.0748701 -0.996256 0.0432263 +vn 0.0748701 -0.996256 0.0432263 +vn 0.0941583 -0.994072 0.054362 +vn 0.054362 -0.994072 0.0941584 +vn 0.0432263 -0.996256 0.0748701 +vn 0.0748701 0.996256 0.0432263 +vn 0.0941583 0.994072 0.054362 +vn 0.108725 0.994072 -1.30475e-008 +vn 0.0864525 0.996256 -9.31572e-010 +vn 0.0432263 0.996256 0.0748701 +vn 0.054362 0.994072 0.0941584 +vn 0.0941583 0.994072 0.054362 +vn 0.0748701 0.996256 0.0432263 +vn 0.0432263 -0.996256 0.0748701 +vn 0.054362 -0.994072 0.0941584 +vn 0 -0.994072 0.108725 +vn 0 -0.996256 0.0864525 +vn 0 -0.996256 0.0864525 +vn 0 -0.994072 0.108725 +vn -0.054362 -0.994072 0.0941584 +vn -0.0432263 -0.996256 0.0748701 +vn 0 0.996256 0.0864525 +vn 0 0.994072 0.108725 +vn 0.054362 0.994072 0.0941584 +vn 0.0432263 0.996256 0.0748701 +vn -0.0432263 0.996256 0.0748701 +vn -0.054362 0.994072 0.0941584 +vn 0 0.994072 0.108725 +vn 0 0.996256 0.0864525 +vn -0.0432263 -0.996256 0.0748701 +vn -0.054362 -0.994072 0.0941584 +vn -0.0941583 -0.994072 0.054362 +vn -0.0748701 -0.996256 0.0432263 +vn -0.0748701 -0.996256 0.0432263 +vn -0.0941583 -0.994072 0.054362 +vn -0.108725 -0.994072 0 +vn -0.0864525 -0.996256 -9.31572e-010 +vn -0.0748701 0.996256 0.0432263 +vn -0.0941583 0.994072 0.054362 +vn -0.054362 0.994072 0.0941584 +vn -0.0432263 0.996256 0.0748701 +vn -0.0864525 0.996256 -9.31572e-010 +vn -0.108725 0.994072 0 +vn -0.0941583 0.994072 0.054362 +vn -0.0748701 0.996256 0.0432263 +vt 1 0.0828157 +vt 1 0.167702 +vt 0.917526 0.167702 +vt 0.917526 0.0828157 +vt 0.917526 0.0828157 +vt 0.917526 0.167702 +vt 0.835052 0.167702 +vt 0.835052 0.0828157 +vt 0.835052 0.0828157 +vt 0.835052 0.167702 +vt 0.750515 0.167702 +vt 0.750515 0.0828157 +vt 0.750515 0.0828157 +vt 0.750515 0.167702 +vt 0.668041 0.167702 +vt 0.668041 0.0828157 +vt 0.668041 0.0828157 +vt 0.668041 0.167702 +vt 0.585567 0.167702 +vt 0.585567 0.0828157 +vt 0.585567 0.0828157 +vt 0.585567 0.167702 +vt 0.501031 0.167702 +vt 0.501031 0.0828157 +vt 0.501031 0.0828157 +vt 0.501031 0.167702 +vt 0.418557 0.167702 +vt 0.418557 0.0828157 +vt 0.418557 0.0828157 +vt 0.418557 0.167702 +vt 0.336082 0.167702 +vt 0.336082 0.0828157 +vt 0.336082 0.0828157 +vt 0.336082 0.167702 +vt 0.251546 0.167702 +vt 0.251546 0.0828157 +vt 0.251546 0.0828157 +vt 0.251546 0.167702 +vt 0.169072 0.167702 +vt 0.169072 0.0828157 +vt 0.169072 0.0828157 +vt 0.169072 0.167702 +vt 0.0845361 0.167702 +vt 0.0845361 0.0828157 +vt 0.0845361 0.0828157 +vt 0.0845361 0.167702 +vt 0 0.167702 +vt 0 0.0828157 +vt 1 0.167702 +vt 1 0.250518 +vt 0.917526 0.250518 +vt 0.917526 0.167702 +vt 0.917526 0.167702 +vt 0.917526 0.250518 +vt 0.835052 0.250518 +vt 0.835052 0.167702 +vt 0.835052 0.167702 +vt 0.835052 0.250518 +vt 0.750515 0.250518 +vt 0.750515 0.167702 +vt 0.750515 0.167702 +vt 0.750515 0.250518 +vt 0.668041 0.250518 +vt 0.668041 0.167702 +vt 0.668041 0.167702 +vt 0.668041 0.250518 +vt 0.585567 0.250518 +vt 0.585567 0.167702 +vt 0.585567 0.167702 +vt 0.585567 0.250518 +vt 0.501031 0.250518 +vt 0.501031 0.167702 +vt 0.501031 0.167702 +vt 0.501031 0.250518 +vt 0.418557 0.250518 +vt 0.418557 0.167702 +vt 0.418557 0.167702 +vt 0.418557 0.250518 +vt 0.336082 0.250518 +vt 0.336082 0.167702 +vt 0.336082 0.167702 +vt 0.336082 0.250518 +vt 0.251546 0.250518 +vt 0.251546 0.167702 +vt 0.251546 0.167702 +vt 0.251546 0.250518 +vt 0.169072 0.250518 +vt 0.169072 0.167702 +vt 0.169072 0.167702 +vt 0.169072 0.250518 +vt 0.0845361 0.250518 +vt 0.0845361 0.167702 +vt 0.0845361 0.167702 +vt 0.0845361 0.250518 +vt 0 0.250518 +vt 0 0.167702 +vt 1 0.250518 +vt 1 0.333333 +vt 0.917526 0.333333 +vt 0.917526 0.250518 +vt 0.917526 0.250518 +vt 0.917526 0.333333 +vt 0.835052 0.333333 +vt 0.835052 0.250518 +vt 0.835052 0.250518 +vt 0.835052 0.333333 +vt 0.750515 0.333333 +vt 0.750515 0.250518 +vt 0.750515 0.250518 +vt 0.750515 0.333333 +vt 0.668041 0.333333 +vt 0.668041 0.250518 +vt 0.668041 0.250518 +vt 0.668041 0.333333 +vt 0.585567 0.333333 +vt 0.585567 0.250518 +vt 0.585567 0.250518 +vt 0.585567 0.333333 +vt 0.501031 0.333333 +vt 0.501031 0.250518 +vt 0.501031 0.250518 +vt 0.501031 0.333333 +vt 0.418557 0.333333 +vt 0.418557 0.250518 +vt 0.418557 0.250518 +vt 0.418557 0.333333 +vt 0.336082 0.333333 +vt 0.336082 0.250518 +vt 0.336082 0.250518 +vt 0.336082 0.333333 +vt 0.251546 0.333333 +vt 0.251546 0.250518 +vt 0.251546 0.250518 +vt 0.251546 0.333333 +vt 0.169072 0.333333 +vt 0.169072 0.250518 +vt 0.169072 0.250518 +vt 0.169072 0.333333 +vt 0.0845361 0.333333 +vt 0.0845361 0.250518 +vt 0.0845361 0.250518 +vt 0.0845361 0.333333 +vt 0 0.333333 +vt 0 0.250518 +vt 1 0.333333 +vt 1 0.416149 +vt 0.917526 0.416149 +vt 0.917526 0.333333 +vt 0.917526 0.333333 +vt 0.917526 0.416149 +vt 0.835052 0.416149 +vt 0.835052 0.333333 +vt 0.835052 0.333333 +vt 0.835052 0.416149 +vt 0.750515 0.416149 +vt 0.750515 0.333333 +vt 0.750515 0.333333 +vt 0.750515 0.416149 +vt 0.668041 0.416149 +vt 0.668041 0.333333 +vt 0.668041 0.333333 +vt 0.668041 0.416149 +vt 0.585567 0.416149 +vt 0.585567 0.333333 +vt 0.585567 0.333333 +vt 0.585567 0.416149 +vt 0.501031 0.416149 +vt 0.501031 0.333333 +vt 0.501031 0.333333 +vt 0.501031 0.416149 +vt 0.418557 0.416149 +vt 0.418557 0.333333 +vt 0.418557 0.333333 +vt 0.418557 0.416149 +vt 0.336082 0.416149 +vt 0.336082 0.333333 +vt 0.336082 0.333333 +vt 0.336082 0.416149 +vt 0.251546 0.416149 +vt 0.251546 0.333333 +vt 0.251546 0.333333 +vt 0.251546 0.416149 +vt 0.169072 0.416149 +vt 0.169072 0.333333 +vt 0.169072 0.333333 +vt 0.169072 0.416149 +vt 0.0845361 0.416149 +vt 0.0845361 0.333333 +vt 0.0845361 0.333333 +vt 0.0845361 0.416149 +vt 0 0.416149 +vt 0 0.333333 +vt 1 0.416149 +vt 1 0.501035 +vt 0.917526 0.501035 +vt 0.917526 0.416149 +vt 0.917526 0.416149 +vt 0.917526 0.501035 +vt 0.835052 0.501035 +vt 0.835052 0.416149 +vt 0.835052 0.416149 +vt 0.835052 0.501035 +vt 0.750515 0.501035 +vt 0.750515 0.416149 +vt 0.750515 0.416149 +vt 0.750515 0.501035 +vt 0.668041 0.501035 +vt 0.668041 0.416149 +vt 0.668041 0.416149 +vt 0.668041 0.501035 +vt 0.585567 0.501035 +vt 0.585567 0.416149 +vt 0.585567 0.416149 +vt 0.585567 0.501035 +vt 0.501031 0.501035 +vt 0.501031 0.416149 +vt 0.501031 0.416149 +vt 0.501031 0.501035 +vt 0.418557 0.501035 +vt 0.418557 0.416149 +vt 0.418557 0.416149 +vt 0.418557 0.501035 +vt 0.336082 0.501035 +vt 0.336082 0.416149 +vt 0.336082 0.416149 +vt 0.336082 0.501035 +vt 0.251546 0.501035 +vt 0.251546 0.416149 +vt 0.251546 0.416149 +vt 0.251546 0.501035 +vt 0.169072 0.501035 +vt 0.169072 0.416149 +vt 0.169072 0.416149 +vt 0.169072 0.501035 +vt 0.0845361 0.501035 +vt 0.0845361 0.416149 +vt 0.0845361 0.416149 +vt 0.0845361 0.501035 +vt 0 0.501035 +vt 0 0.416149 +vt 1 0.501035 +vt 1 0.583851 +vt 0.917526 0.583851 +vt 0.917526 0.501035 +vt 0.917526 0.501035 +vt 0.917526 0.583851 +vt 0.835052 0.583851 +vt 0.835052 0.501035 +vt 0.835052 0.501035 +vt 0.835052 0.583851 +vt 0.750515 0.583851 +vt 0.750515 0.501035 +vt 0.750515 0.501035 +vt 0.750515 0.583851 +vt 0.668041 0.583851 +vt 0.668041 0.501035 +vt 0.668041 0.501035 +vt 0.668041 0.583851 +vt 0.585567 0.583851 +vt 0.585567 0.501035 +vt 0.585567 0.501035 +vt 0.585567 0.583851 +vt 0.501031 0.583851 +vt 0.501031 0.501035 +vt 0.501031 0.501035 +vt 0.501031 0.583851 +vt 0.418557 0.583851 +vt 0.418557 0.501035 +vt 0.418557 0.501035 +vt 0.418557 0.583851 +vt 0.336082 0.583851 +vt 0.336082 0.501035 +vt 0.336082 0.501035 +vt 0.336082 0.583851 +vt 0.251546 0.583851 +vt 0.251546 0.501035 +vt 0.251546 0.501035 +vt 0.251546 0.583851 +vt 0.169072 0.583851 +vt 0.169072 0.501035 +vt 0.169072 0.501035 +vt 0.169072 0.583851 +vt 0.0845361 0.583851 +vt 0.0845361 0.501035 +vt 0.0845361 0.501035 +vt 0.0845361 0.583851 +vt 0 0.583851 +vt 0 0.501035 +vt 1 0.583851 +vt 1 0.668737 +vt 0.917526 0.668737 +vt 0.917526 0.583851 +vt 0.917526 0.583851 +vt 0.917526 0.668737 +vt 0.835052 0.668737 +vt 0.835052 0.583851 +vt 0.835052 0.583851 +vt 0.835052 0.668737 +vt 0.750515 0.668737 +vt 0.750515 0.583851 +vt 0.750515 0.583851 +vt 0.750515 0.668737 +vt 0.668041 0.668737 +vt 0.668041 0.583851 +vt 0.668041 0.583851 +vt 0.668041 0.668737 +vt 0.585567 0.668737 +vt 0.585567 0.583851 +vt 0.585567 0.583851 +vt 0.585567 0.668737 +vt 0.501031 0.668737 +vt 0.501031 0.583851 +vt 0.501031 0.583851 +vt 0.501031 0.668737 +vt 0.418557 0.668737 +vt 0.418557 0.583851 +vt 0.418557 0.583851 +vt 0.418557 0.668737 +vt 0.336082 0.668737 +vt 0.336082 0.583851 +vt 0.336082 0.583851 +vt 0.336082 0.668737 +vt 0.251546 0.668737 +vt 0.251546 0.583851 +vt 0.251546 0.583851 +vt 0.251546 0.668737 +vt 0.169072 0.668737 +vt 0.169072 0.583851 +vt 0.169072 0.583851 +vt 0.169072 0.668737 +vt 0.0845361 0.668737 +vt 0.0845361 0.583851 +vt 0.0845361 0.583851 +vt 0.0845361 0.668737 +vt 0 0.668737 +vt 0 0.583851 +vt 1 0.668737 +vt 1 0.751553 +vt 0.917526 0.751553 +vt 0.917526 0.668737 +vt 0.917526 0.668737 +vt 0.917526 0.751553 +vt 0.835052 0.751553 +vt 0.835052 0.668737 +vt 0.835052 0.668737 +vt 0.835052 0.751553 +vt 0.750515 0.751553 +vt 0.750515 0.668737 +vt 0.750515 0.668737 +vt 0.750515 0.751553 +vt 0.668041 0.751553 +vt 0.668041 0.668737 +vt 0.668041 0.668737 +vt 0.668041 0.751553 +vt 0.585567 0.751553 +vt 0.585567 0.668737 +vt 0.585567 0.668737 +vt 0.585567 0.751553 +vt 0.501031 0.751553 +vt 0.501031 0.668737 +vt 0.501031 0.668737 +vt 0.501031 0.751553 +vt 0.418557 0.751553 +vt 0.418557 0.668737 +vt 0.418557 0.668737 +vt 0.418557 0.751553 +vt 0.336082 0.751553 +vt 0.336082 0.668737 +vt 0.336082 0.668737 +vt 0.336082 0.751553 +vt 0.251546 0.751553 +vt 0.251546 0.668737 +vt 0.251546 0.668737 +vt 0.251546 0.751553 +vt 0.169072 0.751553 +vt 0.169072 0.668737 +vt 0.169072 0.668737 +vt 0.169072 0.751553 +vt 0.0845361 0.751553 +vt 0.0845361 0.668737 +vt 0.0845361 0.668737 +vt 0.0845361 0.751553 +vt 0 0.751553 +vt 0 0.668737 +vt 1 0.751553 +vt 1 0.834369 +vt 0.917526 0.834369 +vt 0.917526 0.751553 +vt 0.917526 0.751553 +vt 0.917526 0.834369 +vt 0.835052 0.834369 +vt 0.835052 0.751553 +vt 0.835052 0.751553 +vt 0.835052 0.834369 +vt 0.750515 0.834369 +vt 0.750515 0.751553 +vt 0.750515 0.751553 +vt 0.750515 0.834369 +vt 0.668041 0.834369 +vt 0.668041 0.751553 +vt 0.668041 0.751553 +vt 0.668041 0.834369 +vt 0.585567 0.834369 +vt 0.585567 0.751553 +vt 0.585567 0.751553 +vt 0.585567 0.834369 +vt 0.501031 0.834369 +vt 0.501031 0.751553 +vt 0.501031 0.751553 +vt 0.501031 0.834369 +vt 0.418557 0.834369 +vt 0.418557 0.751553 +vt 0.418557 0.751553 +vt 0.418557 0.834369 +vt 0.336082 0.834369 +vt 0.336082 0.751553 +vt 0.336082 0.751553 +vt 0.336082 0.834369 +vt 0.251546 0.834369 +vt 0.251546 0.751553 +vt 0.251546 0.751553 +vt 0.251546 0.834369 +vt 0.169072 0.834369 +vt 0.169072 0.751553 +vt 0.169072 0.751553 +vt 0.169072 0.834369 +vt 0.0845361 0.834369 +vt 0.0845361 0.751553 +vt 0.0845361 0.751553 +vt 0.0845361 0.834369 +vt 0 0.834369 +vt 0 0.751553 +vt 1 0.834369 +vt 1 0.919255 +vt 0.917526 0.919255 +vt 0.917526 0.834369 +vt 0.917526 0.834369 +vt 0.917526 0.919255 +vt 0.835052 0.919255 +vt 0.835052 0.834369 +vt 0.835052 0.834369 +vt 0.835052 0.919255 +vt 0.750515 0.919255 +vt 0.750515 0.834369 +vt 0.750515 0.834369 +vt 0.750515 0.919255 +vt 0.668041 0.919255 +vt 0.668041 0.834369 +vt 0.668041 0.834369 +vt 0.668041 0.919255 +vt 0.585567 0.919255 +vt 0.585567 0.834369 +vt 0.585567 0.834369 +vt 0.585567 0.919255 +vt 0.501031 0.919255 +vt 0.501031 0.834369 +vt 0.501031 0.834369 +vt 0.501031 0.919255 +vt 0.418557 0.919255 +vt 0.418557 0.834369 +vt 0.418557 0.834369 +vt 0.418557 0.919255 +vt 0.336082 0.919255 +vt 0.336082 0.834369 +vt 0.336082 0.834369 +vt 0.336082 0.919255 +vt 0.251546 0.919255 +vt 0.251546 0.834369 +vt 0.251546 0.834369 +vt 0.251546 0.919255 +vt 0.169072 0.919255 +vt 0.169072 0.834369 +vt 0.169072 0.834369 +vt 0.169072 0.919255 +vt 0.0845361 0.919255 +vt 0.0845361 0.834369 +vt 0.0845361 0.834369 +vt 0.0845361 0.919255 +vt 0 0.919255 +vt 0 0.834369 +vt 1 0.0248447 +vt 1 0.0828157 +vt 0.917526 0.0828157 +vt 0.917526 0.0248447 +vt 0.917526 0.0248447 +vt 0.917526 0.0828157 +vt 0.835052 0.0828157 +vt 0.835052 0.0248447 +vt 0.835052 0.0248447 +vt 0.835052 0.0828157 +vt 0.750515 0.0828157 +vt 0.750515 0.0248447 +vt 0.750515 0.0248447 +vt 0.750515 0.0828157 +vt 0.668041 0.0828157 +vt 0.668041 0.0248447 +vt 0.668041 0.0248447 +vt 0.668041 0.0828157 +vt 0.585567 0.0828157 +vt 0.585567 0.0248447 +vt 0.585567 0.0248447 +vt 0.585567 0.0828157 +vt 0.501031 0.0828157 +vt 0.501031 0.0248447 +vt 0.501031 0.0248447 +vt 0.501031 0.0828157 +vt 0.418557 0.0828157 +vt 0.418557 0.0248447 +vt 0.418557 0.0248447 +vt 0.418557 0.0828157 +vt 0.336082 0.0828157 +vt 0.336082 0.0248447 +vt 0.336082 0.0248447 +vt 0.336082 0.0828157 +vt 0.251546 0.0828157 +vt 0.251546 0.0248447 +vt 0.251546 0.0248447 +vt 0.251546 0.0828157 +vt 0.169072 0.0828157 +vt 0.169072 0.0248447 +vt 0.169072 0.0248447 +vt 0.169072 0.0828157 +vt 0.0845361 0.0828157 +vt 0.0845361 0.0248447 +vt 0.0845361 0.0248447 +vt 0.0845361 0.0828157 +vt 0 0.0828157 +vt 0 0.0248447 +vt 0.917526 0.981366 +vt 0.917526 0.919255 +vt 1 0.919255 +vt 1 0.981366 +vt 0.835052 0.981366 +vt 0.835052 0.919255 +vt 0.917526 0.919255 +vt 0.917526 0.981366 +vt 0.750515 0.981366 +vt 0.750515 0.919255 +vt 0.835052 0.919255 +vt 0.835052 0.981366 +vt 0.668041 0.981366 +vt 0.668041 0.919255 +vt 0.750515 0.919255 +vt 0.750515 0.981366 +vt 0.585567 0.981366 +vt 0.585567 0.919255 +vt 0.668041 0.919255 +vt 0.668041 0.981366 +vt 0.501031 0.981366 +vt 0.501031 0.919255 +vt 0.585567 0.919255 +vt 0.585567 0.981366 +vt 0.418557 0.981366 +vt 0.418557 0.919255 +vt 0.501031 0.919255 +vt 0.501031 0.981366 +vt 0.336082 0.981366 +vt 0.336082 0.919255 +vt 0.418557 0.919255 +vt 0.418557 0.981366 +vt 0.251546 0.981366 +vt 0.251546 0.919255 +vt 0.336082 0.919255 +vt 0.336082 0.981366 +vt 0.169072 0.981366 +vt 0.169072 0.919255 +vt 0.251546 0.919255 +vt 0.251546 0.981366 +vt 0.0845361 0.981366 +vt 0.0845361 0.919255 +vt 0.169072 0.919255 +vt 0.169072 0.981366 +vt 0 0.981366 +vt 0 0.919255 +vt 0.0845361 0.919255 +vt 0.0845361 0.981366 +vt 0.501031 0 +vt 0.501031 0.0248447 +vt 0.418557 0.0248447 +vt 0.418557 0 +vt 0.418557 1 +vt 0.418557 0.981366 +vt 0.501031 0.981366 +vt 0.501031 1 +vt 0.418557 0 +vt 0.418557 0.0248447 +vt 0.336082 0.0248447 +vt 0.336082 0 +vt 0.336082 1 +vt 0.336082 0.981366 +vt 0.418557 0.981366 +vt 0.418557 1 +vt 0.336082 0 +vt 0.336082 0.0248447 +vt 0.251546 0.0248447 +vt 0.251546 0 +vt 0.251546 1 +vt 0.251546 0.981366 +vt 0.336082 0.981366 +vt 0.336082 1 +vt 0.251546 0 +vt 0.251546 0.0248447 +vt 0.169072 0.0248447 +vt 0.169072 0 +vt 0.169072 1 +vt 0.169072 0.981366 +vt 0.251546 0.981366 +vt 0.251546 1 +vt 0.169072 0 +vt 0.169072 0.0248447 +vt 0.0845361 0.0248447 +vt 0.0845361 0 +vt 0.0845361 1 +vt 0.0845361 0.981366 +vt 0.169072 0.981366 +vt 0.169072 1 +vt 0.0845361 0 +vt 0.0845361 0.0248447 +vt 0 0.0248447 +vt 0 0 +vt 0 1 +vt 0 0.981366 +vt 0.0845361 0.981366 +vt 0.0845361 1 +vt 1 0 +vt 1 0.0248447 +vt 0.917526 0.0248447 +vt 0.917526 0 +vt 0.917526 0 +vt 0.917526 0.0248447 +vt 0.835052 0.0248447 +vt 0.835052 0 +vt 0.917526 1 +vt 0.917526 0.981366 +vt 1 0.981366 +vt 1 1 +vt 0.835052 1 +vt 0.835052 0.981366 +vt 0.917526 0.981366 +vt 0.917526 1 +vt 0.835052 0 +vt 0.835052 0.0248447 +vt 0.750515 0.0248447 +vt 0.750515 0 +vt 0.750515 0 +vt 0.750515 0.0248447 +vt 0.668041 0.0248447 +vt 0.668041 0 +vt 0.750515 1 +vt 0.750515 0.981366 +vt 0.835052 0.981366 +vt 0.835052 1 +vt 0.668041 1 +vt 0.668041 0.981366 +vt 0.750515 0.981366 +vt 0.750515 1 +vt 0.668041 0 +vt 0.668041 0.0248447 +vt 0.585567 0.0248447 +vt 0.585567 0 +vt 0.585567 0 +vt 0.585567 0.0248447 +vt 0.501031 0.0248447 +vt 0.501031 0 +vt 0.585567 1 +vt 0.585567 0.981366 +vt 0.668041 0.981366 +vt 0.668041 1 +vt 0.501031 1 +vt 0.501031 0.981366 +vt 0.585567 0.981366 +vt 0.585567 1 +usemtl acmat_0 +f 1/1/1 13/2/2 14/3/3 2/4/4 +f 2/5/5 14/6/6 15/7/7 3/8/8 +f 3/9/9 15/10/10 16/11/11 4/12/12 +f 4/13/13 16/14/14 17/15/15 5/16/16 +f 5/17/17 17/18/18 18/19/19 6/20/20 +f 6/21/21 18/22/22 19/23/23 7/24/24 +f 7/25/25 19/26/26 20/27/27 8/28/28 +f 8/29/29 20/30/30 21/31/31 9/32/32 +f 9/33/33 21/34/34 22/35/35 10/36/36 +f 10/37/37 22/38/38 23/39/39 11/40/40 +f 11/41/41 23/42/42 24/43/43 12/44/44 +f 12/45/45 24/46/46 13/47/47 1/48/48 +f 13/49/49 25/50/50 26/51/51 14/52/52 +f 14/53/53 26/54/54 27/55/55 15/56/56 +f 15/57/57 27/58/58 28/59/59 16/60/60 +f 16/61/61 28/62/62 29/63/63 17/64/64 +f 17/65/65 29/66/66 30/67/67 18/68/68 +f 18/69/69 30/70/70 31/71/71 19/72/72 +f 19/73/73 31/74/74 32/75/75 20/76/76 +f 20/77/77 32/78/78 33/79/79 21/80/80 +f 21/81/81 33/82/82 34/83/83 22/84/84 +f 22/85/85 34/86/86 35/87/87 23/88/88 +f 23/89/89 35/90/90 36/91/91 24/92/92 +f 24/93/93 36/94/94 25/95/95 13/96/96 +f 25/97/97 37/98/98 38/99/99 26/100/100 +f 26/101/101 38/102/102 39/103/103 27/104/104 +f 27/105/105 39/106/106 40/107/107 28/108/108 +f 28/109/109 40/110/110 41/111/111 29/112/112 +f 29/113/113 41/114/114 42/115/115 30/116/116 +f 30/117/117 42/118/118 43/119/119 31/120/120 +f 31/121/121 43/122/122 44/123/123 32/124/124 +f 32/125/125 44/126/126 45/127/127 33/128/128 +f 33/129/129 45/130/130 46/131/131 34/132/132 +f 34/133/133 46/134/134 47/135/135 35/136/136 +f 35/137/137 47/138/138 48/139/139 36/140/140 +f 36/141/141 48/142/142 37/143/143 25/144/144 +f 37/145/145 49/146/146 50/147/147 38/148/148 +f 38/149/149 50/150/150 51/151/151 39/152/152 +f 39/153/153 51/154/154 52/155/155 40/156/156 +f 40/157/157 52/158/158 53/159/159 41/160/160 +f 41/161/161 53/162/162 54/163/163 42/164/164 +f 42/165/165 54/166/166 55/167/167 43/168/168 +f 43/169/169 55/170/170 56/171/171 44/172/172 +f 44/173/173 56/174/174 57/175/175 45/176/176 +f 45/177/177 57/178/178 58/179/179 46/180/180 +f 46/181/181 58/182/182 59/183/183 47/184/184 +f 47/185/185 59/186/186 60/187/187 48/188/188 +f 48/189/189 60/190/190 49/191/191 37/192/192 +f 49/193/193 61/194/194 62/195/195 50/196/196 +f 50/197/197 62/198/198 63/199/199 51/200/200 +f 51/201/201 63/202/202 64/203/203 52/204/204 +f 52/205/205 64/206/206 65/207/207 53/208/208 +f 53/209/209 65/210/210 66/211/211 54/212/212 +f 54/213/213 66/214/214 67/215/215 55/216/216 +f 55/217/217 67/218/218 68/219/219 56/220/220 +f 56/221/221 68/222/222 69/223/223 57/224/224 +f 57/225/225 69/226/226 70/227/227 58/228/228 +f 58/229/229 70/230/230 71/231/231 59/232/232 +f 59/233/233 71/234/234 72/235/235 60/236/236 +f 60/237/237 72/238/238 61/239/239 49/240/240 +f 61/241/241 73/242/242 74/243/243 62/244/244 +f 62/245/245 74/246/246 75/247/247 63/248/248 +f 63/249/249 75/250/250 76/251/251 64/252/252 +f 64/253/253 76/254/254 77/255/255 65/256/256 +f 65/257/257 77/258/258 78/259/259 66/260/260 +f 66/261/261 78/262/262 79/263/263 67/264/264 +f 67/265/265 79/266/266 80/267/267 68/268/268 +f 68/269/269 80/270/270 81/271/271 69/272/272 +f 69/273/273 81/274/274 82/275/275 70/276/276 +f 70/277/277 82/278/278 83/279/279 71/280/280 +f 71/281/281 83/282/282 84/283/283 72/284/284 +f 72/285/285 84/286/286 73/287/287 61/288/288 +f 73/289/289 85/290/290 86/291/291 74/292/292 +f 74/293/293 86/294/294 87/295/295 75/296/296 +f 75/297/297 87/298/298 88/299/299 76/300/300 +f 76/301/301 88/302/302 89/303/303 77/304/304 +f 77/305/305 89/306/306 90/307/307 78/308/308 +f 78/309/309 90/310/310 91/311/311 79/312/312 +f 79/313/313 91/314/314 92/315/315 80/316/316 +f 80/317/317 92/318/318 93/319/319 81/320/320 +f 81/321/321 93/322/322 94/323/323 82/324/324 +f 82/325/325 94/326/326 95/327/327 83/328/328 +f 83/329/329 95/330/330 96/331/331 84/332/332 +f 84/333/333 96/334/334 85/335/335 73/336/336 +f 85/337/337 97/338/338 98/339/339 86/340/340 +f 86/341/341 98/342/342 99/343/343 87/344/344 +f 87/345/345 99/346/346 100/347/347 88/348/348 +f 88/349/349 100/350/350 101/351/351 89/352/352 +f 89/353/353 101/354/354 102/355/355 90/356/356 +f 90/357/357 102/358/358 103/359/359 91/360/360 +f 91/361/361 103/362/362 104/363/363 92/364/364 +f 92/365/365 104/366/366 105/367/367 93/368/368 +f 93/369/369 105/370/370 106/371/371 94/372/372 +f 94/373/373 106/374/374 107/375/375 95/376/376 +f 95/377/377 107/378/378 108/379/379 96/380/380 +f 96/381/381 108/382/382 97/383/383 85/384/384 +f 97/385/385 109/386/386 110/387/387 98/388/388 +f 98/389/389 110/390/390 111/391/391 99/392/392 +f 99/393/393 111/394/394 112/395/395 100/396/396 +f 100/397/397 112/398/398 113/399/399 101/400/400 +f 101/401/401 113/402/402 114/403/403 102/404/404 +f 102/405/405 114/406/406 115/407/407 103/408/408 +f 103/409/409 115/410/410 116/411/411 104/412/412 +f 104/413/413 116/414/414 117/415/415 105/416/416 +f 105/417/417 117/418/418 118/419/419 106/420/420 +f 106/421/421 118/422/422 119/423/423 107/424/424 +f 107/425/425 119/426/426 120/427/427 108/428/428 +f 108/429/429 120/430/430 109/431/431 97/432/432 +f 109/433/433 121/434/434 122/435/435 110/436/436 +f 110/437/437 122/438/438 123/439/439 111/440/440 +f 111/441/441 123/442/442 124/443/443 112/444/444 +f 112/445/445 124/446/446 125/447/447 113/448/448 +f 113/449/449 125/450/450 126/451/451 114/452/452 +f 114/453/453 126/454/454 127/455/455 115/456/456 +f 115/457/457 127/458/458 128/459/459 116/460/460 +f 116/461/461 128/462/462 129/463/463 117/464/464 +f 117/465/465 129/466/466 130/467/467 118/468/468 +f 118/469/469 130/470/470 131/471/471 119/472/472 +f 119/473/473 131/474/474 132/475/475 120/476/476 +f 120/477/477 132/478/478 121/479/479 109/480/480 +f 139/481/481 1/482/482 2/483/483 152/484/484 +f 152/485/485 2/486/486 3/487/487 148/488/488 +f 148/489/489 3/490/490 4/491/491 134/492/492 +f 134/493/493 4/494/494 5/495/495 144/496/496 +f 144/497/497 5/498/498 6/499/499 154/500/500 +f 154/501/501 6/502/502 7/503/503 140/504/504 +f 140/505/505 7/506/506 8/507/507 151/508/508 +f 151/509/509 8/510/510 9/511/511 147/512/512 +f 147/513/513 9/514/514 10/515/515 133/516/516 +f 133/517/517 10/518/518 11/519/519 143/520/520 +f 143/521/521 11/522/522 12/523/523 153/524/524 +f 153/525/525 12/526/526 1/527/527 139/528/528 +f 150/529/529 122/530/530 121/531/531 137/532/532 +f 146/533/533 123/534/534 122/535/535 150/536/536 +f 136/537/537 124/538/538 123/539/539 146/540/540 +f 142/541/541 125/542/542 124/543/543 136/544/544 +f 156/545/545 126/546/546 125/547/547 142/548/548 +f 138/549/549 127/550/550 126/551/551 156/552/552 +f 149/553/553 128/554/554 127/555/555 138/556/556 +f 145/557/557 129/558/558 128/559/559 149/560/560 +f 135/561/561 130/562/562 129/563/563 145/564/564 +f 141/565/565 131/566/566 130/567/567 135/568/568 +f 155/569/569 132/570/570 131/571/571 141/572/572 +f 137/573/573 121/574/574 132/575/575 155/576/576 +f 174/577/577 140/578/578 151/579/579 179/580/580 +f 177/581/581 149/582/582 138/583/583 176/584/584 +f 179/585/585 151/586/586 147/587/587 161/588/588 +f 163/589/589 145/590/590 149/591/591 177/592/592 +f 161/593/593 147/594/594 133/595/595 157/596/596 +f 159/597/597 135/598/598 145/599/599 163/600/600 +f 157/601/601 133/602/602 143/603/603 165/604/604 +f 167/605/605 141/606/606 135/607/607 159/608/608 +f 165/609/609 143/610/610 153/611/611 169/612/612 +f 171/613/613 155/614/614 141/615/615 167/616/616 +f 169/617/617 153/618/618 139/619/619 173/620/620 +f 175/621/621 137/622/622 155/623/623 171/624/624 +f 173/625/625 139/626/626 152/627/627 180/628/628 +f 180/629/629 152/630/630 148/631/631 162/632/632 +f 178/633/633 150/634/634 137/635/635 175/636/636 +f 164/637/637 146/638/638 150/639/639 178/640/640 +f 162/641/641 148/642/642 134/643/643 158/644/644 +f 158/645/645 134/646/646 144/647/647 166/648/648 +f 160/649/649 136/650/650 146/651/651 164/652/652 +f 168/653/653 142/654/654 136/655/655 160/656/656 +f 166/657/657 144/658/658 154/659/659 170/660/660 +f 170/661/661 154/662/662 140/663/663 174/664/664 +f 172/665/665 156/666/666 142/667/667 168/668/668 +f 176/669/669 138/670/670 156/671/671 172/672/672 diff --git a/data/uvmap.png b/data/uvmap.png new file mode 100644 index 000000000..81b00f401 Binary files /dev/null and b/data/uvmap.png differ diff --git a/examples/CommonInterfaces/CommonGraphicsAppInterface.h b/examples/CommonInterfaces/CommonGraphicsAppInterface.h index 2b189feda..f04c1efac 100644 --- a/examples/CommonInterfaces/CommonGraphicsAppInterface.h +++ b/examples/CommonInterfaces/CommonGraphicsAppInterface.h @@ -27,6 +27,14 @@ struct DrawGridData } }; +enum EnumSphereLevelOfDetail +{ + SPHERE_LOD_POINT_SPRITE=0, + SPHERE_LOD_LOW, + SPHERE_LOD_MEDIUM, + SPHERE_LOD_HIGH, + +}; struct CommonGraphicsApp { class CommonWindowInterface* m_window; @@ -111,8 +119,9 @@ struct CommonGraphicsApp virtual void swapBuffer() = 0; virtual void drawText( const char* txt, int posX, int posY) = 0; virtual void drawText3D( const char* txt, float posX, float posZY, float posZ, float size)=0; - virtual int registerCubeShape(float halfExtentsX,float halfExtentsY, float halfExtentsZ)=0; - virtual int registerGraphicsSphereShape(float radius, bool usePointSprites=true, int largeSphereThreshold=100, int mediumSphereThreshold=10)=0; + virtual int registerCubeShape(float halfExtentsX,float halfExtentsY, float halfExtentsZ, int textureIndex = -1)=0; + virtual int registerGraphicsUnitSphereShape(EnumSphereLevelOfDetail lod, int textureId=-1) = 0; + virtual void registerGrid(int xres, int yres, float color0[4], float color1[4])=0; void defaultMouseButtonCallback( int button, int state, float x, float y) diff --git a/examples/CommonInterfaces/CommonRenderInterface.h b/examples/CommonInterfaces/CommonRenderInterface.h index d3dcc8ea1..6e167c17a 100644 --- a/examples/CommonInterfaces/CommonRenderInterface.h +++ b/examples/CommonInterfaces/CommonRenderInterface.h @@ -43,7 +43,7 @@ struct CommonRenderInterface virtual void drawPoint(const double* position, const double color[4], double pointDrawSize)=0; virtual int registerShape(const float* vertices, int numvertices, const int* indices, int numIndices,int primitiveType=B3_GL_TRIANGLES, int textureIndex=-1)=0; virtual void updateShape(int shapeIndex, const float* vertices)=0; - + virtual int registerTexture(const unsigned char* texels, int width, int height)=0; virtual void writeSingleInstanceTransformToCPU(const float* position, const float* orientation, int srcIndex)=0; virtual void writeSingleInstanceTransformToCPU(const double* position, const double* orientation, int srcIndex)=0; virtual void writeSingleInstanceColorToCPU(float* color, int srcIndex)=0; diff --git a/examples/CommonInterfaces/CommonRigidBodyBase.h b/examples/CommonInterfaces/CommonRigidBodyBase.h index 008314597..c13f9519d 100644 --- a/examples/CommonInterfaces/CommonRigidBodyBase.h +++ b/examples/CommonInterfaces/CommonRigidBodyBase.h @@ -209,9 +209,9 @@ struct CommonRigidBodyBase : public CommonExampleInterface btVector3 hor; hor = rayForward.cross(vertical); - hor.normalize(); + hor.safeNormalize(); vertical = hor.cross(rayForward); - vertical.normalize(); + vertical.safeNormalize(); float tanfov = tanf(0.5f*fov); diff --git a/examples/ExampleBrowser/ExampleEntries.cpp b/examples/ExampleBrowser/ExampleEntries.cpp index 5d35aef57..58a44e7a1 100644 --- a/examples/ExampleBrowser/ExampleEntries.cpp +++ b/examples/ExampleBrowser/ExampleEntries.cpp @@ -38,7 +38,7 @@ #include "../SharedMemory/PhysicsClientExample.h" #include "../Constraints/TestHingeTorque.h" #include "../RenderingExamples/TimeSeriesExample.h" - +#include "../Tutorial/Tutorial.h" #ifdef ENABLE_LUA #include "../LuaDemo/LuaPhysicsSetup.h" @@ -76,6 +76,10 @@ struct ExampleEntry static ExampleEntry gDefaultExamples[]= { + ExampleEntry(0,"Tutorial"), + ExampleEntry(1,"Free Rigid Body","Free moving rigid body, without external or constraint forces", TutorialCreateFunc,0), + + ExampleEntry(0,"API"), ExampleEntry(1,"Basic Example","Create some rigid bodies using box collision shapes. This is a good example to familiarize with the basic initialization of Bullet. The Basic Example can also be compiled without graphical user interface, as a console application. Press W for wireframe, A to show AABBs, I to suspend/restart physics simulation. Press D to toggle auto-deactivation of the simulation. ", BasicExampleCreateFunc), diff --git a/examples/ExampleBrowser/OpenGLExampleBrowser.cpp b/examples/ExampleBrowser/OpenGLExampleBrowser.cpp index b0e11cd42..8ff0a7bf3 100644 --- a/examples/ExampleBrowser/OpenGLExampleBrowser.cpp +++ b/examples/ExampleBrowser/OpenGLExampleBrowser.cpp @@ -51,7 +51,7 @@ static OpenGLGuiHelper* s_guiHelper=0; static MyProfileWindow* s_profWindow =0; #define DEMO_SELECTION_COMBOBOX 13 -const char* startFileName = "bulletDemo.txt"; +const char* startFileName = "0_Bullet3Demo.txt"; static GwenUserInterface* gui = 0; static int sCurrentDemoIndex = -1; diff --git a/examples/ExampleBrowser/premake4.lua b/examples/ExampleBrowser/premake4.lua index e6c419157..f872babe7 100644 --- a/examples/ExampleBrowser/premake4.lua +++ b/examples/ExampleBrowser/premake4.lua @@ -62,6 +62,7 @@ "../SharedMemory/PosixSharedMemory.cpp", "../SharedMemory/Win32SharedMemory.cpp", "../BasicDemo/BasicExample.*", + "../Tutorial/*", "../Benchmarks/*", "../CommonInterfaces/*", "../ForkLift/ForkLiftDemo.*", diff --git a/examples/Importers/ImportObjDemo/ImportObjExample.cpp b/examples/Importers/ImportObjDemo/ImportObjExample.cpp index 7b9444c5d..ccff7fa1e 100644 --- a/examples/Importers/ImportObjDemo/ImportObjExample.cpp +++ b/examples/Importers/ImportObjDemo/ImportObjExample.cpp @@ -8,7 +8,7 @@ #include "Wavefront2GLInstanceGraphicsShape.h" #include "../../Utils/b3ResourcePath.h" #include "Bullet3Common/b3FileUtils.h" - +#include "stb_image/stb_image.h" #include "../CommonInterfaces/CommonRigidBodyBase.h" @@ -58,7 +58,7 @@ void ImportObjSetup::initPhysics() m_dynamicsWorld->getDebugDrawer()->setDebugMode(btIDebugDraw::DBG_DrawWireframe); - const char* fileName = "samurai_monastry.obj"; + const char* fileName = "sphere8.obj"; char relativeFileName[1024]; if (b3ResourcePath::findResourcePath(fileName, relativeFileName, 1024)) { @@ -86,10 +86,49 @@ void ImportObjSetup::initPhysics() btVector3 position = trans.getOrigin(); btQuaternion orn = trans.getRotation(); - btVector3 color(0,0,1); + btVector3 color(1,1,1); + int textureIndex = -1; + //try to load some texture + for (int i=0;i0) + { + + int width,height,n; + const char* filename = shape.material.diffuse_texname.c_str(); + const unsigned char* image=0; - int shapeId = m_guiHelper->getRenderInterface()->registerShape(&gfxShape->m_vertices->at(0).xyzw[0], gfxShape->m_numvertices, &gfxShape->m_indices->at(0), gfxShape->m_numIndices); + const char* prefix[]={"./","./data/","../data/","../../data/","../../../data/","../../../../data/"}; + int numprefix = sizeof(prefix)/sizeof(const char*); + + for (int i=0;!image && igetRenderInterface()->registerTexture(image,width,height); + if (textureIndex>=0) + { + break; + } + } + + } + + } + + if (1) + { + + } + + int shapeId = m_guiHelper->getRenderInterface()->registerShape(&gfxShape->m_vertices->at(0).xyzw[0], gfxShape->m_numvertices, &gfxShape->m_indices->at(0), gfxShape->m_numIndices,B3_GL_TRIANGLES,textureIndex); //int id = m_guiHelper->getRenderInterface()->registerGraphicsInstance(shapeId,position,orn,color,scaling); diff --git a/examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp b/examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp index d7d18e701..c1b417ec9 100644 --- a/examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp +++ b/examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp @@ -40,24 +40,46 @@ GLInstanceGraphicsShape* btgCreateGraphicsShapeFromWavefrontObj(std::vectortextureList[face->vertex_index[1]]->e[0]; - vtx1.uv[1] = 0.5f;//obj->textureList[face->vertex_index[1]]->e[1]; + + if (shape.mesh.texcoords.size()) + { + vtx1.uv[0] = shape.mesh.texcoords[shape.mesh.indices[f+1]*2+0]; + vtx1.uv[1] = shape.mesh.texcoords[shape.mesh.indices[f+1]*2+1]; + } else + { + vtx1.uv[0] = 0.5f; + vtx1.uv[1] = 0.5f; + } GLInstanceVertex vtx2; vtx2.xyzw[0] = shape.mesh.positions[shape.mesh.indices[f+2]*3+0]; vtx2.xyzw[1] = shape.mesh.positions[shape.mesh.indices[f+2]*3+1]; vtx2.xyzw[2] = shape.mesh.positions[shape.mesh.indices[f+2]*3+2]; vtx2.xyzw[3] = 0.f; - vtx2.uv[0] = 0.5f; - vtx2.uv[1] = 0.5f; + if (shape.mesh.texcoords.size()) + { + vtx2.uv[0] = shape.mesh.texcoords[shape.mesh.indices[f+2]*2+0]; + vtx2.uv[1] = shape.mesh.texcoords[shape.mesh.indices[f+2]*2+1]; + } else + { + vtx2.uv[0] = 0.5; + vtx2.uv[1] = 0.5; + } btVector3 v0(vtx0.xyzw[0],vtx0.xyzw[1],vtx0.xyzw[2]); diff --git a/examples/OpenGLWindow/GLInstancingRenderer.cpp b/examples/OpenGLWindow/GLInstancingRenderer.cpp index 61559443e..756fdfdf4 100644 --- a/examples/OpenGLWindow/GLInstancingRenderer.cpp +++ b/examples/OpenGLWindow/GLInstancingRenderer.cpp @@ -214,6 +214,8 @@ static GLint createShadow_depthMVP=0; static GLint ModelViewMatrix=0; static GLint ProjectionMatrix=0; +static GLint regularLightDirIn=0; + static GLint uniform_texture_diffuse = 0; @@ -688,6 +690,8 @@ void GLInstancingRenderer::InitShaders() ModelViewMatrix = glGetUniformLocation(instancingShader, "ModelViewMatrix"); ProjectionMatrix = glGetUniformLocation(instancingShader, "ProjectionMatrix"); uniform_texture_diffuse = glGetUniformLocation(instancingShader, "Diffuse"); + regularLightDirIn = glGetUniformLocation(instancingShader,"lightDirIn"); + glUseProgram(0); instancingShaderPointSprite = gltLoadShaderPair(pointSpriteVertexShader,pointSpriteFragmentShader); @@ -1559,6 +1563,11 @@ b3Assert(glGetError() ==GL_NO_ERROR); glUseProgram(instancingShader); glUniformMatrix4fv(ProjectionMatrix, 1, false, &m_data->m_projectionMatrix[0]); glUniformMatrix4fv(ModelViewMatrix, 1, false, &m_data->m_viewMatrix[0]); + + b3Vector3 gLightDir = gLightPos; + gLightDir.normalize(); + glUniform3f(regularLightDirIn,gLightDir[0],gLightDir[1],gLightDir[2]); + glUniform1i(uniform_texture_diffuse, 0); glDrawElementsInstanced(GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, indexOffset, gfxObj->m_numGraphicsInstances); break; diff --git a/examples/OpenGLWindow/Shaders/instancingPS.glsl b/examples/OpenGLWindow/Shaders/instancingPS.glsl index edb5bd9b7..fd992e5a8 100644 --- a/examples/OpenGLWindow/Shaders/instancingPS.glsl +++ b/examples/OpenGLWindow/Shaders/instancingPS.glsl @@ -26,7 +26,7 @@ void main(void) vec3 ct,cf; float intensity,at,af; intensity = max(dot(lightDir,normalize(normal)),0); - cf = intensity*vec3(1.0,1.0,1.0)+ambient; + cf = intensity*(vec3(1.0,1.0,1.0)-ambient)+ambient; af = 1.0; ct = texel.rgb; diff --git a/examples/OpenGLWindow/Shaders/instancingPS.h b/examples/OpenGLWindow/Shaders/instancingPS.h index cf52431be..a32e7b29c 100644 --- a/examples/OpenGLWindow/Shaders/instancingPS.h +++ b/examples/OpenGLWindow/Shaders/instancingPS.h @@ -23,7 +23,7 @@ static const char* instancingFragmentShader= \ " vec3 ct,cf;\n" " float intensity,at,af;\n" " intensity = max(dot(lightDir,normalize(normal)),0);\n" -" cf = intensity*vec3(1.0,1.0,1.0)+ambient;\n" +" cf = intensity*(vec3(1.0,1.0,1.0)-ambient)+ambient;\n" " af = 1.0;\n" " \n" " ct = texel.rgb;\n" diff --git a/examples/OpenGLWindow/Shaders/instancingVS.glsl b/examples/OpenGLWindow/Shaders/instancingVS.glsl index 3c0cbc683..1663f3698 100644 --- a/examples/OpenGLWindow/Shaders/instancingVS.glsl +++ b/examples/OpenGLWindow/Shaders/instancingVS.glsl @@ -13,6 +13,7 @@ layout (location = 6) in vec3 instance_scale; uniform mat4 ModelViewMatrix; uniform mat4 ProjectionMatrix; +uniform vec3 lightDirIn; out Fragment { @@ -60,17 +61,13 @@ out vec3 lightDir,normal,ambient; void main(void) { vec4 q = instance_quaternion; - ambient = vec3(0.3,.3,0.3); - - - vec4 local_normal = (quatRotate3( vertexnormal,q)); - vec3 light_pos = vec3(-0.3,0.1,0.1); - normal = local_normal.xyz;//normalize(ModelViewMatrix * local_normal).xyz; - - lightDir = normalize(light_pos);//gl_LightSource[0].position.xyz)); -// lightDir = normalize(vec3(gl_LightSource[0].position)); - - vec4 axis = vec4(1,1,1,0); + ambient = vec3(0.6,.6,0.6); + + vec4 worldNormal = (quatRotate3( vertexnormal,q)); + normal = normalize(worldNormal).xyz; + + lightDir = lightDirIn; + vec4 localcoord = quatRotate3( position.xyz*instance_scale,q); vec4 vertexPos = ProjectionMatrix * ModelViewMatrix *(instance_position+localcoord); diff --git a/examples/OpenGLWindow/Shaders/instancingVS.h b/examples/OpenGLWindow/Shaders/instancingVS.h index 94abae198..563d22127 100644 --- a/examples/OpenGLWindow/Shaders/instancingVS.h +++ b/examples/OpenGLWindow/Shaders/instancingVS.h @@ -11,6 +11,7 @@ static const char* instancingVertexShader= \ "layout (location = 6) in vec3 instance_scale;\n" "uniform mat4 ModelViewMatrix;\n" "uniform mat4 ProjectionMatrix;\n" +"uniform vec3 lightDirIn;\n" "out Fragment\n" "{\n" " vec4 color;\n" @@ -51,16 +52,13 @@ static const char* instancingVertexShader= \ "void main(void)\n" "{\n" " vec4 q = instance_quaternion;\n" -" ambient = vec3(0.3,.3,0.3);\n" -" \n" -" \n" -" vec4 local_normal = (quatRotate3( vertexnormal,q));\n" -" vec3 light_pos = vec3(-0.3,0.1,0.1);\n" -" normal = local_normal.xyz;//normalize(ModelViewMatrix * local_normal).xyz;\n" -" lightDir = normalize(light_pos);//gl_LightSource[0].position.xyz));\n" -"// lightDir = normalize(vec3(gl_LightSource[0].position));\n" -" \n" -" vec4 axis = vec4(1,1,1,0);\n" +" ambient = vec3(0.6,.6,0.6);\n" +" \n" +" vec4 worldNormal = (quatRotate3( vertexnormal,q));\n" +" normal = normalize(worldNormal).xyz;\n" +" \n" +" lightDir = lightDirIn;\n" +" \n" " vec4 localcoord = quatRotate3( position.xyz*instance_scale,q);\n" " vec4 vertexPos = ProjectionMatrix * ModelViewMatrix *(instance_position+localcoord);\n" " gl_Position = vertexPos;\n" diff --git a/examples/OpenGLWindow/Shaders/useShadowMapInstancingPS.glsl b/examples/OpenGLWindow/Shaders/useShadowMapInstancingPS.glsl index c4913d702..cd780fbea 100644 --- a/examples/OpenGLWindow/Shaders/useShadowMapInstancingPS.glsl +++ b/examples/OpenGLWindow/Shaders/useShadowMapInstancingPS.glsl @@ -23,13 +23,13 @@ out vec4 color; void main(void) { - vec4 texel = fragment.color*texture(Diffuse,vert.texcoord);//fragment.color; + vec4 texel = fragment.color*texture(Diffuse,vert.texcoord); vec3 ct,cf; float intensity,at,af; intensity = clamp( dot( normalize(normal),lightDir ), 0,1 ); - cf = ambient; + af = 1.0; ct = texel.rgb; @@ -43,14 +43,9 @@ void main(void) float visibility = texture(shadowMap, vec3(ShadowCoord.xy,(ShadowCoord.z-bias)/ShadowCoord.w)); - intensity*=2; - if (intensity>1) - intensity=1.f; + intensity = 0.7*intensity + 0.3*intensity*visibility; - visibility *= intensity; - - if (visibility<0.6) - visibility=0.6f; + cf = intensity*(vec3(1.0,1.0,1.0)-ambient)+ambient; - color = vec4(ct * visibility, fragment.color.w); + color = vec4(ct * cf, fragment.color.w); } diff --git a/examples/OpenGLWindow/Shaders/useShadowMapInstancingPS.h b/examples/OpenGLWindow/Shaders/useShadowMapInstancingPS.h index d43ec5dcb..0550ff58a 100644 --- a/examples/OpenGLWindow/Shaders/useShadowMapInstancingPS.h +++ b/examples/OpenGLWindow/Shaders/useShadowMapInstancingPS.h @@ -17,13 +17,13 @@ static const char* useShadowMapInstancingFragmentShader= \ "out vec4 color;\n" "void main(void)\n" "{\n" -" vec4 texel = fragment.color*texture(Diffuse,vert.texcoord);//fragment.color;\n" +" vec4 texel = fragment.color*texture(Diffuse,vert.texcoord);\n" " vec3 ct,cf;\n" " float intensity,at,af;\n" " \n" " intensity = clamp( dot( normalize(normal),lightDir ), 0,1 );\n" " \n" -" cf = ambient;\n" +" \n" " af = 1.0;\n" " \n" " ct = texel.rgb;\n" @@ -35,15 +35,10 @@ static const char* useShadowMapInstancingFragmentShader= \ " bias = clamp(bias, 0,0.01);\n" " float visibility = texture(shadowMap, vec3(ShadowCoord.xy,(ShadowCoord.z-bias)/ShadowCoord.w));\n" " \n" -" intensity*=2;\n" -" if (intensity>1)\n" -" intensity=1.f;\n" +" intensity = 0.7*intensity + 0.3*intensity*visibility;\n" " \n" -" visibility *= intensity;\n" -" \n" -" if (visibility<0.6)\n" -" visibility=0.6f;\n" +" cf = intensity*(vec3(1.0,1.0,1.0)-ambient)+ambient;\n" " \n" -" color = vec4(ct * visibility, fragment.color.w);\n" +" color = vec4(ct * cf, fragment.color.w);\n" "}\n" ; diff --git a/examples/OpenGLWindow/Shaders/useShadowMapInstancingVS.glsl b/examples/OpenGLWindow/Shaders/useShadowMapInstancingVS.glsl index fe16aaf4c..9de5c0aa5 100644 --- a/examples/OpenGLWindow/Shaders/useShadowMapInstancingVS.glsl +++ b/examples/OpenGLWindow/Shaders/useShadowMapInstancingVS.glsl @@ -65,7 +65,7 @@ out vec3 lightDir,normal,ambient; void main(void) { vec4 q = instance_quaternion; - ambient = vec3(0.3,.3,0.3); + ambient = vec3(0.6,.6,0.6); vec4 worldNormal = (quatRotate3( vertexnormal,q)); @@ -73,7 +73,7 @@ void main(void) lightDir = lightDirIn; - vec4 axis = vec4(1,1,1,0); + vec4 localcoord = quatRotate3( position.xyz*instance_scale,q); vec4 vertexPos = MVP* vec4((instance_position+localcoord).xyz,1); diff --git a/examples/OpenGLWindow/Shaders/useShadowMapInstancingVS.h b/examples/OpenGLWindow/Shaders/useShadowMapInstancingVS.h index 8c2ee8765..e52ec62ee 100644 --- a/examples/OpenGLWindow/Shaders/useShadowMapInstancingVS.h +++ b/examples/OpenGLWindow/Shaders/useShadowMapInstancingVS.h @@ -55,14 +55,14 @@ static const char* useShadowMapInstancingVertexShader= \ "void main(void)\n" "{\n" " vec4 q = instance_quaternion;\n" -" ambient = vec3(0.3,.3,0.3);\n" +" ambient = vec3(0.6,.6,0.6);\n" " \n" " vec4 worldNormal = (quatRotate3( vertexnormal,q));\n" " \n" " normal = normalize(worldNormal).xyz;\n" " lightDir = lightDirIn;\n" " \n" -" vec4 axis = vec4(1,1,1,0);\n" +" \n" " vec4 localcoord = quatRotate3( position.xyz*instance_scale,q);\n" " vec4 vertexPos = MVP* vec4((instance_position+localcoord).xyz,1);\n" " gl_Position = vertexPos;\n" diff --git a/examples/OpenGLWindow/SimpleOpenGL2App.h b/examples/OpenGLWindow/SimpleOpenGL2App.h index 23af2e09b..26fb2468b 100644 --- a/examples/OpenGLWindow/SimpleOpenGL2App.h +++ b/examples/OpenGLWindow/SimpleOpenGL2App.h @@ -19,11 +19,11 @@ public: virtual void swapBuffer(); virtual void drawText( const char* txt, int posX, int posY); virtual void setBackgroundColor(float red, float green, float blue); - virtual int registerCubeShape(float halfExtentsX,float halfExtentsY, float halfExtentsZ) + virtual int registerCubeShape(float halfExtentsX,float halfExtentsY, float halfExtentsZ, int textureIndex = -1) { return 0; } - virtual int registerGraphicsSphereShape(float radius, bool usePointSprites, int largeSphereThreshold, int mediumSphereThreshold) + virtual int registerGraphicsUnitSphereShape(EnumSphereLevelOfDetail lod, int textureId=-1) { return 0; } diff --git a/examples/OpenGLWindow/SimpleOpenGL2Renderer.h b/examples/OpenGLWindow/SimpleOpenGL2Renderer.h index c92c529a9..45c7809da 100644 --- a/examples/OpenGLWindow/SimpleOpenGL2Renderer.h +++ b/examples/OpenGLWindow/SimpleOpenGL2Renderer.h @@ -46,6 +46,10 @@ struct SimpleOpenGL2Renderer : public CommonRenderInterface { return m_height; } + virtual int registerTexture(const unsigned char* texels, int width, int height) + { + return -1; + } virtual int registerGraphicsInstance(int shapeIndex, const double* position, const double* quaternion, const double* color, const double* scaling); virtual int registerGraphicsInstance(int shapeIndex, const float* position, const float* quaternion, const float* color, const float* scaling); diff --git a/examples/OpenGLWindow/SimpleOpenGL3App.cpp b/examples/OpenGLWindow/SimpleOpenGL3App.cpp index 792ca8438..a5fda66ba 100644 --- a/examples/OpenGLWindow/SimpleOpenGL3App.cpp +++ b/examples/OpenGLWindow/SimpleOpenGL3App.cpp @@ -419,7 +419,7 @@ struct GfxVertex float u,v; }; -int SimpleOpenGL3App::registerCubeShape(float halfExtentsX,float halfExtentsY, float halfExtentsZ) +int SimpleOpenGL3App::registerCubeShape(float halfExtentsX,float halfExtentsY, float halfExtentsZ, int textureIndex) { @@ -442,7 +442,7 @@ int SimpleOpenGL3App::registerCubeShape(float halfExtentsX,float halfExtentsY, f verts[i].v = cube_vertices[i*9+8]; } - int shapeId = m_instancingRenderer->registerShape(&verts[0].x,numVertices,cube_indices,numIndices); + int shapeId = m_instancingRenderer->registerShape(&verts[0].x,numVertices,cube_indices,numIndices,B3_GL_TRIANGLES,textureIndex); return shapeId; } @@ -480,42 +480,46 @@ void SimpleOpenGL3App::registerGrid(int cells_x, int cells_z, float color0[4], f } - -int SimpleOpenGL3App::registerGraphicsSphereShape(float radius, bool usePointSprites, int largeSphereThreshold, int mediumSphereThreshold) +int SimpleOpenGL3App::registerGraphicsUnitSphereShape(EnumSphereLevelOfDetail lod, int textureId) { int strideInBytes = 9*sizeof(float); int graphicsShapeIndex = -1; - if (radius>=largeSphereThreshold) + switch (lod) { - int numVertices = sizeof(detailed_sphere_vertices)/strideInBytes; - int numIndices = sizeof(detailed_sphere_indices)/sizeof(int); - graphicsShapeIndex = m_instancingRenderer->registerShape(&detailed_sphere_vertices[0],numVertices,detailed_sphere_indices,numIndices); - } else - { - - if (usePointSprites) + case SPHERE_LOD_POINT_SPRITE: { int numVertices = sizeof(point_sphere_vertices)/strideInBytes; int numIndices = sizeof(point_sphere_indices)/sizeof(int); - graphicsShapeIndex = m_instancingRenderer->registerShape(&point_sphere_vertices[0],numVertices,point_sphere_indices,numIndices,B3_GL_POINTS); - } else - { - if (radius>=mediumSphereThreshold) - { - int numVertices = sizeof(medium_sphere_vertices)/strideInBytes; - int numIndices = sizeof(medium_sphere_indices)/sizeof(int); - graphicsShapeIndex = m_instancingRenderer->registerShape(&medium_sphere_vertices[0],numVertices,medium_sphere_indices,numIndices); - } else - { - int numVertices = sizeof(low_sphere_vertices)/strideInBytes; - int numIndices = sizeof(low_sphere_indices)/sizeof(int); - graphicsShapeIndex = m_instancingRenderer->registerShape(&low_sphere_vertices[0],numVertices,low_sphere_indices,numIndices); - } + graphicsShapeIndex = m_instancingRenderer->registerShape(&point_sphere_vertices[0],numVertices,point_sphere_indices,numIndices,B3_GL_POINTS,textureId); + break; } - } + + case SPHERE_LOD_LOW: + { + int numVertices = sizeof(low_sphere_vertices)/strideInBytes; + int numIndices = sizeof(low_sphere_indices)/sizeof(int); + graphicsShapeIndex = m_instancingRenderer->registerShape(&low_sphere_vertices[0],numVertices,low_sphere_indices,numIndices,B3_GL_TRIANGLES,textureId); + break; + } + case SPHERE_LOD_MEDIUM: + { + int numVertices = sizeof(medium_sphere_vertices)/strideInBytes; + int numIndices = sizeof(medium_sphere_indices)/sizeof(int); + graphicsShapeIndex = m_instancingRenderer->registerShape(&medium_sphere_vertices[0],numVertices,medium_sphere_indices,numIndices,B3_GL_TRIANGLES,textureId); + break; + } + case SPHERE_LOD_HIGH: + default: + { + int numVertices = sizeof(detailed_sphere_vertices)/strideInBytes; + int numIndices = sizeof(detailed_sphere_indices)/sizeof(int); + graphicsShapeIndex = m_instancingRenderer->registerShape(&detailed_sphere_vertices[0],numVertices,detailed_sphere_indices,numIndices,B3_GL_TRIANGLES,textureId); + break; + } + }; return graphicsShapeIndex; } diff --git a/examples/OpenGLWindow/SimpleOpenGL3App.h b/examples/OpenGLWindow/SimpleOpenGL3App.h index 10cbd8f6f..64123c36e 100644 --- a/examples/OpenGLWindow/SimpleOpenGL3App.h +++ b/examples/OpenGLWindow/SimpleOpenGL3App.h @@ -19,8 +19,8 @@ struct SimpleOpenGL3App : public CommonGraphicsApp SimpleOpenGL3App(const char* title, int width,int height); virtual ~SimpleOpenGL3App(); - virtual int registerCubeShape(float halfExtentsX=1.f,float halfExtentsY=1.f, float halfExtentsZ = 1.f); - virtual int registerGraphicsSphereShape(float radius, bool usePointSprites=true, int largeSphereThreshold=100, int mediumSphereThreshold=10); + virtual int registerCubeShape(float halfExtentsX=1.f,float halfExtentsY=1.f, float halfExtentsZ = 1.f, int textureIndex = -1); + virtual int registerGraphicsUnitSphereShape(EnumSphereLevelOfDetail lod, int textureId=-1); virtual void registerGrid(int xres, int yres, float color0[4], float color1[4]); void dumpNextFrameToPng(const char* pngFilename); void dumpFramesToVideo(const char* mp4Filename); diff --git a/examples/Tutorial/Tutorial.cpp b/examples/Tutorial/Tutorial.cpp new file mode 100644 index 000000000..71fcdf4c4 --- /dev/null +++ b/examples/Tutorial/Tutorial.cpp @@ -0,0 +1,248 @@ + +#include "Tutorial.h" +#include "../CommonInterfaces/CommonGraphicsAppInterface.h" +#include "../CommonInterfaces/CommonRenderInterface.h" + +#include "../CommonInterfaces/CommonExampleInterface.h" +#include "LinearMath/btTransform.h" +#include "stb_image/stb_image.h" + +#include "../CommonInterfaces/CommonGUIHelperInterface.h" + +struct LWPose +{ + btVector3 m_worldPosition; + btQuaternion m_worldOrientation; + LWPose() + :m_worldPosition(0,0,0), + m_worldOrientation(0,0,0,1) + { + } + +}; + +enum LWRIGIDBODY_FLAGS +{ + LWFLAG_USE_QUATERNION_DERIVATIVE = 1, + +}; +struct LWRightBody +{ + LWPose m_worldPose; + btVector3 m_linearVelocity; + btVector3 m_angularVelocity; + + int m_graphicsIndex; + int m_flags; + + LWRightBody() + :m_linearVelocity(0,0,0), + m_angularVelocity(0,0,0), + m_flags(LWFLAG_USE_QUATERNION_DERIVATIVE) + { + + } + + void integrateTransform(double deltaTime) + { + LWPose newPose; + + newPose.m_worldPosition = m_worldPose.m_worldPosition + m_linearVelocity*deltaTime; + + if (m_flags & LWFLAG_USE_QUATERNION_DERIVATIVE) + { + newPose.m_worldOrientation = m_worldPose.m_worldOrientation; + newPose.m_worldOrientation += (m_angularVelocity * newPose.m_worldOrientation) * (deltaTime * btScalar(0.5)); + newPose.m_worldOrientation.normalize(); + m_worldPose = newPose; + } else + { + //Exponential map + //google for "Practical Parameterization of Rotations Using the Exponential Map", F. Sebastian Grassia + + btVector3 axis; + btScalar fAngle = m_angularVelocity.length(); + //limit the angular motion + const btScalar angularMotionThreshold = btScalar(0.5)*SIMD_HALF_PI; + + if (fAngle*deltaTime > angularMotionThreshold) + { + fAngle = angularMotionThreshold / deltaTime; + } + + if ( fAngle < btScalar(0.001) ) + { + // use Taylor's expansions of sync function + axis = m_angularVelocity*( btScalar(0.5)*deltaTime-(deltaTime*deltaTime*deltaTime)*(btScalar(0.020833333333))*fAngle*fAngle ); + } + else + { + // sync(fAngle) = sin(c*fAngle)/t + axis = m_angularVelocity*( btSin(btScalar(0.5)*fAngle*deltaTime)/fAngle ); + } + btQuaternion dorn (axis.x(),axis.y(),axis.z(),btCos( fAngle*deltaTime*btScalar(0.5) )); + btQuaternion orn0 = m_worldPose.m_worldOrientation; + + btQuaternion predictedOrn = dorn * orn0; + predictedOrn.normalize(); + m_worldPose.m_worldOrientation = predictedOrn; + } + } + + + void stepSimulation(double deltaTime) + { + integrateTransform(deltaTime); + } +}; + + + +///quick demo showing the right-handed coordinate system and positive rotations around each axis +class Tutorial : public CommonExampleInterface +{ + CommonGraphicsApp* m_app; + float m_x; + float m_y; + float m_z; + int m_tutorialIndex; + + LWRightBody* m_body; + +public: + + Tutorial(CommonGraphicsApp* app, int tutorialIndex) + :m_app(app), + m_x(0), + m_y(0), + m_z(0), + m_tutorialIndex(tutorialIndex) + { + m_app->setUpAxis(2); + + + { + + int boxId = m_app->registerCubeShape(100,100,1); + btVector3 pos(0,0,-1); + btQuaternion orn(0,0,0,1); + btVector4 color(1,1,1,1); + btVector3 scaling(1,1,1); + m_app->m_renderer->registerGraphicsInstance(boxId,pos,orn,color,scaling); + } + + m_body = new LWRightBody(); + m_body->m_worldPose.m_worldPosition.setValue(0,0,3); + + { + int textureIndex = -1; + + if (1) + { + int width,height,n; + + const char* filename = "data/cube.png"; + const unsigned char* image=0; + + const char* prefix[]={"./","../","../../","../../../","../../../../"}; + int numprefix = sizeof(prefix)/sizeof(const char*); + + for (int i=0;!image && im_renderer->registerTexture(image,width,height); + } + } + + int boxId = m_app->registerCubeShape(1,1,1,textureIndex);//>registerGraphicsUnitSphereShape(SPHERE_LOD_HIGH, textureIndex); + btVector4 color(1,1,1,1); + btVector3 scaling(1,1,1); + m_body->m_graphicsIndex = m_app->m_renderer->registerGraphicsInstance(boxId,m_body->m_worldPose.m_worldPosition, m_body->m_worldPose.m_worldOrientation,color,scaling); + m_app->m_renderer->writeSingleInstanceTransformToCPU(m_body->m_worldPose.m_worldPosition, m_body->m_worldPose.m_worldOrientation, m_body->m_graphicsIndex); + } + + m_app->m_renderer->writeTransforms(); + } + virtual ~Tutorial() + { + m_app->m_renderer->enableBlend(false); + } + + + virtual void initPhysics() + { + } + virtual void exitPhysics() + { + + } + virtual void stepSimulation(float deltaTime) + { + m_x+=0.01f; + m_y+=0.01f; + m_z+=0.01f; + //m_body->m_worldPose.m_worldPosition+= btVector3(0,0.01,0); + //m_body->m_linearVelocity=btVector3(0,0.1,0); + m_body->m_angularVelocity =btVector3(0,0.1,0); + m_body->integrateTransform(deltaTime); + + m_app->m_renderer->writeSingleInstanceTransformToCPU(m_body->m_worldPose.m_worldPosition, m_body->m_worldPose.m_worldOrientation, m_body->m_graphicsIndex); + m_app->m_renderer->writeTransforms(); + } + virtual void renderScene() + { + m_app->m_renderer->renderScene(); + m_app->drawText3D("X",1,0,0,1); + m_app->drawText3D("Y",0,1,0,1); + m_app->drawText3D("Z",0,0,1,1); + } + + + + virtual void physicsDebugDraw(int debugDrawFlags) + { + + + } + virtual bool mouseMoveCallback(float x,float y) + { + return false; + } + virtual bool mouseButtonCallback(int button, int state, float x, float y) + { + return false; + } + virtual bool keyboardCallback(int key, int state) + { + return false; + } + + + virtual void resetCamera() + { + float dist = 3.5; + float pitch = 136; + float yaw = 32; + float targetPos[3]={0,0,0}; + if (m_app->m_renderer && m_app->m_renderer->getActiveCamera()) + { + m_app->m_renderer->getActiveCamera()->setCameraDistance(dist); + m_app->m_renderer->getActiveCamera()->setCameraPitch(pitch); + m_app->m_renderer->getActiveCamera()->setCameraYaw(yaw); + m_app->m_renderer->getActiveCamera()->setCameraTargetPosition(targetPos[0],targetPos[1],targetPos[2]); + } + } +}; + +class CommonExampleInterface* TutorialCreateFunc(struct CommonExampleOptions& options) +{ + return new Tutorial(options.m_guiHelper->getAppInterface(), options.m_option); +} + diff --git a/examples/Tutorial/Tutorial.h b/examples/Tutorial/Tutorial.h new file mode 100644 index 000000000..fb93e6c76 --- /dev/null +++ b/examples/Tutorial/Tutorial.h @@ -0,0 +1,6 @@ +#ifndef TUTORIAL_H +#define TUTORIAL_H + +class CommonExampleInterface* TutorialCreateFunc(struct CommonExampleOptions& options); + +#endif //TUTORIAL_H