diff --git a/Assignment_1_Execution.hpp b/Assignment_1_Execution.hpp new file mode 100644 index 0000000..98d1654 --- /dev/null +++ b/Assignment_1_Execution.hpp @@ -0,0 +1,802 @@ +/* +Title : Execution +Author: Edward R. Gonzalez + +Description: +This brings together the functionality I made in DGL and the Actions libraries to produce an OpenGL Workspace. + +Currently the workspace is heavily hardcoded and has one light rotating around the specified object. The material for the object is set during prep as well. + +All exposed library references are inside the inline namespace right after declaring the namespace execution. + +After I have the global objects used, followed by the functionality implementations, and at the very end the main function running the default execution implementation. +*/ + +#pragma once + + +// DGL +#include "DGL/DGL.hpp" + +// Utility +#include "Actions.hpp" + +// Non-Standard C++ +#include "Cpp_Alias.hpp" + + + +namespace Execution +{ + inline namespace LibraryReferences + { + // DGL + + using DGL::EAxis ; + using DGL::EBool ; + using DGL::ECursorMode ; + using DGL::EDirection ; + using DGL::EFrameBuffer ; + using DGL::EKeyCodes ; + using DGL::EMouseMode ; + using DGL::EPrimitives ; + using DGL::ERotationAxis; + + using DGL::Camera ; + using DGL::Entity_Basic ; + using DGL::gFloat ; + using DGL::Light_Basic ; + using DGL::LinearColor ; + using DGL::Material_Phong; + using DGL::Matrix ; + using DGL::Matrix4x4 ; + using DGL::Model ; + using DGL::TimeValDec ; + using DGL::Vector3 ; + using DGL::Window ; + + using DGL::BindVertexArray ; + using DGL::CanUseRawMouse ; + using DGL::ClearBuffer ; + using DGL::CreateWindow ; + using DGL::DestoryWindow ; + using DGL::DisableVertexAttributeArray; + using DGL::EnableDepth ; + using DGL::EnableVertexAttributeArray ; + using DGL::GetCursorPosition ; + using DGL::GetTime ; + using DGL::InitalizeGLEW ; + using DGL::InitalizeGLFW ; + using DGL::LoadDefaultShaders ; + using DGL::KeyPressed ; + using DGL::NotShared ; + using DGL::PollEvents ; + using DGL::ResetCursor ; + using DGL::SetClearColor ; + using DGL::SetCurrentContext ; + using DGL::SetInputMode ; + using DGL::SetPolygonMode ; + using DGL::SetUniformVariable_MVA ; + using DGL::SetWindowHeader ; + using DGL::SwapBuffers ; + using DGL::UseProgramShader ; + using DGL::TerminateGLFW ; + using DGL::WindowedMode ; + + using DGL::DefaultSpace::ScreenWidth ; + using DGL::DefaultSpace::ScreenHeight ; + using DGL::DefaultSpace::ScreenCenterHeight; + using DGL::DefaultSpace::ScreenCenterWidth ; + using DGL::DefaultSpace::Screenspace ; + using DGL::DefaultSpace::WorldCamera ; + + using DGL::DefaultSpace::UpdateScreenspace; + + // Actions + + using Actions::ActionQueue; + } + + enum class EModels + { + Bunny , + Eight , + Gargoyle , + Hand , + Horse , + Sculpture, + Topology , + Torus + }; + + + // Globals + + // Assignment 1 + + bool Exist = true; // Determines if the the execution should exit cycler. + + TimeValDec CycleStart , // Snapshot of cycle loop start time. + CycleEnd , // Snapshot of cycle loop end time. + DeltaTime , // Delta between last cycle start and end. + InputInterval = 1.0f / 60.0f, // Interval per second to complete the input process of the cycle. + PhysicsInterval = 1.0f / 60.0f, // Interval per second to complete the physics process of the cycle. + RenderInterval = 1.0f / 60.0f ; // Interval per second to complete the render process of the cycle. + + Window* DefaultWindow; // Default window to use for execution. + + double CursorX, CursorY; // Cursor axis position on the window. + + bool CursorOff = true, + ShowLight = true, + RotateObj = true, + OrbitLight = true ; + + gFloat CamMoveSpeed = 7.0f, // Rate at which the camera should move. + CamRotationSpeed = 27.0f ; // Rate at which the camera should rotate. + + TimeValDec InputDelta = 0.0, // Current delta since last input process. + PhysicsDelta = 0.0, // Current delta since last physics process. + RenderDelta = 0.0 ; // Current delta since last render process. + + ActionQueue ActionsToComplete; // Actions queue to run during the physics process of the cycle. + + EModels CurrentModel = EModels::Bunny; + + Model Bunny ("./Models/bunny.obj" ); + Model Eight ("./Models/eight.obj" ); + Model Gargoyle ("./Models/gargoyle.obj" ); + Model Hand ("./Models/hand.obj" ); + Model Horse ("./Models/horse.obj" ); + Model Sculpture("./Models/sculpture.obj" ); + Model Topology ("./Models/topology.obj" ); + Model Torus ("./Models/Torus.obj" ); + + DGL::HE_Model BlenderTorus("./Models/torus_Blender.obj"); + + Material_Phong ObjectMaterial; // Material to use on the model. + + Light_Basic Light ; // Hardcoded light. Rotates around object. + Entity_Basic ObjectToView; // Object that will be currently in the middle with the light source rotating. + + string + windowTitle = "Assignment 1" , + deltaStr = "Delta: " , + inputDeltaStr = "Input Delta: " , + physicsDeltaStr = "Physics Delta: " , + renderDeltaStr = "RenderDeltaStr: " ; + + stringstream WindowTitle; + + // Functionality + + // Input Action functions... + + void ChangeModel() + { + if (CurrentModel == EModels::Torus) + { + CurrentModel = EModels::Bunny; + } + else + { + CurrentModel = EModels(int(CurrentModel) + 1); + } + + switch (CurrentModel) + { + case EModels::Bunny: + { + if (not Bunny.Ready()) + { + SetWindowHeader(DefaultWindow, "Assignment 1: Loading Bunny..."); + + Bunny.Load(); + } + + ObjectToView.SetModel(Bunny); + + ObjectToView.SetScale(4.0f); + + ObjectToView.SetPosition(Vector3(-0.05, -4.4f, 0)); + + ObjectMaterial.Color = DGL::Colors::White.Vector(); + ObjectMaterial.Ambience = 0.300f ; + ObjectMaterial.Diffuse = 1.000f ; + ObjectMaterial.Specular = 0.910f ; + + ObjectToView.SetMaterial(ObjectMaterial); + + return; + } + case EModels::Eight: + { + if (not Eight.Ready()) + { + SetWindowHeader(DefaultWindow, "Assignment 1: Loading Eight..."); + + Eight.Load(); + } + + ObjectToView.SetModel(Eight); + + ObjectToView.SetScale(2.0f); + + ObjectToView.SetPosition(Vector3(0, -1.0, 0)); + + ObjectMaterial.Color = DGL::Colors::Blue.Vector(); + ObjectMaterial.Ambience = 0.112f ; + ObjectMaterial.Diffuse = 0.828f ; + ObjectMaterial.Specular = 0.421f ; + + ObjectToView.SetMaterial(ObjectMaterial); + + return; + } + case EModels::Gargoyle: + { + if (not Gargoyle.Ready()) + { + SetWindowHeader(DefaultWindow, "Assignment 1: Loading Gargoyle..."); + + Gargoyle.Load(); + } + + ObjectToView.SetModel(Gargoyle); + + ObjectToView.SetPosition(Vector3(-1, -5.4f, 0)); + + ObjectToView.SetScale(6.0f); + + ObjectMaterial.Color = DGL::Colors::Red.Vector(); + ObjectMaterial.Ambience = 0.001f ; + ObjectMaterial.Diffuse = 0.658f ; + ObjectMaterial.Specular = 0.821f ; + + ObjectToView.SetMaterial(ObjectMaterial); + + return; + } + case EModels::Hand: + { + if (not Hand.Ready()) + { + SetWindowHeader(DefaultWindow, "Assignment 1: Loading Hand..."); + + Hand.Load(); + } + + ObjectToView.SetModel(Hand); + + ObjectToView.SetScale(0.03f); + + ObjectToView.SetPosition(Vector3(0, -1.1f, 0)); + + ObjectMaterial.Color = DGL::Colors::DarkTone.Vector(); + ObjectMaterial.Ambience = 0.000f ; + ObjectMaterial.Diffuse = 1.000f ; + ObjectMaterial.Specular = 0.640f ; + + ObjectToView.SetMaterial(ObjectMaterial); + + SetClearColor(LinearColor(0.53f, 0.53f, 0.53f, 1.0f)); + + return; + } + case EModels::Horse: + { + if (not Horse.Ready()) + { + SetWindowHeader(DefaultWindow, "Assignment 1: Loading Horse..."); + + Horse.Load(); + } + + ObjectToView.SetModel(Horse); + + ObjectToView.SetScale(20.0f); + + ObjectToView.Rotate(90.0f, EAxis::X); + + ObjectToView.SetPosition(Vector3(0, 0.0f, 0)); + + ObjectMaterial.Color = DGL::Colors::Green.Vector(); + ObjectMaterial.Ambience = 0.000f ; + ObjectMaterial.Diffuse = 1.000f ; + ObjectMaterial.Specular = 0.640f ; + + ObjectToView.SetMaterial(ObjectMaterial); + + SetClearColor(LinearColor(0.02f, 0.02f, 0.02f, 1.0f)); + + return; + } + case EModels::Sculpture: + { + if (not Sculpture.Ready()) + { + SetWindowHeader(DefaultWindow, "Assignment 1: Loading Sculpture..."); + + Sculpture.Load(); + } + + ObjectToView.SetModel(Sculpture); + + ObjectToView.SetScale(0.01f); + + ObjectToView.Rotate(-90.0f, EAxis::X); + + ObjectMaterial.Color = DGL::Colors::WarmSphia.Vector(); + ObjectMaterial.Ambience = 0.112f ; + ObjectMaterial.Diffuse = 0.928f ; + ObjectMaterial.Specular = 0.21f ; + + ObjectToView.SetMaterial(ObjectMaterial); + + return; + } + case EModels::Topology: + { + if (not Topology.Ready()) + { + SetWindowHeader(DefaultWindow, "Assignment 1: Loading Topology..."); + + Topology.Load(); + } + + ObjectToView.SetModel(Topology); + + ObjectToView.SetScale(0.2f); + + ObjectMaterial.Color = DGL::Colors::Coral.Vector(); + ObjectMaterial.Ambience = 0.212f ; + ObjectMaterial.Diffuse = 0.728f ; + ObjectMaterial.Specular = 0.41f ; + + ObjectToView.SetMaterial(ObjectMaterial); + + return; + } + case EModels::Torus: + { + if (not Torus.Ready()) + { + SetWindowHeader(DefaultWindow, "Assignment 1: Loading Torus..."); + + Torus.Load(); + } + + ObjectToView.SetModel(Torus); + + ObjectToView.SetScale(1.0f); + + ObjectMaterial.Color = DGL::Colors::Grey.Vector(); + ObjectMaterial.Ambience = 0.170f ; + ObjectMaterial.Diffuse = 0.720f ; + ObjectMaterial.Specular = 0.100f ; + + ObjectToView.SetMaterial(ObjectMaterial); + + return; + } + } + } + + void ToggleLight() + { + ShowLight ? ShowLight = false : ShowLight = true; + + return; + } + + void ToggleModelRotation() + { + RotateObj ? RotateObj = false : RotateObj = true; + + return; + } + + void ToogleLightOrbit() + { + OrbitLight ? OrbitLight = false : OrbitLight = true; + + return; + } + + void RotateCamera(ERotationAxis _rotationAxis, gFloat _rotationAmount, double _delta) + { + WorldCamera.Rotate(_rotationAxis, _rotationAmount, gFloat(_delta)); + + return; + } + + void MoveCamera(EDirection _direction, gFloat _translationAmount, double _delta) + { + WorldCamera.Move(_direction, _translationAmount, gFloat(_delta)); + + return; + } + + void ModifyCamSpeed(bool _isPositive, double _delta) + { + if (_isPositive) + { + CamMoveSpeed += CamMoveSpeed * gFloat(_delta); + + return; + } + else + { + CamMoveSpeed -= CamMoveSpeed * gFloat(_delta); + + return; + } + } + + // End of common input functions... + + + void UpdateWindowDeltaTitle() + { + WindowTitle.str(""); + + WindowTitle + << windowTitle << " " + << deltaStr << DeltaTime << " " + << inputDeltaStr << InputDelta << " " + << physicsDeltaStr << PhysicsDelta << " " + << renderDeltaStr << RenderDelta ; + } + + + // Currently Does everything required before entering the cycler. + void PrepWorkspace() + { + // Baseline + + InitalizeGLFW(); + + DefaultWindow = CreateWindow(ScreenWidth, ScreenHeight, "Assignment 1: Loading Model...", WindowedMode(), NotShared()); + + SetCurrentContext(DefaultWindow); + + InitalizeGLEW(); // Glew must initialize only after a context is set. + + EnableDepth(); + + SetPolygonMode(DGL::EFace::Front_and_Back, DGL::ERenderMode::Fill); + + + // Cursor stuff + + SetInputMode(DefaultWindow, DGL::EMouseMode::Cursor, DGL::ECursorMode::Disable); + + ResetCursor(DefaultWindow, ScreenCenterWidth, ScreenCenterHeight); + + if (CanUseRawMouse()) + { + SetInputMode(DefaultWindow, DGL::EMouseMode::RawMouse, DGL::EBool::True); + } + + // End of cursor stuff... + + + // Shaders + + LoadDefaultShaders(); + } + + void SetupEntities() + { + Light.Load(); + + Bunny.Load(); + + ObjectMaterial.Color = DGL::Colors::White.Vector(); + ObjectMaterial.Ambience = 0.300f; + ObjectMaterial.Diffuse = 1.000f; + ObjectMaterial.Specular = 0.910f; + + ObjectToView = Entity_Basic(Bunny, ObjectMaterial); + + ObjectToView.SetScale(4.0f); + + ObjectToView.SetPosition(Vector3(-0.05, -4.4f, 0)); + } + + /* + Cycles the process of what to do while a window is open. + + The input, physics, and render procedures can be specified with extra functionality by specifying delegates to those procedures. + + Cycler is hardcoded to exit if escape key is pressed. + */ + void Cycler(const function< void(Window*)>& _inputProcedure, const function< void()>& _physicsProcedure, const function< void()>& _renderProcedure) + { + while (Exist) + { + CycleStart = GetTime(); + + if (InputDelta >= InputInterval) + { + PollEvents(); + + if (KeyPressed(DefaultWindow, EKeyCodes::Escape)) + { + Exist = false; + } + + GetCursorPosition(DefaultWindow, &CursorX, &CursorY); + + _inputProcedure(DefaultWindow); + + if (CursorOff) + { + ResetCursor(DefaultWindow, ScreenCenterWidth, ScreenCenterHeight); + } + } + + if (PhysicsDelta >= PhysicsInterval) + { + while (ActionsToComplete.HasAction()) + { + ActionsToComplete.DoNextAction(); + } + + _physicsProcedure(); + + PhysicsDelta = 0.0; + } + + if (RenderDelta >= RenderInterval) + { + ClearBuffer(EFrameBuffer::Color, EFrameBuffer::Depth); + + _renderProcedure(); + + SwapBuffers(DefaultWindow); + + RenderDelta = 0.0; + } + + if (InputDelta >= InputInterval) + { + InputDelta = 0.0; + } + + CycleEnd = GetTime(); + + DeltaTime = CycleEnd - CycleStart; + + InputDelta += DeltaTime; + PhysicsDelta += DeltaTime; + RenderDelta += DeltaTime; + } + + return; + } + + + + // Input functionality delegates (These are made due to a limitation with the actions implementation). + + auto ChangeModelDelegate = function(ChangeModel ); + auto ToogleLightDelegate = function(ToggleLight ); + auto ToggleModelRotationDelegate = function(ToggleModelRotation); + auto ToggleLightOrbitDelegate = function(ToogleLightOrbit ); + auto RotateCamDelegate = function(RotateCamera ); + auto MoveCamDelegate = function(MoveCamera ); + auto ModifyCamSpeedDelegate = function(ModifyCamSpeed ); + auto SetPolyModeDelegate = function(SetPolygonMode ); + + void InputProcedure(Window* _currentWindowContext) + { + static bool F1_Held = false, + F4_Held = false, + F5_Held = false, + H_Held = false, + M_Held = false ; + + if (!KeyPressed(_currentWindowContext, EKeyCodes::F1)) F1_Held = false; + if (!KeyPressed(_currentWindowContext, EKeyCodes::F4)) F4_Held = false; + if (!KeyPressed(_currentWindowContext, EKeyCodes::F5)) F5_Held = false; + if (!KeyPressed(_currentWindowContext, EKeyCodes::H )) H_Held = false; + if (!KeyPressed(_currentWindowContext, EKeyCodes::M )) M_Held = false; + + // TODO: Not necessary for now and throws memory error. + /*if (KeyPressed(_currentWindowContext, EKeyCodes::F1) && not F1_Held) + { + ECursorMode cursorMode = ECursorMode(GetMouseInputMode(DefaultWindow, EMouseMode::Cursor)); + + auto delegate = function)>(SetInputMode); + auto delegateRaw = function)>(SetInputMode); + + if (cursorMode == ECursorMode::Normal || cursorMode == ECursorMode::Hidden) + { + ActionsToComplete.AddToQueue(delegate , _currentWindowContext, EMouseMode::Cursor , ECursorMode::Disable); + ActionsToComplete.AddToQueue(delegateRaw, _currentWindowContext, EMouseMode::RawMouse, EBool ::True ); + + CursorOff = true; + } + else + { + ActionsToComplete.AddToQueue(delegate , _currentWindowContext, EMouseMode::Cursor , ECursorMode::Normal); + ActionsToComplete.AddToQueue(delegateRaw, _currentWindowContext, EMouseMode::RawMouse, EBool ::False ); + + CursorOff = false; + } + + F1_Held = true; + }*/ + + if (KeyPressed(_currentWindowContext, EKeyCodes::H) && not H_Held) + { + H_Held = true; + + ActionsToComplete.AddToQueue(ToogleLightDelegate); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::M) && not M_Held) + { + M_Held = true; + + ActionsToComplete.AddToQueue(ChangeModelDelegate); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::UpArrow)) + { + ActionsToComplete.AddToQueue(ModifyCamSpeedDelegate, true, PhysicsDelta); + } + + if (KeysPressed(_currentWindowContext, EKeyCodes::DnArrow)) + { + ActionsToComplete.AddToQueue(ModifyCamSpeedDelegate, false, PhysicsDelta); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::F2)) + { + ActionsToComplete.AddToQueue(SetPolyModeDelegate, DGL::EFace::Front_and_Back, DGL::ERenderMode::Line); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::F3)) + { + ActionsToComplete.AddToQueue(SetPolyModeDelegate, DGL::EFace::Front_and_Back, DGL::ERenderMode::Fill); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::F4) && not F4_Held) + { + ActionsToComplete.AddToQueue(ToggleModelRotationDelegate); + + F4_Held = true; + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::F5) && not F5_Held) + { + ActionsToComplete.AddToQueue(ToggleLightOrbitDelegate); + + F5_Held = true; + } + + if (CursorOff) + { + if (CursorX != 0) + { + ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Yaw, gFloat(CursorX) * CamRotationSpeed, PhysicsDelta); + } + + if (CursorY != 0) + { + ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Pitch, gFloat(CursorY) * CamRotationSpeed, PhysicsDelta); + } + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::E)) + { + ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Up, CamMoveSpeed, PhysicsDelta); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::Q)) + { + ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Down, CamMoveSpeed, PhysicsDelta); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::A)) + { + ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Left, CamMoveSpeed, PhysicsDelta); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::D)) + { + ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Right, CamMoveSpeed, PhysicsDelta); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::W)) + { + ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Forward, CamMoveSpeed, PhysicsDelta); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::S)) + { + ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Backward, CamMoveSpeed, PhysicsDelta); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::I)) + { + ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Pitch, -6.0f * CamRotationSpeed, PhysicsDelta); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::K)) + { + ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Pitch, 6.0f * CamRotationSpeed, PhysicsDelta); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::J)) + { + ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Yaw, -6.0f * CamRotationSpeed, PhysicsDelta); + } + + if (KeyPressed(_currentWindowContext, EKeyCodes::L)) + { + ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Yaw, 6.0f * CamRotationSpeed, PhysicsDelta); + } + + return; + } + + void PhysicsProcedure() + { + WorldCamera.UpdateCamera(); + + UpdateScreenspace(); + + if (OrbitLight) + { + Light.Update(gFloat(PhysicsDelta)); + } + + if (RotateObj) + { + ObjectToView.Rotate(-1.0f * gFloat(PhysicsDelta), EAxis::Y); + } + + ObjectToView.Update(); + + UpdateWindowDeltaTitle(); + + return; + } + + void RenderProcedure() + { + SetWindowHeader(DefaultWindow, WindowTitle.str()); + + if (ShowLight) + { + Light.Render(WorldCamera.Perspective, WorldCamera.Viewport); + } + + ObjectToView.Render(WorldCamera.Perspective, WorldCamera.Viewport, Light.GetPosition(), Light.GetColor()); + + return; + } + + + // Runtime Execution: Default Execution + + int Execute_Assignment1() + { + PrepWorkspace(); + + SetupEntities(); + + Cycler(InputProcedure, PhysicsProcedure, RenderProcedure); + + // TODO: There should be more to properly close... + + DestoryWindow(DefaultWindow); + + TerminateGLFW(); + + return EXIT_SUCCESS; + } +} diff --git a/Assignment_2_Execution.hpp b/Assignment_2_Execution.hpp new file mode 100644 index 0000000..1a25288 --- /dev/null +++ b/Assignment_2_Execution.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include "DGL/DGL.hpp" + +#include "Cpp_Alias.hpp" + + + +namespace Execution +{ + inline namespace LibraryReferences + { + using DGL::HE_Model; + } + + + int Execute_Assignment2() + { + cout << "Assignment 2:" << endl << endl; + + HE_Model BlenderTorus("./Models/torus_Blender.obj"); + + BlenderTorus.Load(); + + + + + return EXIT_SUCCESS; + } +} + + + diff --git a/Cpp_Alias.hpp b/Cpp_Alias.hpp index e353ca3..2478e6b 100644 --- a/Cpp_Alias.hpp +++ b/Cpp_Alias.hpp @@ -74,3 +74,8 @@ using std::thread; using std::tuple; using std::type_index; + +using std::vector; + + +void DoNothing() {}; diff --git a/DGL/DGL_Entity.hpp b/DGL/DGL_Entity.hpp index 697a9bb..03a2bed 100644 --- a/DGL/DGL_Entity.hpp +++ b/DGL/DGL_Entity.hpp @@ -212,6 +212,7 @@ namespace DGL rotation (Vector3(0.0f) ), scale (Vector3(1.0f) ), model (NULL ), + he_Model (NULL ), transform(CoordSpace(1.0f)) {}; @@ -220,6 +221,18 @@ namespace DGL rotation (Vector3(0.0f) ), scale (Vector3(1.0f) ), model (&_model ), + he_Model (NULL ), + transform(CoordSpace(1.0f)), + material (_material ) + //type (_type ) + {}; + + Entity_Basic(HE_Model& _model, Material_Phong& _material) : + position (Vector3(0.0f) ), + rotation (Vector3(0.0f) ), + scale (Vector3(1.0f) ), + model (NULL ), + he_Model (&_model ), transform(CoordSpace(1.0f)), material (_material ) //type (_type ) @@ -234,9 +247,18 @@ namespace DGL { model = &_model; + he_Model = NULL; + return; } + void SetModel(HE_Model& _model) + { + he_Model = &_model; + + model = NULL; + } + void SetScale(gFloat _scaleBy) { scale = Vector3(_scaleBy); @@ -295,7 +317,14 @@ namespace DGL { PhongShader::Use(_projection, _viewport, transform, _lightPosition,_lightColor, material); - (*model).Render(); + if (model != NULL) + { + (*model).Render(); + } + else + { + (*he_Model).Render(); + } PhongShader::Stop(); @@ -307,6 +336,7 @@ namespace DGL position = _entity.position ; scale = _entity.scale ; model = _entity.model ; + he_Model = _entity.he_Model ; transform = _entity.transform; material = _entity.material ; @@ -321,6 +351,7 @@ namespace DGL Vector3 rotation ; Vector3 scale ; Model* model ; + HE_Model* he_Model; CoordSpace transform; Material_Phong material ; }; diff --git a/DGL/DGL_Model.hpp b/DGL/DGL_Model.hpp index 252e940..bd76855 100644 --- a/DGL/DGL_Model.hpp +++ b/DGL/DGL_Model.hpp @@ -13,6 +13,9 @@ Allows the management of loading and buffer/rendering models from wavefront obj #include "DGL_Types.hpp" #include "DGL_Space.hpp" +// OpenMesh +#include "OMesh/OMeshInterface.hpp" + // Non-Standard C++ #include "Cpp_Alias.hpp" @@ -69,17 +72,6 @@ namespace DGL ComponentList comp; }; - - - struct Face - { - Vec3Int Vertexes; - }; - - using FaceList = std::vector; - - - struct FaceGenerator { using ComponentList = std::vector< gUInt>; @@ -107,7 +99,7 @@ namespace DGL for (int index = 0; index < 3; index++) { - generated.Vertexes.vec[index] = vertIndexes[index]; + generated.vec[index] = vertIndexes[index]; if (index < 2) { @@ -146,9 +138,9 @@ namespace DGL for (int faceIndex = 0; faceIndex < faces.size(); faceIndex++) { - int vertexIndex1 = faces[faceIndex].Vertexes.vec[0], - vertexIndex2 = faces[faceIndex].Vertexes.vec[1], - vertexIndex3 = faces[faceIndex].Vertexes.vec[2] ; + int vertexIndex1 = faces[faceIndex].vec[0], + vertexIndex2 = faces[faceIndex].vec[1], + vertexIndex3 = faces[faceIndex].vec[2] ; Vector3 vert1 = verticies[vertexIndex1], vert2 = verticies[vertexIndex2], @@ -470,4 +462,125 @@ namespace DGL FaceList faces ; VIndexList indicies ; }; + + class HE_Model + { + using HE_Mesh = OMeshInterface::OMesh_HE; + + public: + HE_Model(const string& _filePath) : + loaded (false ), + vertexArrayID (-1 ), + vertexBufferID (-1 ), + normalBuffferID(-1 ), + textureBufferID(-1 ), + elementBufferID(-1 ), + filePath (_filePath), + mesh () + {} + + void Buffer() + { + // Generate buffers + + GenerateVertexBuffers(vertexArrayID , 1); + GenerateBuffers (vertexBufferID , 1); + GenerateBuffers (normalBuffferID, 1); + GenerateBuffers (elementBufferID, 1); + + BindVertexArray(vertexArrayID); + + // Vertex Position Buffering + + BindBuffer(EBufferTarget::VertexAttributes, vertexBufferID); + + const VertexList& verts = mesh.GetVerticies(); + + BufferData(verts[0], gSize(verts.size() * sizeof(Vector3)), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw); + + FormatVertexAttributes(0, EDataType::Float, ZeroOffset(), 3, false); + + EnableVertexAttributeArray(0); + + // Normal Buffering + + BindBuffer(EBufferTarget::VertexAttributes, normalBuffferID); + + const VertexList& normals = mesh.GetFaceNormals(); + + BufferData(normals[0], gSize(normals.size() * sizeof(Vector3)), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw); + + FormatVertexAttributes(1, EDataType::Float, ZeroOffset(), 3, false); + + EnableVertexAttributeArray(1); + + // Element Buffering + + const FaceList& faces = mesh.GetFaces(); + + BindBuffer(EBufferTarget::VertexIndices, elementBufferID); + + BufferData(faces[0], gSize(faces.size() * sizeof(Face)), EBufferTarget::VertexIndices, EBufferUsage::StaticDraw); + + UnbindVertexArray(); // Unbind vertex array. + } + + void Load() + { + mesh.Load(filePath); + + Buffer(); + } + + bool Ready() + { + return loaded; + } + + void Render() + { + BindVertexArray(vertexArrayID); + + + gInt SizeRef; GetBufferParameterIV(EBufferTarget::VertexIndices, EBufferParam::Size, SizeRef); SizeRef /= sizeof(gUInt); + + + DrawElements(EPrimitives::Triangles, SizeRef, EDataType::UnsignedInt, ZeroOffset()); + + + UnbindVertexArray(); + } + + HE_Model& operator= (const HE_Model& _model) + { + loaded = _model.loaded; + + vertexArrayID = _model.vertexArrayID ; + vertexBufferID = _model.vertexBufferID ; + normalBuffferID = _model.normalBuffferID; + textureBufferID = _model.textureBufferID; + elementBufferID = _model.elementBufferID; + + filePath = _model.filePath; + + mesh = _model.mesh; + + return *this; + } + + + private: + + bool loaded; + + ID vertexArrayID ; + ID vertexBufferID ; + ID normalBuffferID; + ID textureBufferID; + ID elementBufferID; + + string filePath; + + HE_Mesh mesh; + }; }; diff --git a/DGL/DGL_Types.hpp b/DGL/DGL_Types.hpp index 493bc83..359585a 100644 --- a/DGL/DGL_Types.hpp +++ b/DGL/DGL_Types.hpp @@ -87,11 +87,12 @@ namespace DGL struct Vec3Int { - union - { gUInt vec[3]; - gUInt x, y, z; - }; + //union + //{ + //gUInt vec[3]; + //gUInt x, y, z; + //}; }; //using Vec3Int = Generic::Vector3< gUInt >; @@ -111,6 +112,11 @@ namespace DGL // DGL + using Face = Vec3Int; + + using FaceList = std::vector; + + using VecColor = Vector3; struct LinearColor diff --git a/Execution.cpp b/Execution.cpp index e6c276b..3f5e9bf 100644 --- a/Execution.cpp +++ b/Execution.cpp @@ -1,805 +1,10 @@ -/* -Title : Execution -Author: Edward R. Gonzalez +#include "Assignment_1_Execution.hpp" +#include "Assignment_2_Execution.hpp" -Description: -This brings together the functionality I made in DGL and the Actions libraries to produce an OpenGL Workspace. - -Currently the workspace is heavily hardcoded and has one light rotating around the specified object. The material for the object is set during prep as well. - -All exposed library references are inside the inline namespace right after declaring the namespace execution. - -After I have the global objects used, followed by the functionality implementations, and at the very end the main function running the default execution implementation. -*/ - - - -// DGL -#include "DGL/DGL.hpp" - -// Utility -#include "Actions.hpp" - -// Non-Standard C++ -#include "Cpp_Alias.hpp" - - - -namespace Execution -{ - inline namespace LibraryReferences - { - // DGL - - using DGL::EAxis ; - using DGL::EBool ; - using DGL::ECursorMode ; - using DGL::EDirection ; - using DGL::EFrameBuffer ; - using DGL::EKeyCodes ; - using DGL::EMouseMode ; - using DGL::EPrimitives ; - using DGL::ERotationAxis; - - using DGL::Camera ; - using DGL::Entity_Basic ; - using DGL::gFloat ; - using DGL::Light_Basic ; - using DGL::LinearColor ; - using DGL::Material_Phong; - using DGL::Matrix ; - using DGL::Matrix4x4 ; - using DGL::Model ; - using DGL::TimeValDec ; - using DGL::Vector3 ; - using DGL::Window ; - - using DGL::BindVertexArray ; - using DGL::CanUseRawMouse ; - using DGL::ClearBuffer ; - using DGL::CreateWindow ; - using DGL::DestoryWindow ; - using DGL::DisableVertexAttributeArray; - using DGL::EnableDepth ; - using DGL::EnableVertexAttributeArray ; - using DGL::GetCursorPosition ; - using DGL::GetTime ; - using DGL::InitalizeGLEW ; - using DGL::InitalizeGLFW ; - using DGL::LoadDefaultShaders ; - using DGL::KeyPressed ; - using DGL::NotShared ; - using DGL::PollEvents ; - using DGL::ResetCursor ; - using DGL::SetClearColor ; - using DGL::SetCurrentContext ; - using DGL::SetInputMode ; - using DGL::SetPolygonMode ; - using DGL::SetUniformVariable_MVA ; - using DGL::SetWindowHeader ; - using DGL::SwapBuffers ; - using DGL::UseProgramShader ; - using DGL::TerminateGLFW ; - using DGL::WindowedMode ; - - using DGL::DefaultSpace::ScreenWidth ; - using DGL::DefaultSpace::ScreenHeight ; - using DGL::DefaultSpace::ScreenCenterHeight; - using DGL::DefaultSpace::ScreenCenterWidth ; - using DGL::DefaultSpace::Screenspace ; - using DGL::DefaultSpace::WorldCamera ; - - using DGL::DefaultSpace::UpdateScreenspace; - - // Actions - - using Actions::ActionQueue; - } - - enum class EModels - { - Bunny , - Eight , - Gargoyle , - Hand , - Horse , - Sculpture, - Topology , - Torus - }; - - - // Globals - - bool Exist = true; // Determines if the the execution should exit cycler. - - TimeValDec CycleStart , // Snapshot of cycle loop start time. - CycleEnd , // Snapshot of cycle loop end time. - DeltaTime , // Delta between last cycle start and end. - InputInterval = 1.0f / 60.0f, // Interval per second to complete the input process of the cycle. - PhysicsInterval = 1.0f / 60.0f, // Interval per second to complete the physics process of the cycle. - RenderInterval = 1.0f / 60.0f ; // Interval per second to complete the render process of the cycle. - - Window* DefaultWindow; // Default window to use for execution. - - double CursorX, CursorY; // Cursor axis position on the window. - - bool CursorOff = true, - ShowLight = true, - RotateObj = true, - OrbitLight = true ; - - gFloat CamMoveSpeed = 7.0f, // Rate at which the camera should move. - CamRotationSpeed = 27.0f ; // Rate at which the camera should rotate. - - TimeValDec InputDelta = 0.0, // Current delta since last input process. - PhysicsDelta = 0.0, // Current delta since last physics process. - RenderDelta = 0.0 ; // Current delta since last render process. - - ActionQueue ActionsToComplete; // Actions queue to run during the physics process of the cycle. - - EModels CurrentModel = EModels::Bunny; - - Model Bunny ("./Models/bunny.obj" ); - Model Eight ("./Models/eight.obj" ); - Model Gargoyle ("./Models/gargoyle.obj" ); - Model Hand ("./Models/hand.obj" ); - Model Horse ("./Models/horse.obj" ); - Model Sculpture("./Models/sculpture.obj" ); - Model Topology ("./Models/topology.obj" ); - Model Torus ("./Models/Torus.obj" ); - - Material_Phong ObjectMaterial; // Material to use on the model. - - Light_Basic Light ; // Hardcoded light. Rotates around object. - Entity_Basic ObjectToView; // Object that will be currently in the middle with the light source rotating. - - string - windowTitle = "Assignment 1" , - deltaStr = "Delta: " , - inputDeltaStr = "Input Delta: " , - physicsDeltaStr = "Physics Delta: " , - renderDeltaStr = "RenderDeltaStr: " ; - - stringstream WindowTitle; - - - - // Functionality - - // Input Action functions... - - void ChangeModel() - { - if (CurrentModel == EModels::Torus) - { - CurrentModel = EModels::Bunny; - } - else - { - CurrentModel = EModels(int(CurrentModel) + 1); - } - - switch (CurrentModel) - { - case EModels::Bunny: - { - if (not Bunny.Ready()) - { - SetWindowHeader(DefaultWindow, "Assignment 1: Loading Bunny..."); - - Bunny.Load(); - } - - ObjectToView.SetModel(Bunny); - - ObjectToView.SetScale(4.0f); - - ObjectToView.SetPosition(Vector3(-0.05, -4.4f, 0)); - - ObjectMaterial.Color = DGL::Colors::White.Vector(); - ObjectMaterial.Ambience = 0.300f ; - ObjectMaterial.Diffuse = 1.000f ; - ObjectMaterial.Specular = 0.910f ; - - ObjectToView.SetMaterial(ObjectMaterial); - - return; - } - case EModels::Eight: - { - if (not Eight.Ready()) - { - SetWindowHeader(DefaultWindow, "Assignment 1: Loading Eight..."); - - Eight.Load(); - } - - ObjectToView.SetModel(Eight); - - ObjectToView.SetScale(2.0f); - - ObjectToView.SetPosition(Vector3(0, -1.0, 0)); - - ObjectMaterial.Color = DGL::Colors::Blue.Vector(); - ObjectMaterial.Ambience = 0.112f ; - ObjectMaterial.Diffuse = 0.828f ; - ObjectMaterial.Specular = 0.421f ; - - ObjectToView.SetMaterial(ObjectMaterial); - - return; - } - case EModels::Gargoyle: - { - if (not Gargoyle.Ready()) - { - SetWindowHeader(DefaultWindow, "Assignment 1: Loading Gargoyle..."); - - Gargoyle.Load(); - } - - ObjectToView.SetModel(Gargoyle); - - ObjectToView.SetPosition(Vector3(-1, -5.4f, 0)); - - ObjectToView.SetScale(6.0f); - - ObjectMaterial.Color = DGL::Colors::Red.Vector(); - ObjectMaterial.Ambience = 0.001f ; - ObjectMaterial.Diffuse = 0.658f ; - ObjectMaterial.Specular = 0.821f ; - - ObjectToView.SetMaterial(ObjectMaterial); - - return; - } - case EModels::Hand: - { - if (not Hand.Ready()) - { - SetWindowHeader(DefaultWindow, "Assignment 1: Loading Hand..."); - - Hand.Load(); - } - - ObjectToView.SetModel(Hand); - - ObjectToView.SetScale(0.03f); - - ObjectToView.SetPosition(Vector3(0, -1.1f, 0)); - - ObjectMaterial.Color = DGL::Colors::DarkTone.Vector(); - ObjectMaterial.Ambience = 0.000f ; - ObjectMaterial.Diffuse = 1.000f ; - ObjectMaterial.Specular = 0.640f ; - - ObjectToView.SetMaterial(ObjectMaterial); - - SetClearColor(LinearColor(0.53f, 0.53f, 0.53f, 1.0f)); - - return; - } - case EModels::Horse: - { - if (not Horse.Ready()) - { - SetWindowHeader(DefaultWindow, "Assignment 1: Loading Horse..."); - - Horse.Load(); - } - - ObjectToView.SetModel(Horse); - - ObjectToView.SetScale(20.0f); - - ObjectToView.Rotate(90.0f, EAxis::X); - - ObjectToView.SetPosition(Vector3(0, 0.0f, 0)); - - ObjectMaterial.Color = DGL::Colors::Green.Vector(); - ObjectMaterial.Ambience = 0.000f ; - ObjectMaterial.Diffuse = 1.000f ; - ObjectMaterial.Specular = 0.640f ; - - ObjectToView.SetMaterial(ObjectMaterial); - - SetClearColor(LinearColor(0.02f, 0.02f, 0.02f, 1.0f)); - - return; - } - case EModels::Sculpture: - { - if (not Sculpture.Ready()) - { - SetWindowHeader(DefaultWindow, "Assignment 1: Loading Sculpture..."); - - Sculpture.Load(); - } - - ObjectToView.SetModel(Sculpture); - - ObjectToView.SetScale(0.01f); - - ObjectToView.Rotate(-90.0f, EAxis::X); - - ObjectMaterial.Color = DGL::Colors::WarmSphia.Vector(); - ObjectMaterial.Ambience = 0.112f ; - ObjectMaterial.Diffuse = 0.928f ; - ObjectMaterial.Specular = 0.21f ; - - ObjectToView.SetMaterial(ObjectMaterial); - - return; - } - case EModels::Topology: - { - if (not Topology.Ready()) - { - SetWindowHeader(DefaultWindow, "Assignment 1: Loading Topology..."); - - Topology.Load(); - } - - ObjectToView.SetModel(Topology); - - ObjectToView.SetScale(0.2f); - - ObjectMaterial.Color = DGL::Colors::Coral.Vector(); - ObjectMaterial.Ambience = 0.212f ; - ObjectMaterial.Diffuse = 0.728f ; - ObjectMaterial.Specular = 0.41f ; - - ObjectToView.SetMaterial(ObjectMaterial); - - return; - } - case EModels::Torus: - { - if (not Torus.Ready()) - { - SetWindowHeader(DefaultWindow, "Assignment 1: Loading Torus..."); - - Torus.Load(); - } - - ObjectToView.SetModel(Torus); - - ObjectToView.SetScale(1.0f); - - ObjectMaterial.Color = DGL::Colors::Grey.Vector(); - ObjectMaterial.Ambience = 0.170f ; - ObjectMaterial.Diffuse = 0.720f ; - ObjectMaterial.Specular = 0.100f ; - - ObjectToView.SetMaterial(ObjectMaterial); - - return; - } - } - } - - void ToggleLight() - { - ShowLight ? ShowLight = false : ShowLight = true; - - return; - } - - void ToggleModelRotation() - { - RotateObj ? RotateObj = false : RotateObj = true; - - return; - } - - void ToogleLightOrbit() - { - OrbitLight ? OrbitLight = false : OrbitLight = true; - - return; - } - - void RotateCamera(ERotationAxis _rotationAxis, gFloat _rotationAmount, double _delta) - { - WorldCamera.Rotate(_rotationAxis, _rotationAmount, gFloat(_delta)); - - return; - } - - void MoveCamera(EDirection _direction, gFloat _translationAmount, double _delta) - { - WorldCamera.Move(_direction, _translationAmount, gFloat(_delta)); - - return; - } - - void ModifyCamSpeed(bool _isPositive, double _delta) - { - if (_isPositive) - { - CamMoveSpeed += CamMoveSpeed * gFloat(_delta); - - return; - } - else - { - CamMoveSpeed -= CamMoveSpeed * gFloat(_delta); - - return; - } - } - - // End of common input functions... - - - void UpdateWindowDeltaTitle() - { - WindowTitle.str(""); - - WindowTitle - << windowTitle << " " - << deltaStr << DeltaTime << " " - << inputDeltaStr << InputDelta << " " - << physicsDeltaStr << PhysicsDelta << " " - << renderDeltaStr << RenderDelta ; - } - - - // Currently Does everything required before entering the cycler. - void PrepWorkspace() - { - // Baseline - - InitalizeGLFW(); - - DefaultWindow = CreateWindow(ScreenWidth, ScreenHeight, "Assignment 1: Loading Model...", WindowedMode(), NotShared()); - - SetCurrentContext(DefaultWindow); - - InitalizeGLEW(); // Glew must initialize only after a context is set. - - EnableDepth(); - - SetPolygonMode(DGL::EFace::Front_and_Back, DGL::ERenderMode::Fill); - - - // Cursor stuff - - SetInputMode(DefaultWindow, DGL::EMouseMode::Cursor, DGL::ECursorMode::Disable); - - ResetCursor(DefaultWindow, ScreenCenterWidth, ScreenCenterHeight); - - if (CanUseRawMouse()) - { - SetInputMode(DefaultWindow, DGL::EMouseMode::RawMouse, DGL::EBool::True); - } - - // End of cursor stuff... - - - // Shaders - - LoadDefaultShaders(); - - // Entities - - Light.Load(); - - Bunny.Load(); - - ObjectMaterial.Color = DGL::Colors::White.Vector(); - ObjectMaterial.Ambience = 0.300f ; - ObjectMaterial.Diffuse = 1.000f ; - ObjectMaterial.Specular = 0.910f ; - - ObjectToView = Entity_Basic(Bunny, ObjectMaterial); - - ObjectToView.SetScale(4.0f); - - ObjectToView.SetPosition(Vector3(-0.05, -4.4f, 0)); - } - - - /* - Cycles the process of what to do while a window is open. - - The input, physics, and render procedures can be specified with extra functionality by specifying delegates to those procedures. - - Cycler is hardcoded to exit if escape key is pressed. - */ - void Cycler(const function< void(Window*)>& _inputProcedure, const function< void()>& _physicsProcedure, const function< void()>& _renderProcedure) - { - while (Exist) - { - CycleStart = GetTime(); - - if (InputDelta >= InputInterval) - { - PollEvents(); - - if (KeyPressed(DefaultWindow, EKeyCodes::Escape)) - { - Exist = false; - } - - GetCursorPosition(DefaultWindow, &CursorX, &CursorY); - - _inputProcedure(DefaultWindow); - - if (CursorOff) - { - ResetCursor(DefaultWindow, ScreenCenterWidth, ScreenCenterHeight); - } - } - - if (PhysicsDelta >= PhysicsInterval) - { - while (ActionsToComplete.HasAction()) - { - ActionsToComplete.DoNextAction(); - } - - _physicsProcedure(); - - PhysicsDelta = 0.0; - } - - if (RenderDelta >= RenderInterval) - { - ClearBuffer(EFrameBuffer::Color, EFrameBuffer::Depth); - - _renderProcedure(); - - SwapBuffers(DefaultWindow); - - RenderDelta = 0.0; - } - - if (InputDelta >= InputInterval) - { - InputDelta = 0.0; - } - - CycleEnd = GetTime(); - - DeltaTime = CycleEnd - CycleStart; - - InputDelta += DeltaTime; - PhysicsDelta += DeltaTime; - RenderDelta += DeltaTime; - } - - return; - } - - - - // Input functionality delegates (These are made due to a limitation with the actions implementation). - - auto ChangeModelDelegate = function(ChangeModel ); - auto ToogleLightDelegate = function(ToggleLight ); - auto ToggleModelRotationDelegate = function(ToggleModelRotation); - auto ToggleLightOrbitDelegate = function(ToogleLightOrbit ); - auto RotateCamDelegate = function(RotateCamera ); - auto MoveCamDelegate = function(MoveCamera ); - auto ModifyCamSpeedDelegate = function(ModifyCamSpeed ); - auto SetPolyModeDelegate = function(SetPolygonMode ); - - void InputProcedure(Window* _currentWindowContext) - { - static bool F1_Held = false, - F4_Held = false, - F5_Held = false, - H_Held = false, - M_Held = false ; - - if (!KeyPressed(_currentWindowContext, EKeyCodes::F1)) F1_Held = false; - if (!KeyPressed(_currentWindowContext, EKeyCodes::F4)) F4_Held = false; - if (!KeyPressed(_currentWindowContext, EKeyCodes::F5)) F5_Held = false; - if (!KeyPressed(_currentWindowContext, EKeyCodes::H )) H_Held = false; - if (!KeyPressed(_currentWindowContext, EKeyCodes::M )) M_Held = false; - - // TODO: Not necessary for now and throws memory error. - /*if (KeyPressed(_currentWindowContext, EKeyCodes::F1) && not F1_Held) - { - ECursorMode cursorMode = ECursorMode(GetMouseInputMode(DefaultWindow, EMouseMode::Cursor)); - - auto delegate = function)>(SetInputMode); - auto delegateRaw = function)>(SetInputMode); - - if (cursorMode == ECursorMode::Normal || cursorMode == ECursorMode::Hidden) - { - ActionsToComplete.AddToQueue(delegate , _currentWindowContext, EMouseMode::Cursor , ECursorMode::Disable); - ActionsToComplete.AddToQueue(delegateRaw, _currentWindowContext, EMouseMode::RawMouse, EBool ::True ); - - CursorOff = true; - } - else - { - ActionsToComplete.AddToQueue(delegate , _currentWindowContext, EMouseMode::Cursor , ECursorMode::Normal); - ActionsToComplete.AddToQueue(delegateRaw, _currentWindowContext, EMouseMode::RawMouse, EBool ::False ); - - CursorOff = false; - } - - F1_Held = true; - }*/ - - if (KeyPressed(_currentWindowContext, EKeyCodes::H) && not H_Held) - { - H_Held = true; - - ActionsToComplete.AddToQueue(ToogleLightDelegate); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::M) && not M_Held) - { - M_Held = true; - - ActionsToComplete.AddToQueue(ChangeModelDelegate); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::UpArrow)) - { - ActionsToComplete.AddToQueue(ModifyCamSpeedDelegate, true, PhysicsDelta); - } - - if (KeysPressed(_currentWindowContext, EKeyCodes::DnArrow)) - { - ActionsToComplete.AddToQueue(ModifyCamSpeedDelegate, false, PhysicsDelta); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::F2)) - { - ActionsToComplete.AddToQueue(SetPolyModeDelegate, DGL::EFace::Front_and_Back, DGL::ERenderMode::Line); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::F3)) - { - ActionsToComplete.AddToQueue(SetPolyModeDelegate, DGL::EFace::Front_and_Back, DGL::ERenderMode::Fill); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::F4) && not F4_Held) - { - ActionsToComplete.AddToQueue(ToggleModelRotationDelegate); - - F4_Held = true; - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::F5) && not F5_Held) - { - ActionsToComplete.AddToQueue(ToggleLightOrbitDelegate); - - F5_Held = true; - } - - if (CursorOff) - { - if (CursorX != 0) - { - ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Yaw, gFloat(CursorX) * CamRotationSpeed, PhysicsDelta); - } - - if (CursorY != 0) - { - ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Pitch, gFloat(CursorY) * CamRotationSpeed, PhysicsDelta); - } - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::E)) - { - ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Up, CamMoveSpeed, PhysicsDelta); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::Q)) - { - ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Down, CamMoveSpeed, PhysicsDelta); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::A)) - { - ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Left, CamMoveSpeed, PhysicsDelta); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::D)) - { - ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Right, CamMoveSpeed, PhysicsDelta); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::W)) - { - ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Forward, CamMoveSpeed, PhysicsDelta); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::S)) - { - ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Backward, CamMoveSpeed, PhysicsDelta); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::I)) - { - ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Pitch, -6.0f * CamRotationSpeed, PhysicsDelta); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::K)) - { - ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Pitch, 6.0f * CamRotationSpeed, PhysicsDelta); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::J)) - { - ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Yaw, -6.0f * CamRotationSpeed, PhysicsDelta); - } - - if (KeyPressed(_currentWindowContext, EKeyCodes::L)) - { - ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Yaw, 6.0f * CamRotationSpeed, PhysicsDelta); - } - - return; - } - - void PhysicsProcedure() - { - WorldCamera.UpdateCamera(); - - UpdateScreenspace(); - - if (OrbitLight) - { - Light.Update(gFloat(PhysicsDelta)); - } - - if (RotateObj) - { - ObjectToView.Rotate(-1.0f * gFloat(PhysicsDelta), EAxis::Y); - } - - ObjectToView.Update(); - - UpdateWindowDeltaTitle(); - - return; - } - - void RenderProcedure() - { - SetWindowHeader(DefaultWindow, WindowTitle.str()); - - if (ShowLight) - { - Light.Render(WorldCamera.Perspective, WorldCamera.Viewport); - } - - ObjectToView.Render(WorldCamera.Perspective, WorldCamera.Viewport, Light.GetPosition(), Light.GetColor()); - - return; - } - - - // Runtime Execution: Default Execution - - int Execute() - { - PrepWorkspace(); - - Cycler(InputProcedure, PhysicsProcedure, RenderProcedure); - - // TODO: There should be more to properly close... - - DestoryWindow(DefaultWindow); - - TerminateGLFW(); - - return EXIT_SUCCESS; - } -} // Currently only can do one execution route. int main(void) { - return Execution::Execute(); + return Execution::Execute_Assignment2(); } - diff --git a/Models/torus_Blender.mtl b/Models/torus_Blender.mtl new file mode 100644 index 0000000..70d3ba1 --- /dev/null +++ b/Models/torus_Blender.mtl @@ -0,0 +1,10 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +Ns 0 +Ka 0.000000 0.000000 0.000000 +Kd 0.8 0.8 0.8 +Ks 0.8 0.8 0.8 +d 1 +illum 2 diff --git a/Models/torus_Blender.obj b/Models/torus_Blender.obj new file mode 100644 index 0000000..9da0bfd --- /dev/null +++ b/Models/torus_Blender.obj @@ -0,0 +1,3897 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib torus_Blender.mtl +o torus +v 1.400000 0.000000 0.000000 +v 1.373100 0.273126 0.000000 +v 1.365560 0.271627 0.078036 +v 1.392310 -0.000000 0.078036 +v 1.293430 0.535757 0.000000 +v 1.286330 0.532816 0.078036 +v 1.164060 0.777798 0.000000 +v 1.157670 0.773528 0.078036 +v 0.989950 0.989949 0.000000 +v 0.984515 0.984515 0.078036 +v 0.777798 1.164060 0.000000 +v 0.773528 1.157670 0.078036 +v 0.535757 1.293430 0.000000 +v 0.532816 1.286330 0.078036 +v 0.273126 1.373100 0.000000 +v 0.271627 1.365560 0.078036 +v 0.000000 1.400000 0.000000 +v 0.000000 1.392310 0.078036 +v -0.273126 1.373100 0.000000 +v -0.271627 1.365560 0.078036 +v -0.535757 1.293430 0.000000 +v -0.532816 1.286330 0.078036 +v -0.777798 1.164060 0.000000 +v -0.773528 1.157670 0.078036 +v -0.989949 0.989950 0.000000 +v -0.984515 0.984515 0.078036 +v -1.164060 0.777798 0.000000 +v -1.157670 0.773528 0.078036 +v -1.293430 0.535757 0.000000 +v -1.286330 0.532816 0.078036 +v -1.373100 0.273127 0.000000 +v -1.365560 0.271627 0.078036 +v -1.400000 0.000000 0.000000 +v -1.392310 -0.000000 0.078036 +v -1.373100 -0.273126 -0.000000 +v -1.365560 -0.271627 0.078036 +v -1.293430 -0.535757 -0.000000 +v -1.286330 -0.532815 0.078036 +v -1.164060 -0.777798 -0.000000 +v -1.157670 -0.773528 0.078036 +v -0.989950 -0.989949 -0.000000 +v -0.984515 -0.984515 0.078036 +v -0.777798 -1.164060 -0.000000 +v -0.773528 -1.157670 0.078036 +v -0.535757 -1.293430 -0.000000 +v -0.532816 -1.286330 0.078036 +v -0.273127 -1.373100 -0.000000 +v -0.271627 -1.365560 0.078036 +v 0.000000 -1.400000 -0.000000 +v 0.000000 -1.392310 0.078036 +v 0.273126 -1.373100 -0.000000 +v 0.271627 -1.365560 0.078036 +v 0.535757 -1.293430 -0.000000 +v 0.532815 -1.286330 0.078036 +v 0.777798 -1.164060 -0.000000 +v 0.773528 -1.157670 0.078036 +v 0.989949 -0.989950 -0.000000 +v 0.984515 -0.984515 0.078036 +v 1.164060 -0.777798 -0.000000 +v 1.157670 -0.773528 0.078036 +v 1.293430 -0.535757 -0.000000 +v 1.286330 -0.532816 0.078036 +v 1.373100 -0.273127 -0.000000 +v 1.365560 -0.271627 0.078036 +v 1.369550 -0.000000 0.153073 +v 1.343240 0.267186 0.153073 +v 1.265300 0.524105 0.153073 +v 1.138740 0.760882 0.153073 +v 0.968419 0.968419 0.153073 +v 0.760882 1.138740 0.153073 +v 0.524105 1.265300 0.153073 +v 0.267186 1.343240 0.153073 +v 0.000000 1.369550 0.153073 +v -0.267186 1.343240 0.153073 +v -0.524105 1.265300 0.153073 +v -0.760882 1.138740 0.153073 +v -0.968419 0.968419 0.153073 +v -1.138740 0.760882 0.153073 +v -1.265300 0.524105 0.153073 +v -1.343240 0.267186 0.153073 +v -1.369550 -0.000000 0.153073 +v -1.343240 -0.267186 0.153073 +v -1.265300 -0.524105 0.153073 +v -1.138740 -0.760882 0.153073 +v -0.968419 -0.968419 0.153073 +v -0.760882 -1.138740 0.153073 +v -0.524105 -1.265300 0.153073 +v -0.267186 -1.343240 0.153073 +v 0.000000 -1.369550 0.153073 +v 0.267186 -1.343240 0.153073 +v 0.524105 -1.265300 0.153073 +v 0.760882 -1.138740 0.153073 +v 0.968419 -0.968419 0.153073 +v 1.138740 -0.760882 0.153073 +v 1.265300 -0.524105 0.153073 +v 1.343240 -0.267186 0.153073 +v 1.306980 0.259975 0.222228 +v 1.332590 -0.000000 0.222228 +v 1.231150 0.509959 0.222228 +v 1.108010 0.740346 0.222228 +v 0.942282 0.942282 0.222228 +v 0.740346 1.108010 0.222228 +v 0.509959 1.231150 0.222228 +v 0.259975 1.306980 0.222228 +v 0.000000 1.332590 0.222228 +v -0.259975 1.306980 0.222228 +v -0.509959 1.231150 0.222228 +v -0.740346 1.108010 0.222228 +v -0.942282 0.942282 0.222228 +v -1.108010 0.740346 0.222228 +v -1.231150 0.509959 0.222228 +v -1.306980 0.259975 0.222228 +v -1.332590 -0.000000 0.222228 +v -1.306980 -0.259975 0.222228 +v -1.231150 -0.509959 0.222228 +v -1.108010 -0.740346 0.222228 +v -0.942282 -0.942282 0.222228 +v -0.740346 -1.108010 0.222228 +v -0.509959 -1.231150 0.222228 +v -0.259975 -1.306980 0.222228 +v 0.000000 -1.332590 0.222228 +v 0.259975 -1.306980 0.222228 +v 0.509959 -1.231150 0.222228 +v 0.740346 -1.108010 0.222228 +v 0.942282 -0.942282 0.222228 +v 1.108010 -0.740346 0.222228 +v 1.231150 -0.509959 0.222228 +v 1.306980 -0.259975 0.222228 +v 1.282840 -0.000000 0.282843 +v 1.258190 0.250270 0.282843 +v 1.185190 0.490923 0.282843 +v 1.066640 0.712709 0.282843 +v 0.907107 0.907107 0.282843 +v 0.712709 1.066640 0.282843 +v 0.490923 1.185190 0.282843 +v 0.250270 1.258190 0.282843 +v 0.000000 1.282840 0.282843 +v -0.250270 1.258190 0.282843 +v -0.490923 1.185190 0.282843 +v -0.712709 1.066640 0.282843 +v -0.907107 0.907107 0.282843 +v -1.066640 0.712709 0.282843 +v -1.185190 0.490923 0.282843 +v -1.258190 0.250270 0.282843 +v -1.282840 -0.000000 0.282843 +v -1.258190 -0.250270 0.282843 +v -1.185190 -0.490923 0.282843 +v -1.066640 -0.712709 0.282843 +v -0.907107 -0.907107 0.282843 +v -0.712709 -1.066640 0.282843 +v -0.490923 -1.185190 0.282843 +v -0.250270 -1.258190 0.282843 +v 0.000000 -1.282840 0.282843 +v 0.250270 -1.258190 0.282843 +v 0.490923 -1.185190 0.282843 +v 0.712709 -1.066640 0.282843 +v 0.907107 -0.907107 0.282843 +v 1.066640 -0.712709 0.282843 +v 1.185190 -0.490923 0.282843 +v 1.258190 -0.250270 0.282843 +v 1.198740 0.238445 0.332588 +v 1.222230 -0.000000 0.332588 +v 1.129190 0.467726 0.332588 +v 1.016250 0.679034 0.332588 +v 0.864246 0.864246 0.332588 +v 0.679034 1.016250 0.332588 +v 0.467726 1.129190 0.332588 +v 0.238445 1.198740 0.332588 +v 0.000000 1.222230 0.332588 +v -0.238445 1.198740 0.332588 +v -0.467726 1.129190 0.332588 +v -0.679034 1.016250 0.332588 +v -0.864246 0.864246 0.332588 +v -1.016250 0.679034 0.332588 +v -1.129190 0.467726 0.332588 +v -1.198740 0.238445 0.332588 +v -1.222230 -0.000000 0.332588 +v -1.198740 -0.238445 0.332588 +v -1.129190 -0.467726 0.332588 +v -1.016250 -0.679033 0.332588 +v -0.864246 -0.864246 0.332588 +v -0.679034 -1.016250 0.332588 +v -0.467727 -1.129190 0.332588 +v -0.238445 -1.198740 0.332588 +v 0.000000 -1.222230 0.332588 +v 0.238445 -1.198740 0.332588 +v 0.467726 -1.129190 0.332588 +v 0.679033 -1.016250 0.332588 +v 0.864246 -0.864246 0.332588 +v 1.016250 -0.679034 0.332588 +v 1.129190 -0.467727 0.332588 +v 1.198740 -0.238445 0.332588 +v 1.153070 -0.000000 0.369552 +v 1.130920 0.224953 0.369552 +v 1.065300 0.441262 0.369552 +v 0.958745 0.640613 0.369552 +v 0.815346 0.815346 0.369552 +v 0.640613 0.958745 0.369552 +v 0.441262 1.065300 0.369552 +v 0.224953 1.130920 0.369552 +v 0.000000 1.153070 0.369552 +v -0.224953 1.130920 0.369552 +v -0.441262 1.065300 0.369552 +v -0.640613 0.958745 0.369552 +v -0.815346 0.815346 0.369552 +v -0.958745 0.640613 0.369552 +v -1.065300 0.441262 0.369552 +v -1.130920 0.224954 0.369552 +v -1.153070 -0.000000 0.369552 +v -1.130920 -0.224953 0.369552 +v -1.065300 -0.441262 0.369552 +v -0.958746 -0.640613 0.369552 +v -0.815346 -0.815346 0.369552 +v -0.640613 -0.958745 0.369552 +v -0.441262 -1.065300 0.369552 +v -0.224954 -1.130920 0.369552 +v 0.000000 -1.153070 0.369552 +v 0.224953 -1.130920 0.369552 +v 0.441262 -1.065300 0.369552 +v 0.640613 -0.958746 0.369552 +v 0.815346 -0.815346 0.369552 +v 0.958745 -0.640613 0.369552 +v 1.065300 -0.441262 0.369552 +v 1.130920 -0.224954 0.369552 +v 1.057320 0.210314 0.392314 +v 1.078040 -0.000000 0.392314 +v 0.995976 0.412547 0.392314 +v 0.896354 0.598925 0.392314 +v 0.762287 0.762287 0.392314 +v 0.598925 0.896354 0.392314 +v 0.412547 0.995975 0.392314 +v 0.210314 1.057320 0.392314 +v 0.000000 1.078040 0.392314 +v -0.210314 1.057320 0.392314 +v -0.412547 0.995976 0.392314 +v -0.598925 0.896354 0.392314 +v -0.762287 0.762287 0.392314 +v -0.896354 0.598925 0.392314 +v -0.995975 0.412547 0.392314 +v -1.057320 0.210314 0.392314 +v -1.078040 -0.000000 0.392314 +v -1.057320 -0.210314 0.392314 +v -0.995976 -0.412547 0.392314 +v -0.896354 -0.598925 0.392314 +v -0.762287 -0.762287 0.392314 +v -0.598925 -0.896354 0.392314 +v -0.412547 -0.995975 0.392314 +v -0.210314 -1.057320 0.392314 +v 0.000000 -1.078040 0.392314 +v 0.210314 -1.057320 0.392314 +v 0.412546 -0.995976 0.392314 +v 0.598925 -0.896354 0.392314 +v 0.762287 -0.762287 0.392314 +v 0.896354 -0.598925 0.392314 +v 0.995975 -0.412547 0.392314 +v 1.057320 -0.210315 0.392314 +v 1.000000 -0.000000 0.400000 +v 0.980785 0.195090 0.400000 +v 0.923880 0.382683 0.400000 +v 0.831470 0.555570 0.400000 +v 0.707107 0.707107 0.400000 +v 0.555570 0.831470 0.400000 +v 0.382683 0.923880 0.400000 +v 0.195090 0.980785 0.400000 +v 0.000000 1.000000 0.400000 +v -0.195090 0.980785 0.400000 +v -0.382683 0.923880 0.400000 +v -0.555570 0.831470 0.400000 +v -0.707107 0.707107 0.400000 +v -0.831470 0.555570 0.400000 +v -0.923880 0.382683 0.400000 +v -0.980785 0.195090 0.400000 +v -1.000000 -0.000000 0.400000 +v -0.980785 -0.195090 0.400000 +v -0.923880 -0.382683 0.400000 +v -0.831470 -0.555570 0.400000 +v -0.707107 -0.707107 0.400000 +v -0.555570 -0.831470 0.400000 +v -0.382684 -0.923880 0.400000 +v -0.195090 -0.980785 0.400000 +v 0.000000 -1.000000 0.400000 +v 0.195090 -0.980785 0.400000 +v 0.382683 -0.923880 0.400000 +v 0.555570 -0.831470 0.400000 +v 0.707107 -0.707107 0.400000 +v 0.831470 -0.555570 0.400000 +v 0.923880 -0.382684 0.400000 +v 0.980785 -0.195090 0.400000 +v 0.904249 0.179866 0.392314 +v 0.921964 -0.000000 0.392314 +v 0.851784 0.352820 0.392314 +v 0.766585 0.512216 0.392314 +v 0.651927 0.651927 0.392314 +v 0.512216 0.766585 0.392314 +v 0.352820 0.851784 0.392314 +v 0.179866 0.904249 0.392314 +v 0.000000 0.921964 0.392314 +v -0.179866 0.904249 0.392314 +v -0.352820 0.851784 0.392314 +v -0.512216 0.766585 0.392314 +v -0.651927 0.651927 0.392314 +v -0.766585 0.512216 0.392314 +v -0.851784 0.352820 0.392314 +v -0.904249 0.179866 0.392314 +v -0.921964 -0.000000 0.392314 +v -0.904249 -0.179866 0.392314 +v -0.851784 -0.352820 0.392314 +v -0.766585 -0.512216 0.392314 +v -0.651927 -0.651927 0.392314 +v -0.512216 -0.766585 0.392314 +v -0.352820 -0.851784 0.392314 +v -0.179866 -0.904249 0.392314 +v 0.000000 -0.921964 0.392314 +v 0.179866 -0.904249 0.392314 +v 0.352820 -0.851784 0.392314 +v 0.512216 -0.766585 0.392314 +v 0.651927 -0.651927 0.392314 +v 0.766585 -0.512216 0.392314 +v 0.851784 -0.352820 0.392314 +v 0.904249 -0.179866 0.392314 +v 0.846927 -0.000000 0.369552 +v 0.830653 0.165227 0.369552 +v 0.782458 0.324105 0.369552 +v 0.704194 0.470527 0.369552 +v 0.598868 0.598868 0.369552 +v 0.470527 0.704194 0.369552 +v 0.324105 0.782458 0.369552 +v 0.165227 0.830653 0.369552 +v 0.000000 0.846927 0.369552 +v -0.165227 0.830653 0.369552 +v -0.324105 0.782458 0.369552 +v -0.470527 0.704194 0.369552 +v -0.598868 0.598868 0.369552 +v -0.704194 0.470527 0.369552 +v -0.782458 0.324105 0.369552 +v -0.830653 0.165227 0.369552 +v -0.846927 -0.000000 0.369552 +v -0.830653 -0.165227 0.369552 +v -0.782458 -0.324105 0.369552 +v -0.704194 -0.470527 0.369552 +v -0.598868 -0.598868 0.369552 +v -0.470527 -0.704194 0.369552 +v -0.324105 -0.782458 0.369552 +v -0.165227 -0.830653 0.369552 +v 0.000000 -0.846927 0.369552 +v 0.165227 -0.830653 0.369552 +v 0.324105 -0.782458 0.369552 +v 0.470527 -0.704194 0.369552 +v 0.598868 -0.598868 0.369552 +v 0.704194 -0.470527 0.369552 +v 0.782458 -0.324105 0.369552 +v 0.830653 -0.165227 0.369552 +v 0.762827 0.151736 0.332588 +v 0.777772 -0.000000 0.332588 +v 0.718568 0.297640 0.332588 +v 0.646694 0.432107 0.332588 +v 0.549968 0.549968 0.332588 +v 0.432107 0.646694 0.332588 +v 0.297640 0.718568 0.332588 +v 0.151736 0.762827 0.332588 +v 0.000000 0.777772 0.332588 +v -0.151736 0.762827 0.332588 +v -0.297640 0.718568 0.332588 +v -0.432107 0.646694 0.332588 +v -0.549968 0.549968 0.332588 +v -0.646694 0.432107 0.332588 +v -0.718568 0.297640 0.332588 +v -0.762827 0.151736 0.332588 +v -0.777772 -0.000000 0.332588 +v -0.762827 -0.151736 0.332588 +v -0.718568 -0.297640 0.332588 +v -0.646694 -0.432107 0.332588 +v -0.549968 -0.549968 0.332588 +v -0.432107 -0.646694 0.332588 +v -0.297640 -0.718568 0.332588 +v -0.151736 -0.762827 0.332588 +v 0.000000 -0.777772 0.332588 +v 0.151736 -0.762827 0.332588 +v 0.297640 -0.718568 0.332588 +v 0.432107 -0.646694 0.332588 +v 0.549968 -0.549968 0.332588 +v 0.646694 -0.432107 0.332588 +v 0.718568 -0.297641 0.332588 +v 0.762827 -0.151736 0.332588 +v 0.717157 -0.000000 0.282843 +v 0.703377 0.139910 0.282843 +v 0.662567 0.274444 0.282843 +v 0.596295 0.398431 0.282843 +v 0.507107 0.507107 0.282843 +v 0.398431 0.596295 0.282843 +v 0.274444 0.662567 0.282843 +v 0.139910 0.703377 0.282843 +v 0.000000 0.717157 0.282843 +v -0.139910 0.703377 0.282843 +v -0.274444 0.662567 0.282843 +v -0.398431 0.596295 0.282843 +v -0.507107 0.507107 0.282843 +v -0.596294 0.398431 0.282843 +v -0.662567 0.274444 0.282843 +v -0.703377 0.139910 0.282843 +v -0.717157 -0.000000 0.282843 +v -0.703377 -0.139910 0.282843 +v -0.662567 -0.274444 0.282843 +v -0.596295 -0.398431 0.282843 +v -0.507107 -0.507107 0.282843 +v -0.398431 -0.596294 0.282843 +v -0.274444 -0.662567 0.282843 +v -0.139911 -0.703377 0.282843 +v 0.000000 -0.717157 0.282843 +v 0.139910 -0.703377 0.282843 +v 0.274444 -0.662567 0.282843 +v 0.398431 -0.596295 0.282843 +v 0.507107 -0.507107 0.282843 +v 0.596294 -0.398431 0.282843 +v 0.662567 -0.274444 0.282843 +v 0.703377 -0.139911 0.282843 +v 0.654588 0.130206 0.222228 +v 0.667412 -0.000000 0.222228 +v 0.616608 0.255408 0.222228 +v 0.554933 0.370794 0.222228 +v 0.471932 0.471932 0.222228 +v 0.370794 0.554933 0.222228 +v 0.255408 0.616608 0.222228 +v 0.130206 0.654588 0.222228 +v 0.000000 0.667412 0.222228 +v -0.130206 0.654588 0.222228 +v -0.255408 0.616608 0.222228 +v -0.370794 0.554933 0.222228 +v -0.471932 0.471932 0.222228 +v -0.554933 0.370794 0.222228 +v -0.616608 0.255408 0.222228 +v -0.654588 0.130206 0.222228 +v -0.667412 -0.000000 0.222228 +v -0.654588 -0.130206 0.222228 +v -0.616608 -0.255408 0.222228 +v -0.554933 -0.370794 0.222228 +v -0.471932 -0.471932 0.222228 +v -0.370794 -0.554933 0.222228 +v -0.255408 -0.616608 0.222228 +v -0.130206 -0.654588 0.222228 +v 0.000000 -0.667412 0.222228 +v 0.130206 -0.654588 0.222228 +v 0.255408 -0.616608 0.222228 +v 0.370794 -0.554933 0.222228 +v 0.471932 -0.471932 0.222228 +v 0.554933 -0.370794 0.222228 +v 0.616608 -0.255408 0.222228 +v 0.654588 -0.130206 0.222228 +v 0.630448 -0.000000 0.153073 +v 0.618334 0.122994 0.153073 +v 0.582458 0.241262 0.153073 +v 0.524199 0.350258 0.153073 +v 0.445794 0.445794 0.153073 +v 0.350258 0.524199 0.153073 +v 0.241262 0.582458 0.153073 +v 0.122994 0.618334 0.153073 +v 0.000000 0.630448 0.153073 +v -0.122994 0.618334 0.153073 +v -0.241262 0.582458 0.153073 +v -0.350258 0.524199 0.153073 +v -0.445794 0.445794 0.153073 +v -0.524198 0.350258 0.153073 +v -0.582458 0.241262 0.153073 +v -0.618334 0.122994 0.153073 +v -0.630448 -0.000000 0.153073 +v -0.618334 -0.122994 0.153073 +v -0.582458 -0.241262 0.153073 +v -0.524199 -0.350258 0.153073 +v -0.445794 -0.445794 0.153073 +v -0.350258 -0.524198 0.153073 +v -0.241262 -0.582458 0.153073 +v -0.122994 -0.618334 0.153073 +v 0.000000 -0.630448 0.153073 +v 0.122994 -0.618334 0.153073 +v 0.241262 -0.582458 0.153073 +v 0.350258 -0.524199 0.153073 +v 0.445794 -0.445794 0.153073 +v 0.524198 -0.350258 0.153073 +v 0.582458 -0.241262 0.153073 +v 0.618334 -0.122994 0.153073 +v 0.596009 0.118554 0.078036 +v 0.607686 -0.000000 0.078036 +v 0.561429 0.232551 0.078036 +v 0.505272 0.337612 0.078036 +v 0.429699 0.429699 0.078036 +v 0.337612 0.505272 0.078036 +v 0.232551 0.561429 0.078036 +v 0.118554 0.596009 0.078036 +v 0.000000 0.607686 0.078036 +v -0.118554 0.596009 0.078036 +v -0.232551 0.561429 0.078036 +v -0.337612 0.505272 0.078036 +v -0.429699 0.429699 0.078036 +v -0.505272 0.337612 0.078036 +v -0.561429 0.232551 0.078036 +v -0.596009 0.118554 0.078036 +v -0.607686 -0.000000 0.078036 +v -0.596009 -0.118554 0.078036 +v -0.561429 -0.232551 0.078036 +v -0.505272 -0.337612 0.078036 +v -0.429699 -0.429699 0.078036 +v -0.337612 -0.505272 0.078036 +v -0.232551 -0.561429 0.078036 +v -0.118554 -0.596009 0.078036 +v 0.000000 -0.607686 0.078036 +v 0.118554 -0.596009 0.078036 +v 0.232551 -0.561429 0.078036 +v 0.337612 -0.505272 0.078036 +v 0.429699 -0.429699 0.078036 +v 0.505272 -0.337612 0.078036 +v 0.561429 -0.232551 0.078036 +v 0.596009 -0.118554 0.078036 +v 0.600000 0.000000 0.000000 +v 0.588471 0.117054 0.000000 +v 0.554328 0.229610 0.000000 +v 0.498882 0.333342 0.000000 +v 0.424264 0.424264 0.000000 +v 0.333342 0.498882 0.000000 +v 0.229610 0.554328 0.000000 +v 0.117054 0.588471 0.000000 +v 0.000000 0.600000 0.000000 +v -0.117054 0.588471 0.000000 +v -0.229610 0.554328 0.000000 +v -0.333342 0.498882 0.000000 +v -0.424264 0.424264 0.000000 +v -0.498882 0.333342 0.000000 +v -0.554328 0.229610 0.000000 +v -0.588471 0.117054 0.000000 +v -0.600000 0.000000 0.000000 +v -0.588471 -0.117054 -0.000000 +v -0.554328 -0.229610 -0.000000 +v -0.498882 -0.333342 -0.000000 +v -0.424264 -0.424264 -0.000000 +v -0.333342 -0.498882 -0.000000 +v -0.229610 -0.554328 -0.000000 +v -0.117054 -0.588471 -0.000000 +v 0.000000 -0.600000 -0.000000 +v 0.117054 -0.588471 -0.000000 +v 0.229610 -0.554328 -0.000000 +v 0.333342 -0.498882 -0.000000 +v 0.424264 -0.424264 -0.000000 +v 0.498882 -0.333342 -0.000000 +v 0.554328 -0.229610 -0.000000 +v 0.588471 -0.117054 -0.000000 +v 0.596009 0.118554 -0.078036 +v 0.607686 0.000000 -0.078036 +v 0.561429 0.232551 -0.078036 +v 0.505272 0.337612 -0.078036 +v 0.429699 0.429699 -0.078036 +v 0.337612 0.505272 -0.078036 +v 0.232551 0.561429 -0.078036 +v 0.118554 0.596009 -0.078036 +v 0.000000 0.607686 -0.078036 +v -0.118554 0.596009 -0.078036 +v -0.232551 0.561429 -0.078036 +v -0.337612 0.505272 -0.078036 +v -0.429699 0.429699 -0.078036 +v -0.505272 0.337612 -0.078036 +v -0.561429 0.232551 -0.078036 +v -0.596009 0.118554 -0.078036 +v -0.607686 0.000000 -0.078036 +v -0.596009 -0.118554 -0.078036 +v -0.561429 -0.232551 -0.078036 +v -0.505272 -0.337612 -0.078036 +v -0.429699 -0.429699 -0.078036 +v -0.337612 -0.505272 -0.078036 +v -0.232551 -0.561429 -0.078036 +v -0.118554 -0.596009 -0.078036 +v 0.000000 -0.607686 -0.078036 +v 0.118554 -0.596009 -0.078036 +v 0.232551 -0.561429 -0.078036 +v 0.337612 -0.505272 -0.078036 +v 0.429699 -0.429699 -0.078036 +v 0.505272 -0.337612 -0.078036 +v 0.561429 -0.232551 -0.078036 +v 0.596009 -0.118554 -0.078036 +v 0.630448 0.000000 -0.153073 +v 0.618334 0.122994 -0.153073 +v 0.582458 0.241262 -0.153073 +v 0.524199 0.350258 -0.153073 +v 0.445794 0.445794 -0.153073 +v 0.350258 0.524198 -0.153073 +v 0.241262 0.582458 -0.153073 +v 0.122994 0.618334 -0.153073 +v 0.000000 0.630448 -0.153073 +v -0.122994 0.618334 -0.153073 +v -0.241262 0.582458 -0.153073 +v -0.350258 0.524199 -0.153073 +v -0.445794 0.445794 -0.153073 +v -0.524198 0.350258 -0.153073 +v -0.582458 0.241262 -0.153073 +v -0.618334 0.122994 -0.153073 +v -0.630448 0.000000 -0.153073 +v -0.618334 -0.122994 -0.153073 +v -0.582458 -0.241262 -0.153073 +v -0.524199 -0.350258 -0.153073 +v -0.445794 -0.445794 -0.153073 +v -0.350258 -0.524198 -0.153073 +v -0.241262 -0.582458 -0.153073 +v -0.122994 -0.618334 -0.153073 +v 0.000000 -0.630448 -0.153073 +v 0.122994 -0.618334 -0.153073 +v 0.241262 -0.582458 -0.153073 +v 0.350258 -0.524199 -0.153073 +v 0.445794 -0.445794 -0.153073 +v 0.524198 -0.350258 -0.153073 +v 0.582458 -0.241262 -0.153073 +v 0.618334 -0.122994 -0.153073 +v 0.654588 0.130206 -0.222228 +v 0.667412 0.000000 -0.222228 +v 0.616608 0.255408 -0.222228 +v 0.554933 0.370794 -0.222228 +v 0.471932 0.471932 -0.222228 +v 0.370794 0.554933 -0.222228 +v 0.255408 0.616608 -0.222228 +v 0.130206 0.654588 -0.222228 +v 0.000000 0.667412 -0.222228 +v -0.130206 0.654588 -0.222228 +v -0.255408 0.616608 -0.222228 +v -0.370794 0.554933 -0.222228 +v -0.471932 0.471932 -0.222228 +v -0.554933 0.370794 -0.222228 +v -0.616608 0.255408 -0.222228 +v -0.654588 0.130206 -0.222228 +v -0.667412 0.000000 -0.222228 +v -0.654588 -0.130206 -0.222228 +v -0.616608 -0.255408 -0.222228 +v -0.554933 -0.370794 -0.222228 +v -0.471932 -0.471932 -0.222228 +v -0.370794 -0.554933 -0.222228 +v -0.255408 -0.616608 -0.222228 +v -0.130206 -0.654588 -0.222228 +v 0.000000 -0.667412 -0.222228 +v 0.130206 -0.654588 -0.222228 +v 0.255408 -0.616608 -0.222228 +v 0.370794 -0.554933 -0.222228 +v 0.471932 -0.471932 -0.222228 +v 0.554933 -0.370794 -0.222228 +v 0.616608 -0.255408 -0.222228 +v 0.654588 -0.130206 -0.222228 +v 0.717157 0.000000 -0.282843 +v 0.703377 0.139910 -0.282843 +v 0.662567 0.274444 -0.282843 +v 0.596294 0.398431 -0.282843 +v 0.507107 0.507107 -0.282843 +v 0.398431 0.596294 -0.282843 +v 0.274444 0.662567 -0.282843 +v 0.139910 0.703377 -0.282843 +v 0.000000 0.717157 -0.282843 +v -0.139910 0.703377 -0.282843 +v -0.274444 0.662567 -0.282843 +v -0.398431 0.596294 -0.282843 +v -0.507107 0.507107 -0.282843 +v -0.596294 0.398431 -0.282843 +v -0.662567 0.274444 -0.282843 +v -0.703377 0.139910 -0.282843 +v -0.717157 0.000000 -0.282843 +v -0.703377 -0.139910 -0.282843 +v -0.662567 -0.274444 -0.282843 +v -0.596295 -0.398431 -0.282843 +v -0.507107 -0.507107 -0.282843 +v -0.398431 -0.596294 -0.282843 +v -0.274444 -0.662567 -0.282843 +v -0.139910 -0.703377 -0.282843 +v 0.000000 -0.717157 -0.282843 +v 0.139910 -0.703377 -0.282843 +v 0.274444 -0.662567 -0.282843 +v 0.398431 -0.596295 -0.282843 +v 0.507107 -0.507107 -0.282843 +v 0.596294 -0.398431 -0.282843 +v 0.662567 -0.274444 -0.282843 +v 0.703377 -0.139911 -0.282843 +v 0.762827 0.151736 -0.332588 +v 0.777772 0.000000 -0.332588 +v 0.718568 0.297640 -0.332588 +v 0.646694 0.432107 -0.332588 +v 0.549968 0.549968 -0.332588 +v 0.432107 0.646694 -0.332588 +v 0.297640 0.718567 -0.332588 +v 0.151736 0.762827 -0.332588 +v 0.000000 0.777772 -0.332588 +v -0.151736 0.762827 -0.332588 +v -0.297640 0.718568 -0.332588 +v -0.432107 0.646694 -0.332588 +v -0.549968 0.549968 -0.332588 +v -0.646694 0.432107 -0.332588 +v -0.718567 0.297640 -0.332588 +v -0.762827 0.151736 -0.332588 +v -0.777772 0.000000 -0.332588 +v -0.762827 -0.151736 -0.332588 +v -0.718568 -0.297640 -0.332588 +v -0.646694 -0.432107 -0.332588 +v -0.549968 -0.549968 -0.332588 +v -0.432107 -0.646694 -0.332588 +v -0.297640 -0.718567 -0.332588 +v -0.151736 -0.762827 -0.332588 +v 0.000000 -0.777772 -0.332588 +v 0.151736 -0.762827 -0.332588 +v 0.297640 -0.718568 -0.332588 +v 0.432107 -0.646694 -0.332588 +v 0.549968 -0.549968 -0.332588 +v 0.646694 -0.432107 -0.332588 +v 0.718567 -0.297640 -0.332588 +v 0.762827 -0.151736 -0.332588 +v 0.846927 0.000000 -0.369552 +v 0.830653 0.165227 -0.369552 +v 0.782458 0.324105 -0.369552 +v 0.704194 0.470527 -0.369552 +v 0.598868 0.598868 -0.369552 +v 0.470527 0.704194 -0.369552 +v 0.324105 0.782458 -0.369552 +v 0.165227 0.830653 -0.369552 +v 0.000000 0.846927 -0.369552 +v -0.165227 0.830653 -0.369552 +v -0.324105 0.782458 -0.369552 +v -0.470527 0.704194 -0.369552 +v -0.598868 0.598868 -0.369552 +v -0.704194 0.470527 -0.369552 +v -0.782458 0.324105 -0.369552 +v -0.830653 0.165227 -0.369552 +v -0.846927 0.000000 -0.369552 +v -0.830653 -0.165227 -0.369552 +v -0.782458 -0.324105 -0.369552 +v -0.704194 -0.470527 -0.369552 +v -0.598868 -0.598867 -0.369552 +v -0.470527 -0.704194 -0.369552 +v -0.324105 -0.782458 -0.369552 +v -0.165227 -0.830653 -0.369552 +v 0.000000 -0.846927 -0.369552 +v 0.165227 -0.830653 -0.369552 +v 0.324105 -0.782458 -0.369552 +v 0.470527 -0.704194 -0.369552 +v 0.598867 -0.598868 -0.369552 +v 0.704194 -0.470527 -0.369552 +v 0.782458 -0.324105 -0.369552 +v 0.830653 -0.165227 -0.369552 +v 0.904249 0.179866 -0.392314 +v 0.921964 0.000000 -0.392314 +v 0.851784 0.352820 -0.392314 +v 0.766585 0.512216 -0.392314 +v 0.651927 0.651927 -0.392314 +v 0.512216 0.766585 -0.392314 +v 0.352820 0.851784 -0.392314 +v 0.179866 0.904249 -0.392314 +v 0.000000 0.921964 -0.392314 +v -0.179866 0.904249 -0.392314 +v -0.352820 0.851784 -0.392314 +v -0.512216 0.766585 -0.392314 +v -0.651927 0.651927 -0.392314 +v -0.766585 0.512216 -0.392314 +v -0.851784 0.352820 -0.392314 +v -0.904249 0.179866 -0.392314 +v -0.921964 0.000000 -0.392314 +v -0.904249 -0.179866 -0.392314 +v -0.851784 -0.352820 -0.392314 +v -0.766585 -0.512216 -0.392314 +v -0.651927 -0.651927 -0.392314 +v -0.512216 -0.766585 -0.392314 +v -0.352820 -0.851784 -0.392314 +v -0.179866 -0.904249 -0.392314 +v 0.000000 -0.921964 -0.392314 +v 0.179866 -0.904249 -0.392314 +v 0.352820 -0.851784 -0.392314 +v 0.512216 -0.766585 -0.392314 +v 0.651927 -0.651927 -0.392314 +v 0.766585 -0.512216 -0.392314 +v 0.851784 -0.352820 -0.392314 +v 0.904249 -0.179866 -0.392314 +v 1.000000 0.000000 -0.400000 +v 0.980785 0.195090 -0.400000 +v 0.923880 0.382683 -0.400000 +v 0.831470 0.555570 -0.400000 +v 0.707107 0.707107 -0.400000 +v 0.555570 0.831470 -0.400000 +v 0.382683 0.923880 -0.400000 +v 0.195090 0.980785 -0.400000 +v 0.000000 1.000000 -0.400000 +v -0.195090 0.980785 -0.400000 +v -0.382683 0.923880 -0.400000 +v -0.555570 0.831470 -0.400000 +v -0.707107 0.707107 -0.400000 +v -0.831470 0.555570 -0.400000 +v -0.923880 0.382683 -0.400000 +v -0.980785 0.195090 -0.400000 +v -1.000000 0.000000 -0.400000 +v -0.980785 -0.195090 -0.400000 +v -0.923880 -0.382683 -0.400000 +v -0.831470 -0.555570 -0.400000 +v -0.707107 -0.707107 -0.400000 +v -0.555570 -0.831470 -0.400000 +v -0.382683 -0.923880 -0.400000 +v -0.195090 -0.980785 -0.400000 +v 0.000000 -1.000000 -0.400000 +v 0.195090 -0.980785 -0.400000 +v 0.382683 -0.923880 -0.400000 +v 0.555570 -0.831470 -0.400000 +v 0.707107 -0.707107 -0.400000 +v 0.831470 -0.555570 -0.400000 +v 0.923879 -0.382684 -0.400000 +v 0.980785 -0.195090 -0.400000 +v 1.057320 0.210314 -0.392314 +v 1.078040 0.000000 -0.392314 +v 0.995975 0.412547 -0.392314 +v 0.896354 0.598925 -0.392314 +v 0.762287 0.762287 -0.392314 +v 0.598925 0.896354 -0.392314 +v 0.412547 0.995975 -0.392314 +v 0.210314 1.057320 -0.392314 +v 0.000000 1.078040 -0.392314 +v -0.210314 1.057320 -0.392314 +v -0.412547 0.995975 -0.392314 +v -0.598925 0.896354 -0.392314 +v -0.762287 0.762287 -0.392314 +v -0.896354 0.598925 -0.392314 +v -0.995975 0.412547 -0.392314 +v -1.057320 0.210314 -0.392314 +v -1.078040 0.000000 -0.392314 +v -1.057320 -0.210314 -0.392314 +v -0.995975 -0.412546 -0.392314 +v -0.896354 -0.598925 -0.392314 +v -0.762287 -0.762287 -0.392314 +v -0.598925 -0.896354 -0.392314 +v -0.412547 -0.995975 -0.392314 +v -0.210314 -1.057320 -0.392314 +v 0.000000 -1.078040 -0.392314 +v 0.210314 -1.057320 -0.392314 +v 0.412546 -0.995975 -0.392314 +v 0.598925 -0.896354 -0.392314 +v 0.762287 -0.762287 -0.392314 +v 0.896354 -0.598925 -0.392314 +v 0.995975 -0.412547 -0.392314 +v 1.057320 -0.210315 -0.392314 +v 1.153070 0.000000 -0.369552 +v 1.130920 0.224953 -0.369552 +v 1.065300 0.441262 -0.369552 +v 0.958745 0.640613 -0.369552 +v 0.815346 0.815346 -0.369552 +v 0.640613 0.958745 -0.369552 +v 0.441262 1.065300 -0.369552 +v 0.224953 1.130920 -0.369552 +v 0.000000 1.153070 -0.369552 +v -0.224953 1.130920 -0.369552 +v -0.441262 1.065300 -0.369552 +v -0.640613 0.958745 -0.369552 +v -0.815346 0.815346 -0.369552 +v -0.958745 0.640613 -0.369552 +v -1.065300 0.441262 -0.369552 +v -1.130920 0.224954 -0.369552 +v -1.153070 0.000000 -0.369552 +v -1.130920 -0.224953 -0.369552 +v -1.065300 -0.441262 -0.369552 +v -0.958745 -0.640613 -0.369552 +v -0.815346 -0.815346 -0.369552 +v -0.640613 -0.958745 -0.369552 +v -0.441262 -1.065300 -0.369552 +v -0.224954 -1.130920 -0.369552 +v 0.000000 -1.153070 -0.369552 +v 0.224953 -1.130920 -0.369552 +v 0.441262 -1.065300 -0.369552 +v 0.640613 -0.958745 -0.369552 +v 0.815346 -0.815346 -0.369552 +v 0.958745 -0.640613 -0.369552 +v 1.065300 -0.441262 -0.369552 +v 1.130920 -0.224954 -0.369552 +v 1.198740 0.238445 -0.332588 +v 1.222230 0.000000 -0.332588 +v 1.129190 0.467726 -0.332588 +v 1.016250 0.679034 -0.332588 +v 0.864246 0.864246 -0.332588 +v 0.679034 1.016250 -0.332588 +v 0.467726 1.129190 -0.332588 +v 0.238445 1.198740 -0.332588 +v 0.000000 1.222230 -0.332588 +v -0.238445 1.198740 -0.332588 +v -0.467726 1.129190 -0.332588 +v -0.679034 1.016250 -0.332588 +v -0.864246 0.864246 -0.332588 +v -1.016250 0.679034 -0.332588 +v -1.129190 0.467726 -0.332588 +v -1.198740 0.238445 -0.332588 +v -1.222230 0.000000 -0.332588 +v -1.198740 -0.238445 -0.332588 +v -1.129190 -0.467726 -0.332588 +v -1.016250 -0.679033 -0.332588 +v -0.864246 -0.864246 -0.332588 +v -0.679034 -1.016250 -0.332588 +v -0.467726 -1.129190 -0.332588 +v -0.238445 -1.198740 -0.332588 +v 0.000000 -1.222230 -0.332588 +v 0.238445 -1.198740 -0.332588 +v 0.467726 -1.129190 -0.332588 +v 0.679033 -1.016250 -0.332588 +v 0.864246 -0.864246 -0.332588 +v 1.016250 -0.679034 -0.332588 +v 1.129190 -0.467727 -0.332588 +v 1.198740 -0.238445 -0.332588 +v 1.282840 0.000000 -0.282843 +v 1.258190 0.250270 -0.282843 +v 1.185190 0.490923 -0.282843 +v 1.066640 0.712709 -0.282843 +v 0.907107 0.907107 -0.282843 +v 0.712709 1.066640 -0.282843 +v 0.490923 1.185190 -0.282843 +v 0.250270 1.258190 -0.282843 +v 0.000000 1.282840 -0.282843 +v -0.250270 1.258190 -0.282843 +v -0.490923 1.185190 -0.282843 +v -0.712709 1.066640 -0.282843 +v -0.907107 0.907107 -0.282843 +v -1.066640 0.712709 -0.282843 +v -1.185190 0.490923 -0.282843 +v -1.258190 0.250270 -0.282843 +v -1.282840 0.000000 -0.282843 +v -1.258190 -0.250270 -0.282843 +v -1.185190 -0.490923 -0.282843 +v -1.066640 -0.712709 -0.282843 +v -0.907107 -0.907107 -0.282843 +v -0.712709 -1.066640 -0.282843 +v -0.490923 -1.185190 -0.282843 +v -0.250270 -1.258190 -0.282843 +v 0.000000 -1.282840 -0.282843 +v 0.250270 -1.258190 -0.282843 +v 0.490923 -1.185190 -0.282843 +v 0.712709 -1.066640 -0.282843 +v 0.907107 -0.907107 -0.282843 +v 1.066640 -0.712709 -0.282843 +v 1.185190 -0.490923 -0.282843 +v 1.258190 -0.250270 -0.282843 +v 1.306980 0.259975 -0.222228 +v 1.332590 0.000000 -0.222228 +v 1.231150 0.509959 -0.222228 +v 1.108010 0.740346 -0.222228 +v 0.942282 0.942282 -0.222228 +v 0.740346 1.108010 -0.222228 +v 0.509959 1.231150 -0.222228 +v 0.259975 1.306980 -0.222228 +v 0.000000 1.332590 -0.222228 +v -0.259975 1.306980 -0.222228 +v -0.509959 1.231150 -0.222228 +v -0.740346 1.108010 -0.222228 +v -0.942282 0.942282 -0.222228 +v -1.108010 0.740346 -0.222228 +v -1.231150 0.509959 -0.222228 +v -1.306980 0.259975 -0.222228 +v -1.332590 0.000000 -0.222228 +v -1.306980 -0.259975 -0.222228 +v -1.231150 -0.509959 -0.222228 +v -1.108010 -0.740346 -0.222228 +v -0.942282 -0.942282 -0.222228 +v -0.740346 -1.108010 -0.222228 +v -0.509959 -1.231150 -0.222228 +v -0.259975 -1.306980 -0.222228 +v 0.000000 -1.332590 -0.222228 +v 0.259975 -1.306980 -0.222228 +v 0.509959 -1.231150 -0.222228 +v 0.740346 -1.108010 -0.222228 +v 0.942282 -0.942282 -0.222228 +v 1.108010 -0.740346 -0.222228 +v 1.231150 -0.509959 -0.222228 +v 1.306980 -0.259975 -0.222228 +v 1.369550 0.000000 -0.153073 +v 1.343240 0.267186 -0.153073 +v 1.265300 0.524105 -0.153073 +v 1.138740 0.760882 -0.153073 +v 0.968419 0.968419 -0.153073 +v 0.760882 1.138740 -0.153073 +v 0.524105 1.265300 -0.153073 +v 0.267186 1.343240 -0.153073 +v 0.000000 1.369550 -0.153073 +v -0.267186 1.343240 -0.153073 +v -0.524105 1.265300 -0.153073 +v -0.760882 1.138740 -0.153073 +v -0.968419 0.968419 -0.153073 +v -1.138740 0.760882 -0.153073 +v -1.265300 0.524105 -0.153073 +v -1.343240 0.267186 -0.153073 +v -1.369550 0.000000 -0.153073 +v -1.343240 -0.267186 -0.153073 +v -1.265300 -0.524105 -0.153073 +v -1.138740 -0.760882 -0.153073 +v -0.968419 -0.968419 -0.153073 +v -0.760882 -1.138740 -0.153073 +v -0.524105 -1.265300 -0.153073 +v -0.267186 -1.343240 -0.153073 +v 0.000000 -1.369550 -0.153073 +v 0.267186 -1.343240 -0.153073 +v 0.524105 -1.265300 -0.153073 +v 0.760882 -1.138740 -0.153073 +v 0.968419 -0.968419 -0.153073 +v 1.138740 -0.760882 -0.153073 +v 1.265300 -0.524105 -0.153073 +v 1.343240 -0.267186 -0.153073 +v 1.365560 0.271627 -0.078036 +v 1.392310 0.000000 -0.078036 +v 1.286330 0.532816 -0.078036 +v 1.157670 0.773528 -0.078036 +v 0.984515 0.984515 -0.078036 +v 0.773528 1.157670 -0.078036 +v 0.532816 1.286330 -0.078036 +v 0.271627 1.365560 -0.078036 +v 0.000000 1.392310 -0.078036 +v -0.271627 1.365560 -0.078036 +v -0.532816 1.286330 -0.078036 +v -0.773528 1.157670 -0.078036 +v -0.984515 0.984515 -0.078036 +v -1.157670 0.773528 -0.078036 +v -1.286330 0.532816 -0.078036 +v -1.365560 0.271627 -0.078036 +v -1.392310 0.000000 -0.078036 +v -1.365560 -0.271627 -0.078036 +v -1.286330 -0.532815 -0.078036 +v -1.157670 -0.773528 -0.078036 +v -0.984515 -0.984515 -0.078036 +v -0.773528 -1.157670 -0.078036 +v -0.532816 -1.286330 -0.078036 +v -0.271627 -1.365560 -0.078036 +v 0.000000 -1.392310 -0.078036 +v 0.271627 -1.365560 -0.078036 +v 0.532815 -1.286330 -0.078036 +v 0.773528 -1.157670 -0.078036 +v 0.984515 -0.984515 -0.078036 +v 1.157670 -0.773528 -0.078036 +v 1.286330 -0.532816 -0.078036 +v 1.365560 -0.271627 -0.078036 +vn 0.9904 0.0975 0.0976 +vn 0.9524 0.2889 0.0976 +vn 0.9524 0.2889 0.0975 +vn 0.8777 0.4691 0.0975 +vn 0.7693 0.6314 0.0975 +vn 0.6314 0.7693 0.0975 +vn 0.4691 0.8777 0.0975 +vn 0.2889 0.9524 0.0976 +vn 0.2889 0.9524 0.0975 +vn 0.0975 0.9904 0.0976 +vn -0.0975 0.9904 0.0976 +vn -0.2889 0.9524 0.0976 +vn -0.2889 0.9524 0.0975 +vn -0.4691 0.8777 0.0975 +vn -0.6314 0.7693 0.0975 +vn -0.7693 0.6314 0.0975 +vn -0.8777 0.4691 0.0975 +vn -0.9524 0.2889 0.0976 +vn -0.9524 0.2889 0.0975 +vn -0.9904 0.0975 0.0976 +vn -0.9904 -0.0975 0.0976 +vn -0.9524 -0.2889 0.0976 +vn -0.9524 -0.2889 0.0975 +vn -0.8777 -0.4691 0.0975 +vn -0.7693 -0.6314 0.0975 +vn -0.6314 -0.7693 0.0975 +vn -0.4691 -0.8777 0.0975 +vn -0.2889 -0.9524 0.0976 +vn -0.2889 -0.9524 0.0975 +vn -0.0975 -0.9904 0.0976 +vn 0.0975 -0.9904 0.0976 +vn 0.2889 -0.9524 0.0976 +vn 0.2889 -0.9524 0.0975 +vn 0.4691 -0.8777 0.0975 +vn 0.6314 -0.7693 0.0975 +vn 0.7693 -0.6314 0.0975 +vn 0.8777 -0.4691 0.0975 +vn 0.9524 -0.2889 0.0976 +vn 0.9524 -0.2889 0.0975 +vn 0.9527 0.0938 0.2890 +vn 0.9527 0.0938 0.2889 +vn 0.9161 0.2779 0.2890 +vn 0.8443 0.4513 0.2890 +vn 0.7400 0.6073 0.2890 +vn 0.6073 0.7400 0.2890 +vn 0.4513 0.8443 0.2890 +vn 0.2779 0.9161 0.2890 +vn 0.2779 0.9161 0.2889 +vn 0.0938 0.9527 0.2890 +vn 0.0938 0.9527 0.2889 +vn -0.0938 0.9527 0.2890 +vn -0.0938 0.9527 0.2889 +vn -0.2779 0.9161 0.2890 +vn -0.2779 0.9161 0.2889 +vn -0.4513 0.8443 0.2890 +vn -0.6073 0.7400 0.2890 +vn -0.7400 0.6073 0.2890 +vn -0.8443 0.4513 0.2890 +vn -0.9161 0.2779 0.2890 +vn -0.9527 0.0938 0.2890 +vn -0.9527 0.0938 0.2889 +vn -0.9527 -0.0938 0.2890 +vn -0.9527 -0.0938 0.2889 +vn -0.9161 -0.2779 0.2890 +vn -0.8443 -0.4513 0.2890 +vn -0.7400 -0.6073 0.2890 +vn -0.6073 -0.7400 0.2890 +vn -0.4513 -0.8443 0.2890 +vn -0.2779 -0.9161 0.2890 +vn -0.2779 -0.9161 0.2889 +vn -0.0938 -0.9527 0.2890 +vn -0.0938 -0.9527 0.2889 +vn 0.0938 -0.9527 0.2890 +vn 0.0938 -0.9527 0.2889 +vn 0.2779 -0.9161 0.2890 +vn 0.2779 -0.9161 0.2889 +vn 0.4513 -0.8443 0.2890 +vn 0.6073 -0.7400 0.2890 +vn 0.7400 -0.6073 0.2890 +vn 0.8443 -0.4513 0.2890 +vn 0.9161 -0.2779 0.2890 +vn 0.8786 0.0865 0.4697 +vn 0.8786 0.0866 0.4696 +vn 0.8448 0.2563 0.4697 +vn 0.8449 0.2563 0.4696 +vn 0.7786 0.4162 0.4696 +vn 0.6825 0.5601 0.4696 +vn 0.5601 0.6825 0.4696 +vn 0.4162 0.7786 0.4696 +vn 0.2563 0.8448 0.4697 +vn 0.2563 0.8449 0.4696 +vn 0.0865 0.8786 0.4697 +vn 0.0866 0.8786 0.4696 +vn -0.0865 0.8786 0.4697 +vn -0.0866 0.8786 0.4696 +vn -0.2563 0.8448 0.4697 +vn -0.2563 0.8449 0.4696 +vn -0.4162 0.7786 0.4696 +vn -0.5601 0.6825 0.4696 +vn -0.6825 0.5601 0.4696 +vn -0.7786 0.4162 0.4696 +vn -0.8448 0.2563 0.4697 +vn -0.8449 0.2563 0.4696 +vn -0.8786 0.0865 0.4697 +vn -0.8786 0.0866 0.4696 +vn -0.8786 -0.0865 0.4697 +vn -0.8786 -0.0866 0.4696 +vn -0.8448 -0.2563 0.4697 +vn -0.8449 -0.2563 0.4696 +vn -0.7786 -0.4162 0.4696 +vn -0.6825 -0.5601 0.4696 +vn -0.5601 -0.6825 0.4696 +vn -0.4162 -0.7786 0.4696 +vn -0.2563 -0.8448 0.4697 +vn -0.2563 -0.8449 0.4696 +vn -0.0865 -0.8786 0.4697 +vn -0.0866 -0.8786 0.4696 +vn 0.0865 -0.8786 0.4697 +vn 0.0866 -0.8786 0.4696 +vn 0.2563 -0.8448 0.4697 +vn 0.2563 -0.8449 0.4696 +vn 0.4162 -0.7786 0.4696 +vn 0.5601 -0.6825 0.4696 +vn 0.6825 -0.5601 0.4696 +vn 0.7786 -0.4162 0.4696 +vn 0.8448 -0.2563 0.4697 +vn 0.8449 -0.2563 0.4696 +vn 0.7708 0.0759 0.6326 +vn 0.7412 0.2248 0.6326 +vn 0.6831 0.3651 0.6326 +vn 0.6830 0.3651 0.6326 +vn 0.5987 0.4914 0.6326 +vn 0.5987 0.4913 0.6326 +vn 0.4914 0.5987 0.6326 +vn 0.4913 0.5987 0.6326 +vn 0.3651 0.6831 0.6326 +vn 0.3651 0.6830 0.6326 +vn 0.2248 0.7412 0.6326 +vn 0.0759 0.7707 0.6326 +vn 0.0759 0.7708 0.6326 +vn -0.0759 0.7707 0.6326 +vn -0.0759 0.7708 0.6326 +vn -0.2248 0.7412 0.6326 +vn -0.3651 0.6831 0.6326 +vn -0.3651 0.6830 0.6326 +vn -0.4914 0.5987 0.6326 +vn -0.4913 0.5987 0.6326 +vn -0.5987 0.4914 0.6326 +vn -0.5987 0.4913 0.6326 +vn -0.6831 0.3651 0.6326 +vn -0.6830 0.3651 0.6326 +vn -0.7412 0.2248 0.6326 +vn -0.7708 0.0759 0.6326 +vn -0.7708 -0.0759 0.6326 +vn -0.7412 -0.2248 0.6326 +vn -0.6831 -0.3651 0.6326 +vn -0.6830 -0.3651 0.6326 +vn -0.5987 -0.4914 0.6326 +vn -0.5987 -0.4913 0.6326 +vn -0.4914 -0.5987 0.6326 +vn -0.4913 -0.5987 0.6326 +vn -0.3651 -0.6831 0.6326 +vn -0.3651 -0.6830 0.6326 +vn -0.2248 -0.7412 0.6326 +vn -0.0759 -0.7707 0.6326 +vn -0.0759 -0.7708 0.6326 +vn 0.0759 -0.7707 0.6326 +vn 0.0759 -0.7708 0.6326 +vn 0.2248 -0.7412 0.6326 +vn 0.3651 -0.6831 0.6326 +vn 0.3651 -0.6830 0.6326 +vn 0.4914 -0.5987 0.6326 +vn 0.4913 -0.5987 0.6326 +vn 0.5987 -0.4914 0.6326 +vn 0.5987 -0.4913 0.6326 +vn 0.6831 -0.3651 0.6326 +vn 0.6830 -0.3651 0.6326 +vn 0.7412 -0.2248 0.6326 +vn 0.6332 0.0624 0.7715 +vn 0.6088 0.1847 0.7715 +vn 0.5611 0.2999 0.7715 +vn 0.4918 0.4036 0.7715 +vn 0.4036 0.4918 0.7715 +vn 0.2999 0.5611 0.7715 +vn 0.1847 0.6088 0.7715 +vn 0.0624 0.6332 0.7715 +vn -0.0624 0.6332 0.7715 +vn -0.1847 0.6088 0.7715 +vn -0.2999 0.5611 0.7715 +vn -0.4036 0.4918 0.7715 +vn -0.4918 0.4036 0.7715 +vn -0.5611 0.2999 0.7715 +vn -0.6088 0.1847 0.7715 +vn -0.6332 0.0624 0.7715 +vn -0.6332 -0.0624 0.7715 +vn -0.6088 -0.1847 0.7715 +vn -0.5611 -0.2999 0.7715 +vn -0.4918 -0.4036 0.7715 +vn -0.4036 -0.4918 0.7715 +vn -0.2999 -0.5611 0.7715 +vn -0.1847 -0.6088 0.7715 +vn -0.0624 -0.6332 0.7715 +vn 0.0624 -0.6332 0.7715 +vn 0.1847 -0.6088 0.7715 +vn 0.2999 -0.5611 0.7715 +vn 0.4036 -0.4918 0.7715 +vn 0.4918 -0.4036 0.7715 +vn 0.5611 -0.2999 0.7715 +vn 0.6088 -0.1847 0.7715 +vn 0.4709 0.0464 0.8810 +vn 0.4528 0.1374 0.8810 +vn 0.4173 0.2230 0.8810 +vn 0.3658 0.3002 0.8810 +vn 0.3657 0.3002 0.8810 +vn 0.3002 0.3658 0.8810 +vn 0.3002 0.3657 0.8810 +vn 0.2230 0.4173 0.8810 +vn 0.1374 0.4528 0.8810 +vn 0.0464 0.4709 0.8810 +vn -0.0464 0.4709 0.8810 +vn -0.1374 0.4528 0.8810 +vn -0.2230 0.4173 0.8810 +vn -0.3002 0.3658 0.8810 +vn -0.3002 0.3657 0.8810 +vn -0.3658 0.3002 0.8810 +vn -0.3657 0.3002 0.8810 +vn -0.4173 0.2230 0.8810 +vn -0.4528 0.1374 0.8810 +vn -0.4709 0.0464 0.8810 +vn -0.4709 -0.0464 0.8810 +vn -0.4528 -0.1374 0.8810 +vn -0.4173 -0.2230 0.8810 +vn -0.3658 -0.3002 0.8810 +vn -0.3002 -0.3658 0.8810 +vn -0.3002 -0.3657 0.8810 +vn -0.2230 -0.4173 0.8810 +vn -0.1374 -0.4528 0.8810 +vn -0.0464 -0.4709 0.8810 +vn 0.0464 -0.4709 0.8810 +vn 0.1374 -0.4528 0.8810 +vn 0.2230 -0.4173 0.8810 +vn 0.3002 -0.3658 0.8810 +vn 0.3658 -0.3002 0.8810 +vn 0.3657 -0.3002 0.8810 +vn 0.4173 -0.2230 0.8810 +vn 0.4528 -0.1374 0.8810 +vn 0.2901 0.0286 0.9566 +vn 0.2902 0.0286 0.9565 +vn 0.2790 0.0846 0.9566 +vn 0.2790 0.0846 0.9565 +vn 0.2571 0.1374 0.9566 +vn 0.2571 0.1374 0.9565 +vn 0.2254 0.1850 0.9566 +vn 0.1850 0.2254 0.9565 +vn 0.1850 0.2254 0.9566 +vn 0.1374 0.2571 0.9565 +vn 0.0846 0.2790 0.9566 +vn 0.0846 0.2790 0.9565 +vn 0.0286 0.2901 0.9566 +vn 0.0286 0.2902 0.9565 +vn -0.0286 0.2901 0.9566 +vn -0.0286 0.2902 0.9565 +vn -0.0846 0.2790 0.9566 +vn -0.0846 0.2790 0.9565 +vn -0.1374 0.2571 0.9565 +vn -0.1850 0.2254 0.9566 +vn -0.2254 0.1850 0.9566 +vn -0.2571 0.1374 0.9566 +vn -0.2571 0.1374 0.9565 +vn -0.2790 0.0846 0.9566 +vn -0.2901 0.0286 0.9566 +vn -0.2902 0.0286 0.9565 +vn -0.2901 -0.0286 0.9566 +vn -0.2902 -0.0286 0.9565 +vn -0.2790 -0.0846 0.9566 +vn -0.2790 -0.0846 0.9565 +vn -0.2571 -0.1374 0.9566 +vn -0.2571 -0.1374 0.9565 +vn -0.2254 -0.1850 0.9566 +vn -0.2254 -0.1850 0.9565 +vn -0.1850 -0.2254 0.9565 +vn -0.1850 -0.2254 0.9566 +vn -0.1374 -0.2571 0.9566 +vn -0.1374 -0.2571 0.9565 +vn -0.0846 -0.2790 0.9566 +vn -0.0846 -0.2790 0.9565 +vn -0.0286 -0.2901 0.9566 +vn -0.0286 -0.2902 0.9565 +vn 0.0286 -0.2901 0.9566 +vn 0.0286 -0.2902 0.9565 +vn 0.0846 -0.2790 0.9566 +vn 0.0846 -0.2790 0.9565 +vn 0.1374 -0.2571 0.9566 +vn 0.1374 -0.2571 0.9565 +vn 0.1850 -0.2254 0.9566 +vn 0.2254 -0.1850 0.9566 +vn 0.2254 -0.1850 0.9565 +vn 0.2571 -0.1374 0.9566 +vn 0.2790 -0.0846 0.9566 +vn 0.2790 -0.0846 0.9565 +vn 0.0980 0.0097 0.9951 +vn 0.0942 0.0286 0.9951 +vn 0.0943 0.0286 0.9951 +vn 0.0869 0.0464 0.9951 +vn 0.0761 0.0625 0.9951 +vn 0.0625 0.0761 0.9951 +vn 0.0464 0.0869 0.9951 +vn 0.0286 0.0942 0.9951 +vn 0.0097 0.0980 0.9951 +vn -0.0097 0.0980 0.9951 +vn -0.0286 0.0942 0.9951 +vn -0.0464 0.0869 0.9951 +vn -0.0625 0.0761 0.9951 +vn -0.0761 0.0625 0.9951 +vn -0.0869 0.0464 0.9951 +vn -0.0942 0.0286 0.9951 +vn -0.0943 0.0286 0.9951 +vn -0.0980 0.0097 0.9951 +vn -0.0980 -0.0097 0.9951 +vn -0.0942 -0.0286 0.9951 +vn -0.0943 -0.0286 0.9951 +vn -0.0869 -0.0464 0.9951 +vn -0.0761 -0.0625 0.9951 +vn -0.0625 -0.0761 0.9951 +vn -0.0464 -0.0869 0.9951 +vn -0.0286 -0.0942 0.9951 +vn -0.0286 -0.0943 0.9951 +vn -0.0097 -0.0980 0.9951 +vn 0.0097 -0.0980 0.9951 +vn 0.0286 -0.0942 0.9951 +vn 0.0464 -0.0869 0.9951 +vn 0.0625 -0.0761 0.9951 +vn 0.0761 -0.0625 0.9951 +vn 0.0869 -0.0464 0.9951 +vn 0.0942 -0.0286 0.9951 +vn 0.0980 -0.0097 0.9951 +vn -0.2902 -0.0286 0.9566 +vn -0.0286 -0.2902 0.9566 +vn 0.0286 -0.2902 0.9566 +vn 0.2902 -0.0286 0.9566 +vn 0.2902 0.0286 0.9566 +vn 0.1374 0.2571 0.9566 +vn 0.0286 0.2902 0.9566 +vn -0.0286 0.2902 0.9566 +vn -0.1374 0.2571 0.9566 +vn -0.1850 0.2254 0.9565 +vn -0.4173 -0.2231 0.8810 +vn -0.2231 -0.4173 0.8810 +vn 0.2231 -0.4173 0.8810 +vn 0.4173 -0.2231 0.8810 +vn 0.4709 -0.0464 0.8810 +vn 0.4173 0.2231 0.8810 +vn 0.2231 0.4173 0.8810 +vn -0.2231 0.4173 0.8810 +vn -0.4173 0.2231 0.8810 +vn 0.6332 -0.0624 0.7715 +vn 0.7708 -0.0759 0.6326 +vn -0.8786 -0.0865 0.4696 +vn -0.8448 -0.2563 0.4696 +vn -0.2563 -0.8448 0.4696 +vn -0.0865 -0.8786 0.4696 +vn 0.0865 -0.8786 0.4696 +vn 0.2563 -0.8448 0.4696 +vn 0.8448 -0.2563 0.4696 +vn 0.8786 -0.0865 0.4696 +vn 0.8786 0.0865 0.4696 +vn 0.8448 0.2563 0.4696 +vn 0.2563 0.8448 0.4696 +vn 0.0865 0.8786 0.4696 +vn -0.0865 0.8786 0.4696 +vn -0.2563 0.8448 0.4696 +vn -0.8448 0.2563 0.4696 +vn 0.9527 -0.0938 0.2890 +vn -0.9904 -0.0976 0.0976 +vn -0.9904 -0.0976 0.0975 +vn -0.8777 -0.4692 0.0975 +vn -0.7693 -0.6314 0.0976 +vn -0.6314 -0.7693 0.0976 +vn -0.4692 -0.8777 0.0975 +vn -0.0976 -0.9904 0.0976 +vn -0.0976 -0.9904 0.0975 +vn 0.0976 -0.9904 0.0976 +vn 0.0976 -0.9904 0.0975 +vn 0.4692 -0.8777 0.0975 +vn 0.6314 -0.7693 0.0976 +vn 0.7693 -0.6314 0.0976 +vn 0.8777 -0.4692 0.0976 +vn 0.9904 -0.0976 0.0976 +vn 0.9904 -0.0976 0.0975 +vn 0.9904 0.0976 0.0976 +vn 0.9904 0.0976 0.0975 +vn 0.8777 0.4692 0.0975 +vn 0.7693 0.6314 0.0976 +vn 0.6314 0.7693 0.0976 +vn 0.4692 0.8777 0.0975 +vn 0.0976 0.9904 0.0976 +vn 0.0976 0.9904 0.0975 +vn -0.0976 0.9904 0.0976 +vn -0.0976 0.9904 0.0975 +vn -0.4692 0.8777 0.0975 +vn -0.6314 0.7693 0.0976 +vn -0.7693 0.6314 0.0976 +vn -0.8777 0.4692 0.0976 +vn -0.9904 -0.0976 -0.0975 +vn -0.9904 -0.0976 -0.0976 +vn -0.9524 -0.2889 -0.0975 +vn -0.9524 -0.2889 -0.0976 +vn -0.8777 -0.4691 -0.0975 +vn -0.8777 -0.4692 -0.0975 +vn -0.7693 -0.6314 -0.0975 +vn -0.7693 -0.6314 -0.0976 +vn -0.6314 -0.7693 -0.0975 +vn -0.6314 -0.7693 -0.0976 +vn -0.4691 -0.8777 -0.0975 +vn -0.4692 -0.8777 -0.0975 +vn -0.2889 -0.9524 -0.0975 +vn -0.2889 -0.9524 -0.0976 +vn -0.0976 -0.9904 -0.0975 +vn -0.0976 -0.9904 -0.0976 +vn 0.0976 -0.9904 -0.0975 +vn 0.0976 -0.9904 -0.0976 +vn 0.2889 -0.9524 -0.0975 +vn 0.2889 -0.9524 -0.0976 +vn 0.4691 -0.8777 -0.0975 +vn 0.4692 -0.8777 -0.0975 +vn 0.6314 -0.7693 -0.0975 +vn 0.6314 -0.7693 -0.0976 +vn 0.7693 -0.6314 -0.0975 +vn 0.7693 -0.6314 -0.0976 +vn 0.8777 -0.4691 -0.0975 +vn 0.8777 -0.4692 -0.0975 +vn 0.9524 -0.2889 -0.0975 +vn 0.9524 -0.2889 -0.0976 +vn 0.9904 -0.0976 -0.0975 +vn 0.9904 -0.0976 -0.0976 +vn 0.9904 0.0976 -0.0975 +vn 0.9904 0.0976 -0.0976 +vn 0.9524 0.2889 -0.0975 +vn 0.9524 0.2889 -0.0976 +vn 0.8777 0.4691 -0.0975 +vn 0.8777 0.4692 -0.0975 +vn 0.7693 0.6314 -0.0975 +vn 0.7693 0.6314 -0.0976 +vn 0.6314 0.7693 -0.0975 +vn 0.6314 0.7693 -0.0976 +vn 0.4691 0.8777 -0.0975 +vn 0.4692 0.8777 -0.0975 +vn 0.2889 0.9524 -0.0975 +vn 0.2889 0.9524 -0.0976 +vn 0.0976 0.9904 -0.0975 +vn 0.0976 0.9904 -0.0976 +vn -0.0976 0.9904 -0.0975 +vn -0.0976 0.9904 -0.0976 +vn -0.2889 0.9524 -0.0975 +vn -0.2889 0.9524 -0.0976 +vn -0.4691 0.8777 -0.0975 +vn -0.4692 0.8777 -0.0975 +vn -0.6314 0.7693 -0.0975 +vn -0.6314 0.7693 -0.0976 +vn -0.7693 0.6314 -0.0975 +vn -0.7693 0.6314 -0.0976 +vn -0.8777 0.4691 -0.0975 +vn -0.8777 0.4692 -0.0975 +vn -0.9524 0.2889 -0.0975 +vn -0.9524 0.2889 -0.0976 +vn -0.9527 -0.0938 -0.2890 +vn -0.9161 -0.2779 -0.2890 +vn -0.8443 -0.4513 -0.2890 +vn -0.7400 -0.6073 -0.2890 +vn -0.6073 -0.7400 -0.2890 +vn -0.4513 -0.8443 -0.2890 +vn -0.2779 -0.9161 -0.2890 +vn -0.0938 -0.9527 -0.2890 +vn 0.0938 -0.9527 -0.2890 +vn 0.2779 -0.9161 -0.2890 +vn 0.4513 -0.8443 -0.2890 +vn 0.6073 -0.7400 -0.2890 +vn 0.7400 -0.6073 -0.2890 +vn 0.8443 -0.4513 -0.2890 +vn 0.9161 -0.2779 -0.2890 +vn 0.9527 -0.0938 -0.2890 +vn 0.9527 0.0938 -0.2890 +vn 0.9161 0.2779 -0.2890 +vn 0.8443 0.4513 -0.2890 +vn 0.7400 0.6073 -0.2890 +vn 0.6073 0.7400 -0.2890 +vn 0.4513 0.8443 -0.2890 +vn 0.2779 0.9161 -0.2890 +vn 0.0938 0.9527 -0.2890 +vn -0.0938 0.9527 -0.2890 +vn -0.2779 0.9161 -0.2890 +vn -0.4513 0.8443 -0.2890 +vn -0.6073 0.7400 -0.2890 +vn -0.7400 0.6073 -0.2890 +vn -0.8443 0.4513 -0.2890 +vn -0.9161 0.2779 -0.2890 +vn -0.8786 -0.0865 -0.4696 +vn -0.8448 -0.2563 -0.4696 +vn -0.7786 -0.4162 -0.4696 +vn -0.6825 -0.5601 -0.4696 +vn -0.5601 -0.6825 -0.4696 +vn -0.4162 -0.7786 -0.4696 +vn -0.2563 -0.8448 -0.4696 +vn -0.0865 -0.8786 -0.4696 +vn 0.0865 -0.8786 -0.4696 +vn 0.2563 -0.8448 -0.4696 +vn 0.4162 -0.7786 -0.4696 +vn 0.5601 -0.6825 -0.4696 +vn 0.6825 -0.5601 -0.4696 +vn 0.7786 -0.4162 -0.4696 +vn 0.8448 -0.2563 -0.4696 +vn 0.8786 -0.0865 -0.4696 +vn 0.8786 0.0865 -0.4696 +vn 0.8448 0.2563 -0.4696 +vn 0.7786 0.4162 -0.4696 +vn 0.6825 0.5601 -0.4696 +vn 0.5601 0.6825 -0.4696 +vn 0.4162 0.7786 -0.4696 +vn 0.2563 0.8448 -0.4696 +vn 0.0865 0.8786 -0.4696 +vn -0.0865 0.8786 -0.4696 +vn -0.2563 0.8448 -0.4696 +vn -0.4162 0.7786 -0.4696 +vn -0.5601 0.6825 -0.4696 +vn -0.6825 0.5601 -0.4696 +vn -0.7786 0.4162 -0.4696 +vn -0.8448 0.2563 -0.4696 +vn -0.7708 -0.0759 -0.6326 +vn -0.7412 -0.2248 -0.6326 +vn -0.6831 -0.3651 -0.6326 +vn -0.5987 -0.4913 -0.6326 +vn -0.4913 -0.5987 -0.6326 +vn -0.3651 -0.6831 -0.6326 +vn -0.2248 -0.7412 -0.6326 +vn -0.0759 -0.7708 -0.6326 +vn 0.0759 -0.7708 -0.6326 +vn 0.2248 -0.7412 -0.6326 +vn 0.3651 -0.6831 -0.6326 +vn 0.4913 -0.5987 -0.6326 +vn 0.5987 -0.4913 -0.6326 +vn 0.6831 -0.3651 -0.6326 +vn 0.7412 -0.2248 -0.6326 +vn 0.7708 -0.0759 -0.6326 +vn 0.7708 0.0759 -0.6326 +vn 0.7412 0.2248 -0.6326 +vn 0.6831 0.3651 -0.6326 +vn 0.5987 0.4913 -0.6326 +vn 0.4913 0.5987 -0.6326 +vn 0.3651 0.6831 -0.6326 +vn 0.2248 0.7412 -0.6326 +vn 0.0759 0.7708 -0.6326 +vn -0.0759 0.7708 -0.6326 +vn -0.2248 0.7412 -0.6326 +vn -0.3651 0.6831 -0.6326 +vn -0.4913 0.5987 -0.6326 +vn -0.5987 0.4913 -0.6326 +vn -0.6831 0.3651 -0.6326 +vn -0.7412 0.2248 -0.6326 +vn -0.6332 -0.0624 -0.7715 +vn -0.6088 -0.1847 -0.7715 +vn -0.5611 -0.2999 -0.7715 +vn -0.4918 -0.4036 -0.7715 +vn -0.4036 -0.4918 -0.7715 +vn -0.2999 -0.5611 -0.7715 +vn -0.1847 -0.6088 -0.7715 +vn -0.0624 -0.6332 -0.7715 +vn 0.0624 -0.6332 -0.7715 +vn 0.1847 -0.6088 -0.7715 +vn 0.2999 -0.5611 -0.7715 +vn 0.4036 -0.4918 -0.7715 +vn 0.4918 -0.4036 -0.7715 +vn 0.5611 -0.2999 -0.7715 +vn 0.6088 -0.1847 -0.7715 +vn 0.6332 -0.0624 -0.7715 +vn 0.6332 0.0624 -0.7715 +vn 0.6088 0.1847 -0.7715 +vn 0.5611 0.2999 -0.7715 +vn 0.4918 0.4036 -0.7715 +vn 0.4036 0.4918 -0.7715 +vn 0.2999 0.5611 -0.7715 +vn 0.1847 0.6088 -0.7715 +vn 0.0624 0.6332 -0.7715 +vn -0.0624 0.6332 -0.7715 +vn -0.1847 0.6088 -0.7715 +vn -0.2999 0.5611 -0.7715 +vn -0.4036 0.4918 -0.7715 +vn -0.4918 0.4036 -0.7715 +vn -0.5611 0.2999 -0.7715 +vn -0.6088 0.1847 -0.7715 +vn -0.4709 -0.0464 -0.8810 +vn -0.4528 -0.1374 -0.8810 +vn -0.4173 -0.2231 -0.8810 +vn -0.3658 -0.3002 -0.8810 +vn -0.3002 -0.3658 -0.8810 +vn -0.2230 -0.4173 -0.8810 +vn -0.1374 -0.4528 -0.8810 +vn -0.0464 -0.4709 -0.8810 +vn 0.0464 -0.4709 -0.8810 +vn 0.1374 -0.4528 -0.8810 +vn 0.2231 -0.4173 -0.8810 +vn 0.2230 -0.4173 -0.8810 +vn 0.3002 -0.3658 -0.8810 +vn 0.3658 -0.3002 -0.8810 +vn 0.4173 -0.2230 -0.8810 +vn 0.4173 -0.2231 -0.8810 +vn 0.4528 -0.1374 -0.8810 +vn 0.4709 -0.0464 -0.8810 +vn 0.4709 0.0464 -0.8810 +vn 0.4528 0.1374 -0.8810 +vn 0.4173 0.2231 -0.8810 +vn 0.3658 0.3002 -0.8810 +vn 0.3002 0.3658 -0.8810 +vn 0.2230 0.4173 -0.8810 +vn 0.1374 0.4528 -0.8810 +vn 0.0464 0.4709 -0.8810 +vn -0.0464 0.4709 -0.8810 +vn -0.1374 0.4528 -0.8810 +vn -0.2231 0.4173 -0.8810 +vn -0.2230 0.4173 -0.8810 +vn -0.3002 0.3658 -0.8810 +vn -0.3658 0.3002 -0.8810 +vn -0.4173 0.2230 -0.8810 +vn -0.4173 0.2231 -0.8810 +vn -0.4528 0.1374 -0.8810 +vn -0.2902 -0.0286 -0.9566 +vn -0.2790 -0.0846 -0.9566 +vn -0.2571 -0.1374 -0.9566 +vn -0.2254 -0.1850 -0.9566 +vn -0.1850 -0.2254 -0.9566 +vn -0.1850 -0.2254 -0.9565 +vn -0.1374 -0.2571 -0.9566 +vn -0.0846 -0.2790 -0.9566 +vn -0.0286 -0.2902 -0.9566 +vn 0.0286 -0.2902 -0.9566 +vn 0.0846 -0.2790 -0.9566 +vn 0.1374 -0.2571 -0.9566 +vn 0.1850 -0.2254 -0.9566 +vn 0.1850 -0.2254 -0.9565 +vn 0.2254 -0.1850 -0.9566 +vn 0.2571 -0.1374 -0.9566 +vn 0.2790 -0.0846 -0.9566 +vn 0.2902 -0.0286 -0.9566 +vn 0.2902 0.0286 -0.9566 +vn 0.2790 0.0846 -0.9566 +vn 0.2571 0.1374 -0.9566 +vn 0.2254 0.1850 -0.9566 +vn 0.1850 0.2254 -0.9566 +vn 0.1374 0.2571 -0.9566 +vn 0.0846 0.2790 -0.9566 +vn 0.0286 0.2902 -0.9566 +vn -0.0286 0.2902 -0.9566 +vn -0.0846 0.2790 -0.9566 +vn -0.1374 0.2571 -0.9566 +vn -0.1850 0.2254 -0.9566 +vn -0.2254 0.1850 -0.9566 +vn -0.2571 0.1374 -0.9566 +vn -0.2790 0.0846 -0.9566 +vn -0.0980 -0.0097 -0.9951 +vn -0.0942 -0.0286 -0.9951 +vn -0.0869 -0.0464 -0.9951 +vn -0.0761 -0.0625 -0.9951 +vn -0.0625 -0.0761 -0.9951 +vn -0.0464 -0.0869 -0.9951 +vn -0.0286 -0.0942 -0.9951 +vn -0.0097 -0.0980 -0.9951 +vn 0.0097 -0.0980 -0.9951 +vn 0.0286 -0.0942 -0.9951 +vn 0.0464 -0.0869 -0.9951 +vn 0.0625 -0.0761 -0.9951 +vn 0.0761 -0.0625 -0.9951 +vn 0.0869 -0.0464 -0.9951 +vn 0.0942 -0.0286 -0.9951 +vn 0.0980 -0.0097 -0.9951 +vn 0.0980 0.0097 -0.9951 +vn 0.0942 0.0286 -0.9951 +vn 0.0869 0.0464 -0.9951 +vn 0.0761 0.0625 -0.9951 +vn 0.0625 0.0761 -0.9951 +vn 0.0464 0.0869 -0.9951 +vn 0.0286 0.0942 -0.9951 +vn 0.0097 0.0980 -0.9951 +vn -0.0097 0.0980 -0.9951 +vn -0.0286 0.0942 -0.9951 +vn -0.0464 0.0869 -0.9951 +vn -0.0625 0.0761 -0.9951 +vn -0.0761 0.0625 -0.9951 +vn -0.0869 0.0464 -0.9951 +vn -0.0942 0.0286 -0.9951 +vn 0.0943 0.0286 -0.9951 +vn -0.0980 0.0097 -0.9951 +vn -0.0943 -0.0286 -0.9951 +vn 0.2902 0.0286 -0.9565 +vn 0.2901 0.0286 -0.9566 +vn 0.2790 0.0846 -0.9565 +vn 0.2254 0.1850 -0.9565 +vn 0.1850 0.2254 -0.9565 +vn 0.1374 0.2571 -0.9565 +vn 0.0846 0.2790 -0.9565 +vn 0.0286 0.2902 -0.9565 +vn 0.0286 0.2901 -0.9566 +vn -0.0286 0.2902 -0.9565 +vn -0.0286 0.2901 -0.9566 +vn -0.0846 0.2790 -0.9565 +vn -0.1374 0.2571 -0.9565 +vn -0.1850 0.2254 -0.9565 +vn -0.2254 0.1850 -0.9565 +vn -0.2790 0.0846 -0.9565 +vn -0.2902 0.0286 -0.9565 +vn -0.2901 0.0286 -0.9566 +vn -0.2902 -0.0286 -0.9565 +vn -0.2901 -0.0286 -0.9566 +vn -0.1374 -0.2571 -0.9565 +vn -0.0846 -0.2790 -0.9565 +vn -0.0286 -0.2902 -0.9565 +vn -0.0286 -0.2901 -0.9566 +vn 0.0286 -0.2902 -0.9565 +vn 0.0286 -0.2901 -0.9566 +vn 0.1374 -0.2571 -0.9565 +vn 0.2571 -0.1374 -0.9565 +vn 0.4173 0.2230 -0.8810 +vn 0.3657 0.3002 -0.8810 +vn 0.3002 0.3657 -0.8810 +vn -0.3002 0.3657 -0.8810 +vn -0.3657 0.3002 -0.8810 +vn -0.4709 0.0464 -0.8810 +vn -0.4173 -0.2230 -0.8810 +vn -0.3002 -0.3657 -0.8810 +vn 0.3002 -0.3657 -0.8810 +vn 0.3657 -0.3002 -0.8810 +vn -0.6332 0.0624 -0.7715 +vn 0.6830 0.3651 -0.6326 +vn 0.5987 0.4914 -0.6326 +vn 0.4914 0.5987 -0.6326 +vn 0.3651 0.6830 -0.6326 +vn 0.0759 0.7707 -0.6326 +vn -0.0759 0.7707 -0.6326 +vn -0.3651 0.6830 -0.6326 +vn -0.4914 0.5987 -0.6326 +vn -0.5987 0.4914 -0.6326 +vn -0.6830 0.3651 -0.6326 +vn -0.7708 0.0759 -0.6326 +vn -0.6830 -0.3651 -0.6326 +vn -0.5987 -0.4914 -0.6326 +vn -0.4914 -0.5987 -0.6326 +vn -0.3651 -0.6830 -0.6326 +vn -0.0759 -0.7707 -0.6326 +vn 0.0759 -0.7707 -0.6326 +vn 0.3651 -0.6830 -0.6326 +vn 0.4914 -0.5987 -0.6326 +vn 0.5987 -0.4914 -0.6326 +vn 0.6830 -0.3651 -0.6326 +vn 0.8786 0.0866 -0.4696 +vn 0.8786 0.0865 -0.4697 +vn 0.8449 0.2563 -0.4696 +vn 0.8448 0.2563 -0.4697 +vn 0.2563 0.8449 -0.4696 +vn 0.2563 0.8448 -0.4697 +vn 0.0866 0.8786 -0.4696 +vn 0.0865 0.8786 -0.4697 +vn -0.0866 0.8786 -0.4696 +vn -0.0865 0.8786 -0.4697 +vn -0.2563 0.8449 -0.4696 +vn -0.2563 0.8448 -0.4697 +vn -0.8449 0.2563 -0.4696 +vn -0.8448 0.2563 -0.4697 +vn -0.8786 0.0866 -0.4696 +vn -0.8786 0.0865 -0.4697 +vn -0.8786 -0.0866 -0.4696 +vn -0.8786 -0.0865 -0.4697 +vn -0.8449 -0.2563 -0.4696 +vn -0.8448 -0.2563 -0.4697 +vn -0.2563 -0.8449 -0.4696 +vn -0.2563 -0.8448 -0.4697 +vn -0.0866 -0.8786 -0.4696 +vn -0.0865 -0.8786 -0.4697 +vn 0.0866 -0.8786 -0.4696 +vn 0.0865 -0.8786 -0.4697 +vn 0.2563 -0.8449 -0.4696 +vn 0.2563 -0.8448 -0.4697 +vn 0.8449 -0.2563 -0.4696 +vn 0.8448 -0.2563 -0.4697 +vn 0.9527 0.0938 -0.2889 +vn 0.2779 0.9161 -0.2889 +vn 0.0938 0.9527 -0.2889 +vn -0.0938 0.9527 -0.2889 +vn -0.2779 0.9161 -0.2889 +vn -0.9527 0.0938 -0.2889 +vn -0.9527 0.0938 -0.2890 +vn -0.9527 -0.0938 -0.2889 +vn -0.2779 -0.9161 -0.2889 +vn -0.0938 -0.9527 -0.2889 +vn 0.0938 -0.9527 -0.2889 +vn 0.2779 -0.9161 -0.2889 +vn 0.9904 0.0975 -0.0976 +vn 0.0975 0.9904 -0.0976 +vn -0.0975 0.9904 -0.0976 +vn -0.9904 0.0975 -0.0976 +vn -0.9904 -0.0975 -0.0976 +vn -0.0975 -0.9904 -0.0976 +vn 0.0975 -0.9904 -0.0976 +vn 0.9904 -0.0975 0.0976 +vn 0.9527 -0.0938 0.2889 +vn 0.8786 -0.0865 0.4697 +vn 0.2902 -0.0286 0.9565 +vn 0.2901 -0.0286 0.9566 +vn -0.2902 0.0286 0.9566 +vn -0.8786 0.0865 0.4696 +vn -0.9904 0.0976 0.0976 +vn -0.9904 0.0976 0.0975 +vn -0.9904 0.0976 -0.0976 +vn -0.9904 0.0976 -0.0975 +vn -0.8786 0.0865 -0.4696 +vn -0.2902 0.0286 -0.9566 +vn 0.2902 -0.0286 -0.9565 +vn 0.2901 -0.0286 -0.9566 +vn 0.8786 -0.0866 -0.4696 +vn 0.8786 -0.0865 -0.4697 +vn 0.9527 -0.0938 -0.2889 +vn 0.9904 -0.0975 -0.0976 +usemtl None +s off +f 1//1 2//1 3//1 +f 1//1 3//1 4//1 +f 2//2 5//2 3//2 +f 5//3 6//3 3//3 +f 5//4 7//4 8//4 +f 5//4 8//4 6//4 +f 7//5 9//5 8//5 +f 9//5 10//5 8//5 +f 9//6 11//6 12//6 +f 9//6 12//6 10//6 +f 11//7 13//7 12//7 +f 13//7 14//7 12//7 +f 13//8 15//8 16//8 +f 13//9 16//9 14//9 +f 15//10 17//10 16//10 +f 17//10 18//10 16//10 +f 17//11 19//11 20//11 +f 17//11 20//11 18//11 +f 19//12 21//12 20//12 +f 21//13 22//13 20//13 +f 21//14 23//14 24//14 +f 21//14 24//14 22//14 +f 23//15 25//15 24//15 +f 25//15 26//15 24//15 +f 25//16 27//16 28//16 +f 25//16 28//16 26//16 +f 27//17 29//17 28//17 +f 29//17 30//17 28//17 +f 29//18 31//18 32//18 +f 29//19 32//19 30//19 +f 31//20 33//20 32//20 +f 33//20 34//20 32//20 +f 33//21 35//21 36//21 +f 33//21 36//21 34//21 +f 35//22 37//22 36//22 +f 37//23 38//23 36//23 +f 37//24 39//24 40//24 +f 37//24 40//24 38//24 +f 39//25 41//25 40//25 +f 41//25 42//25 40//25 +f 41//26 43//26 44//26 +f 41//26 44//26 42//26 +f 43//27 45//27 44//27 +f 45//27 46//27 44//27 +f 45//28 47//28 48//28 +f 45//29 48//29 46//29 +f 47//30 49//30 48//30 +f 49//30 50//30 48//30 +f 49//31 51//31 52//31 +f 49//31 52//31 50//31 +f 51//32 53//32 52//32 +f 53//33 54//33 52//33 +f 53//34 55//34 56//34 +f 53//34 56//34 54//34 +f 55//35 57//35 56//35 +f 57//35 58//35 56//35 +f 57//36 59//36 60//36 +f 57//36 60//36 58//36 +f 59//37 61//37 60//37 +f 61//37 62//37 60//37 +f 61//38 63//38 64//38 +f 61//39 64//39 62//39 +f 4//40 3//40 65//40 +f 3//41 66//41 65//41 +f 3//42 6//42 67//42 +f 3//42 67//42 66//42 +f 6//43 8//43 67//43 +f 8//43 68//43 67//43 +f 8//44 10//44 69//44 +f 8//44 69//44 68//44 +f 10//45 12//45 69//45 +f 12//45 70//45 69//45 +f 12//46 14//46 71//46 +f 12//46 71//46 70//46 +f 14//47 16//47 71//47 +f 16//48 72//48 71//48 +f 16//49 18//49 73//49 +f 16//50 73//50 72//50 +f 18//51 20//51 73//51 +f 20//52 74//52 73//52 +f 20//53 22//53 75//53 +f 20//54 75//54 74//54 +f 22//55 24//55 75//55 +f 24//55 76//55 75//55 +f 24//56 26//56 77//56 +f 24//56 77//56 76//56 +f 26//57 28//57 77//57 +f 28//57 78//57 77//57 +f 28//58 30//58 79//58 +f 28//58 79//58 78//58 +f 30//59 32//59 79//59 +f 32//59 80//59 79//59 +f 32//60 34//60 81//60 +f 32//61 81//61 80//61 +f 34//62 36//62 81//62 +f 36//63 82//63 81//63 +f 36//64 38//64 83//64 +f 36//64 83//64 82//64 +f 38//65 40//65 83//65 +f 40//65 84//65 83//65 +f 40//66 42//66 85//66 +f 40//66 85//66 84//66 +f 42//67 44//67 85//67 +f 44//67 86//67 85//67 +f 44//68 46//68 87//68 +f 44//68 87//68 86//68 +f 46//69 48//69 87//69 +f 48//70 88//70 87//70 +f 48//71 50//71 89//71 +f 48//72 89//72 88//72 +f 50//73 52//73 89//73 +f 52//74 90//74 89//74 +f 52//75 54//75 91//75 +f 52//76 91//76 90//76 +f 54//77 56//77 91//77 +f 56//77 92//77 91//77 +f 56//78 58//78 93//78 +f 56//78 93//78 92//78 +f 58//79 60//79 93//79 +f 60//79 94//79 93//79 +f 60//80 62//80 95//80 +f 60//80 95//80 94//80 +f 62//81 64//81 95//81 +f 64//81 96//81 95//81 +f 65//82 66//82 97//82 +f 65//83 97//83 98//83 +f 66//84 67//84 97//84 +f 67//85 99//85 97//85 +f 67//86 68//86 100//86 +f 67//86 100//86 99//86 +f 68//87 69//87 100//87 +f 69//87 101//87 100//87 +f 69//88 70//88 102//88 +f 69//88 102//88 101//88 +f 70//89 71//89 102//89 +f 71//89 103//89 102//89 +f 71//90 72//90 104//90 +f 71//91 104//91 103//91 +f 72//92 73//92 104//92 +f 73//93 105//93 104//93 +f 73//94 74//94 106//94 +f 73//95 106//95 105//95 +f 74//96 75//96 106//96 +f 75//97 107//97 106//97 +f 75//98 76//98 108//98 +f 75//98 108//98 107//98 +f 76//99 77//99 108//99 +f 77//99 109//99 108//99 +f 77//100 78//100 110//100 +f 77//100 110//100 109//100 +f 78//101 79//101 110//101 +f 79//101 111//101 110//101 +f 79//102 80//102 112//102 +f 79//103 112//103 111//103 +f 80//104 81//104 112//104 +f 81//105 113//105 112//105 +f 81//106 82//106 114//106 +f 81//107 114//107 113//107 +f 82//108 83//108 114//108 +f 83//109 115//109 114//109 +f 83//110 84//110 116//110 +f 83//110 116//110 115//110 +f 84//111 85//111 116//111 +f 85//111 117//111 116//111 +f 85//112 86//112 118//112 +f 85//112 118//112 117//112 +f 86//113 87//113 118//113 +f 87//113 119//113 118//113 +f 87//114 88//114 120//114 +f 87//115 120//115 119//115 +f 88//116 89//116 120//116 +f 89//117 121//117 120//117 +f 89//118 90//118 122//118 +f 89//119 122//119 121//119 +f 90//120 91//120 122//120 +f 91//121 123//121 122//121 +f 91//122 92//122 124//122 +f 91//122 124//122 123//122 +f 92//123 93//123 124//123 +f 93//123 125//123 124//123 +f 93//124 94//124 126//124 +f 93//124 126//124 125//124 +f 94//125 95//125 126//125 +f 95//125 127//125 126//125 +f 95//126 96//126 128//126 +f 95//127 128//127 127//127 +f 98//128 97//128 129//128 +f 97//128 130//128 129//128 +f 97//129 99//129 131//129 +f 97//129 131//129 130//129 +f 99//130 100//130 131//130 +f 100//131 132//131 131//131 +f 100//132 101//132 133//132 +f 100//133 133//133 132//133 +f 101//134 102//134 133//134 +f 102//135 134//135 133//135 +f 102//136 103//136 135//136 +f 102//137 135//137 134//137 +f 103//138 104//138 135//138 +f 104//138 136//138 135//138 +f 104//139 105//139 137//139 +f 104//140 137//140 136//140 +f 105//141 106//141 137//141 +f 106//142 138//142 137//142 +f 106//143 107//143 139//143 +f 106//143 139//143 138//143 +f 107//144 108//144 139//144 +f 108//145 140//145 139//145 +f 108//146 109//146 141//146 +f 108//147 141//147 140//147 +f 109//148 110//148 141//148 +f 110//149 142//149 141//149 +f 110//150 111//150 143//150 +f 110//151 143//151 142//151 +f 111//152 112//152 143//152 +f 112//152 144//152 143//152 +f 112//153 113//153 145//153 +f 112//153 145//153 144//153 +f 113//154 114//154 145//154 +f 114//154 146//154 145//154 +f 114//155 115//155 147//155 +f 114//155 147//155 146//155 +f 115//156 116//156 147//156 +f 116//157 148//157 147//157 +f 116//158 117//158 149//158 +f 116//159 149//159 148//159 +f 117//160 118//160 149//160 +f 118//161 150//161 149//161 +f 118//162 119//162 151//162 +f 118//163 151//163 150//163 +f 119//164 120//164 151//164 +f 120//164 152//164 151//164 +f 120//165 121//165 153//165 +f 120//166 153//166 152//166 +f 121//167 122//167 153//167 +f 122//168 154//168 153//168 +f 122//169 123//169 155//169 +f 122//169 155//169 154//169 +f 123//170 124//170 155//170 +f 124//171 156//171 155//171 +f 124//172 125//172 157//172 +f 124//173 157//173 156//173 +f 125//174 126//174 157//174 +f 126//175 158//175 157//175 +f 126//176 127//176 159//176 +f 126//177 159//177 158//177 +f 127//178 128//178 159//178 +f 128//178 160//178 159//178 +f 129//179 130//179 161//179 +f 129//179 161//179 162//179 +f 130//180 131//180 161//180 +f 131//180 163//180 161//180 +f 131//181 132//181 164//181 +f 131//181 164//181 163//181 +f 132//182 133//182 164//182 +f 133//182 165//182 164//182 +f 133//183 134//183 166//183 +f 133//183 166//183 165//183 +f 134//184 135//184 166//184 +f 135//184 167//184 166//184 +f 135//185 136//185 168//185 +f 135//185 168//185 167//185 +f 136//186 137//186 168//186 +f 137//186 169//186 168//186 +f 137//187 138//187 170//187 +f 137//187 170//187 169//187 +f 138//188 139//188 170//188 +f 139//188 171//188 170//188 +f 139//189 140//189 172//189 +f 139//189 172//189 171//189 +f 140//190 141//190 172//190 +f 141//190 173//190 172//190 +f 141//191 142//191 174//191 +f 141//191 174//191 173//191 +f 142//192 143//192 174//192 +f 143//192 175//192 174//192 +f 143//193 144//193 176//193 +f 143//193 176//193 175//193 +f 144//194 145//194 176//194 +f 145//194 177//194 176//194 +f 145//195 146//195 178//195 +f 145//195 178//195 177//195 +f 146//196 147//196 178//196 +f 147//196 179//196 178//196 +f 147//197 148//197 180//197 +f 147//197 180//197 179//197 +f 148//198 149//198 180//198 +f 149//198 181//198 180//198 +f 149//199 150//199 182//199 +f 149//199 182//199 181//199 +f 150//200 151//200 182//200 +f 151//200 183//200 182//200 +f 151//201 152//201 184//201 +f 151//201 184//201 183//201 +f 152//202 153//202 184//202 +f 153//202 185//202 184//202 +f 153//203 154//203 186//203 +f 153//203 186//203 185//203 +f 154//204 155//204 186//204 +f 155//204 187//204 186//204 +f 155//205 156//205 188//205 +f 155//205 188//205 187//205 +f 156//206 157//206 188//206 +f 157//206 189//206 188//206 +f 157//207 158//207 190//207 +f 157//207 190//207 189//207 +f 158//208 159//208 190//208 +f 159//208 191//208 190//208 +f 159//209 160//209 192//209 +f 159//209 192//209 191//209 +f 162//210 161//210 193//210 +f 161//210 194//210 193//210 +f 161//211 163//211 195//211 +f 161//211 195//211 194//211 +f 163//212 164//212 195//212 +f 164//212 196//212 195//212 +f 164//213 165//213 197//213 +f 164//214 197//214 196//214 +f 165//215 166//215 197//215 +f 166//216 198//216 197//216 +f 166//217 167//217 199//217 +f 166//217 199//217 198//217 +f 167//218 168//218 199//218 +f 168//218 200//218 199//218 +f 168//219 169//219 201//219 +f 168//219 201//219 200//219 +f 169//220 170//220 201//220 +f 170//220 202//220 201//220 +f 170//221 171//221 203//221 +f 170//221 203//221 202//221 +f 171//222 172//222 203//222 +f 172//222 204//222 203//222 +f 172//223 173//223 205//223 +f 172//224 205//224 204//224 +f 173//225 174//225 205//225 +f 174//226 206//226 205//226 +f 174//227 175//227 207//227 +f 174//227 207//227 206//227 +f 175//228 176//228 207//228 +f 176//228 208//228 207//228 +f 176//229 177//229 209//229 +f 176//229 209//229 208//229 +f 177//230 178//230 209//230 +f 178//230 210//230 209//230 +f 178//231 179//231 211//231 +f 178//231 211//231 210//231 +f 179//232 180//232 211//232 +f 180//232 212//232 211//232 +f 180//233 181//233 213//233 +f 180//233 213//233 212//233 +f 181//234 182//234 213//234 +f 182//235 214//235 213//235 +f 182//236 183//236 215//236 +f 182//236 215//236 214//236 +f 183//237 184//237 215//237 +f 184//237 216//237 215//237 +f 184//238 185//238 217//238 +f 184//238 217//238 216//238 +f 185//239 186//239 217//239 +f 186//239 218//239 217//239 +f 186//240 187//240 219//240 +f 186//240 219//240 218//240 +f 187//241 188//241 219//241 +f 188//241 220//241 219//241 +f 188//242 189//242 221//242 +f 188//242 221//242 220//242 +f 189//243 190//243 221//243 +f 190//244 222//244 221//244 +f 190//245 191//245 223//245 +f 190//245 223//245 222//245 +f 191//246 192//246 223//246 +f 192//246 224//246 223//246 +f 193//247 194//247 225//247 +f 193//248 225//248 226//248 +f 194//249 195//249 225//249 +f 195//250 227//250 225//250 +f 195//251 196//251 228//251 +f 195//252 228//252 227//252 +f 196//253 197//253 228//253 +f 197//253 229//253 228//253 +f 197//254 198//254 230//254 +f 197//255 230//255 229//255 +f 198//256 199//256 230//256 +f 199//256 231//256 230//256 +f 199//257 200//257 232//257 +f 199//258 232//258 231//258 +f 200//259 201//259 232//259 +f 201//260 233//260 232//260 +f 201//261 202//261 234//261 +f 201//262 234//262 233//262 +f 202//263 203//263 234//263 +f 203//264 235//264 234//264 +f 203//265 204//265 236//265 +f 203//265 236//265 235//265 +f 204//266 205//266 236//266 +f 205//266 237//266 236//266 +f 205//267 206//267 238//267 +f 205//267 238//267 237//267 +f 206//268 207//268 238//268 +f 207//269 239//269 238//269 +f 207//270 208//270 240//270 +f 207//270 240//270 239//270 +f 208//271 209//271 240//271 +f 209//272 241//272 240//272 +f 209//273 210//273 242//273 +f 209//274 242//274 241//274 +f 210//275 211//275 242//275 +f 211//276 243//276 242//276 +f 211//277 212//277 244//277 +f 211//278 244//278 243//278 +f 212//279 213//279 244//279 +f 213//280 245//280 244//280 +f 213//281 214//281 246//281 +f 213//282 246//282 245//282 +f 214//283 215//283 246//283 +f 215//284 247//284 246//284 +f 215//285 216//285 248//285 +f 215//286 248//286 247//286 +f 216//287 217//287 248//287 +f 217//288 249//288 248//288 +f 217//289 218//289 250//289 +f 217//290 250//290 249//290 +f 218//291 219//291 250//291 +f 219//292 251//292 250//292 +f 219//293 220//293 252//293 +f 219//294 252//294 251//294 +f 220//295 221//295 252//295 +f 221//295 253//295 252//295 +f 221//296 222//296 254//296 +f 221//297 254//297 253//297 +f 222//298 223//298 254//298 +f 223//298 255//298 254//298 +f 223//299 224//299 256//299 +f 223//300 256//300 255//300 +f 226//301 225//301 257//301 +f 225//301 258//301 257//301 +f 225//302 227//302 259//302 +f 225//303 259//303 258//303 +f 227//304 228//304 259//304 +f 228//304 260//304 259//304 +f 228//305 229//305 261//305 +f 228//305 261//305 260//305 +f 229//306 230//306 261//306 +f 230//306 262//306 261//306 +f 230//307 231//307 263//307 +f 230//307 263//307 262//307 +f 231//308 232//308 263//308 +f 232//308 264//308 263//308 +f 232//309 233//309 265//309 +f 232//309 265//309 264//309 +f 233//310 234//310 265//310 +f 234//310 266//310 265//310 +f 234//311 235//311 267//311 +f 234//311 267//311 266//311 +f 235//312 236//312 267//312 +f 236//312 268//312 267//312 +f 236//313 237//313 269//313 +f 236//313 269//313 268//313 +f 237//314 238//314 269//314 +f 238//314 270//314 269//314 +f 238//315 239//315 271//315 +f 238//315 271//315 270//315 +f 239//316 240//316 271//316 +f 240//317 272//317 271//317 +f 240//318 241//318 273//318 +f 240//318 273//318 272//318 +f 241//319 242//319 273//319 +f 242//319 274//319 273//319 +f 242//320 243//320 275//320 +f 242//321 275//321 274//321 +f 243//322 244//322 275//322 +f 244//322 276//322 275//322 +f 244//323 245//323 277//323 +f 244//323 277//323 276//323 +f 245//324 246//324 277//324 +f 246//324 278//324 277//324 +f 246//325 247//325 279//325 +f 246//325 279//325 278//325 +f 247//326 248//326 279//326 +f 248//327 280//327 279//327 +f 248//328 249//328 281//328 +f 248//328 281//328 280//328 +f 249//329 250//329 281//329 +f 250//329 282//329 281//329 +f 250//330 251//330 283//330 +f 250//330 283//330 282//330 +f 251//331 252//331 283//331 +f 252//331 284//331 283//331 +f 252//332 253//332 285//332 +f 252//332 285//332 284//332 +f 253//333 254//333 285//333 +f 254//333 286//333 285//333 +f 254//334 255//334 287//334 +f 254//334 287//334 286//334 +f 255//335 256//335 287//335 +f 256//335 288//335 287//335 +f 257//319 258//319 289//319 +f 257//319 289//319 290//319 +f 258//320 259//320 289//320 +f 259//320 291//320 289//320 +f 259//322 260//322 292//322 +f 259//322 292//322 291//322 +f 260//323 261//323 292//323 +f 261//323 293//323 292//323 +f 261//324 262//324 294//324 +f 261//324 294//324 293//324 +f 262//325 263//325 294//325 +f 263//325 295//325 294//325 +f 263//326 264//326 296//326 +f 263//326 296//326 295//326 +f 264//328 265//328 296//328 +f 265//328 297//328 296//328 +f 265//329 266//329 298//329 +f 265//329 298//329 297//329 +f 266//330 267//330 298//330 +f 267//330 299//330 298//330 +f 267//331 268//331 300//331 +f 267//331 300//331 299//331 +f 268//332 269//332 300//332 +f 269//332 301//332 300//332 +f 269//333 270//333 302//333 +f 269//333 302//333 301//333 +f 270//334 271//334 302//334 +f 271//334 303//334 302//334 +f 271//335 272//335 304//335 +f 271//335 304//335 303//335 +f 272//336 273//336 304//336 +f 273//336 305//336 304//336 +f 273//301 274//301 306//301 +f 273//301 306//301 305//301 +f 274//302 275//302 306//302 +f 275//302 307//302 306//302 +f 275//304 276//304 308//304 +f 275//304 308//304 307//304 +f 276//305 277//305 308//305 +f 277//305 309//305 308//305 +f 277//306 278//306 310//306 +f 277//306 310//306 309//306 +f 278//307 279//307 310//307 +f 279//307 311//307 310//307 +f 279//308 280//308 312//308 +f 279//308 312//308 311//308 +f 280//309 281//309 312//309 +f 281//309 313//309 312//309 +f 281//310 282//310 314//310 +f 281//310 314//310 313//310 +f 282//311 283//311 314//311 +f 283//311 315//311 314//311 +f 283//312 284//312 316//312 +f 283//312 316//312 315//312 +f 284//313 285//313 316//313 +f 285//313 317//313 316//313 +f 285//314 286//314 318//314 +f 285//314 318//314 317//314 +f 286//315 287//315 318//315 +f 287//315 319//315 318//315 +f 287//316 288//316 320//316 +f 287//316 320//316 319//316 +f 290//337 289//337 321//337 +f 289//337 322//337 321//337 +f 289//275 291//275 323//275 +f 289//275 323//275 322//275 +f 291//277 292//277 323//277 +f 292//277 324//277 323//277 +f 292//280 293//280 325//280 +f 292//279 325//279 324//279 +f 293//282 294//282 325//282 +f 294//282 326//282 325//282 +f 294//283 295//283 327//283 +f 294//283 327//283 326//283 +f 295//285 296//285 327//285 +f 296//285 328//285 327//285 +f 296//338 297//338 329//338 +f 296//338 329//338 328//338 +f 297//339 298//339 329//339 +f 298//339 330//339 329//339 +f 298//291 299//291 331//291 +f 298//291 331//291 330//291 +f 299//293 300//293 331//293 +f 300//293 332//293 331//293 +f 300//295 301//295 333//295 +f 300//295 333//295 332//295 +f 301//297 302//297 333//297 +f 302//296 334//296 333//296 +f 302//298 303//298 335//298 +f 302//298 335//298 334//298 +f 303//299 304//299 335//299 +f 304//299 336//299 335//299 +f 304//340 305//340 337//340 +f 304//340 337//340 336//340 +f 305//341 306//341 337//341 +f 306//341 338//341 337//341 +f 306//249 307//249 339//249 +f 306//249 339//249 338//249 +f 307//251 308//251 339//251 +f 308//251 340//251 339//251 +f 308//253 309//253 341//253 +f 308//253 341//253 340//253 +f 309//255 310//255 341//255 +f 310//255 342//255 341//255 +f 310//342 311//342 343//342 +f 310//342 343//342 342//342 +f 311//257 312//257 343//257 +f 312//257 344//257 343//257 +f 312//343 313//343 345//343 +f 312//343 345//343 344//343 +f 313//344 314//344 345//344 +f 314//344 346//344 345//344 +f 314//263 315//263 347//263 +f 314//263 347//263 346//263 +f 315//345 316//345 347//345 +f 316//345 348//345 347//345 +f 316//346 317//346 349//346 +f 316//266 349//266 348//266 +f 317//267 318//267 349//267 +f 318//267 350//267 349//267 +f 318//268 319//268 351//268 +f 318//268 351//268 350//268 +f 319//270 320//270 351//270 +f 320//270 352//270 351//270 +f 321//230 322//230 353//230 +f 321//230 353//230 354//230 +f 322//231 323//231 353//231 +f 323//231 355//231 353//231 +f 323//347 324//347 356//347 +f 323//347 356//347 355//347 +f 324//233 325//233 356//233 +f 325//233 357//233 356//233 +f 325//234 326//234 358//234 +f 325//234 358//234 357//234 +f 326//236 327//236 358//236 +f 327//348 359//348 358//348 +f 327//237 328//237 360//237 +f 327//237 360//237 359//237 +f 328//238 329//238 360//238 +f 329//238 361//238 360//238 +f 329//239 330//239 362//239 +f 329//239 362//239 361//239 +f 330//240 331//240 362//240 +f 331//240 363//240 362//240 +f 331//241 332//241 364//241 +f 331//349 364//349 363//349 +f 332//242 333//242 364//242 +f 333//242 365//242 364//242 +f 333//243 334//243 366//243 +f 333//243 366//243 365//243 +f 334//350 335//350 366//350 +f 335//350 367//350 366//350 +f 335//246 336//246 368//246 +f 335//246 368//246 367//246 +f 336//351 337//351 368//351 +f 337//351 369//351 368//351 +f 337//210 338//210 370//210 +f 337//210 370//210 369//210 +f 338//211 339//211 370//211 +f 339//211 371//211 370//211 +f 339//212 340//212 372//212 +f 339//352 372//352 371//352 +f 340//213 341//213 372//213 +f 341//213 373//213 372//213 +f 341//215 342//215 374//215 +f 341//215 374//215 373//215 +f 342//217 343//217 374//217 +f 343//353 375//353 374//353 +f 343//218 344//218 376//218 +f 343//218 376//218 375//218 +f 344//219 345//219 376//219 +f 345//219 377//219 376//219 +f 345//220 346//220 378//220 +f 345//220 378//220 377//220 +f 346//221 347//221 378//221 +f 347//221 379//221 378//221 +f 347//354 348//354 380//354 +f 347//354 380//354 379//354 +f 348//223 349//223 380//223 +f 349//223 381//223 380//223 +f 349//225 350//225 382//225 +f 349//225 382//225 381//225 +f 350//227 351//227 382//227 +f 351//355 383//355 382//355 +f 351//228 352//228 384//228 +f 351//228 384//228 383//228 +f 354//195 353//195 385//195 +f 353//195 386//195 385//195 +f 353//196 355//196 387//196 +f 353//196 387//196 386//196 +f 355//197 356//197 387//197 +f 356//197 388//197 387//197 +f 356//198 357//198 389//198 +f 356//198 389//198 388//198 +f 357//199 358//199 389//199 +f 358//199 390//199 389//199 +f 358//200 359//200 391//200 +f 358//200 391//200 390//200 +f 359//201 360//201 391//201 +f 360//201 392//201 391//201 +f 360//202 361//202 393//202 +f 360//202 393//202 392//202 +f 361//203 362//203 393//203 +f 362//203 394//203 393//203 +f 362//204 363//204 395//204 +f 362//204 395//204 394//204 +f 363//205 364//205 395//205 +f 364//205 396//205 395//205 +f 364//206 365//206 397//206 +f 364//206 397//206 396//206 +f 365//207 366//207 397//207 +f 366//207 398//207 397//207 +f 366//208 367//208 399//208 +f 366//208 399//208 398//208 +f 367//209 368//209 399//209 +f 368//209 400//209 399//209 +f 368//356 369//356 401//356 +f 368//356 401//356 400//356 +f 369//179 370//179 401//179 +f 370//179 402//179 401//179 +f 370//180 371//180 403//180 +f 370//180 403//180 402//180 +f 371//181 372//181 403//181 +f 372//181 404//181 403//181 +f 372//182 373//182 405//182 +f 372//182 405//182 404//182 +f 373//183 374//183 405//183 +f 374//183 406//183 405//183 +f 374//184 375//184 407//184 +f 374//184 407//184 406//184 +f 375//185 376//185 407//185 +f 376//185 408//185 407//185 +f 376//186 377//186 409//186 +f 376//186 409//186 408//186 +f 377//187 378//187 409//187 +f 378//187 410//187 409//187 +f 378//188 379//188 411//188 +f 378//188 411//188 410//188 +f 379//189 380//189 411//189 +f 380//189 412//189 411//189 +f 380//190 381//190 413//190 +f 380//190 413//190 412//190 +f 381//191 382//191 413//191 +f 382//191 414//191 413//191 +f 382//192 383//192 415//192 +f 382//192 415//192 414//192 +f 383//193 384//193 415//193 +f 384//193 416//193 415//193 +f 385//154 386//154 417//154 +f 385//154 417//154 418//154 +f 386//155 387//155 417//155 +f 387//155 419//155 417//155 +f 387//156 388//156 420//156 +f 387//156 420//156 419//156 +f 388//159 389//159 420//159 +f 389//159 421//159 420//159 +f 389//161 390//161 422//161 +f 389//161 422//161 421//161 +f 390//162 391//162 422//162 +f 391//162 423//162 422//162 +f 391//164 392//164 424//164 +f 391//164 424//164 423//164 +f 392//166 393//166 424//166 +f 393//166 425//166 424//166 +f 393//168 394//168 426//168 +f 393//168 426//168 425//168 +f 394//169 395//169 426//169 +f 395//169 427//169 426//169 +f 395//170 396//170 428//170 +f 395//170 428//170 427//170 +f 396//173 397//173 428//173 +f 397//173 429//173 428//173 +f 397//175 398//175 430//175 +f 397//175 430//175 429//175 +f 398//176 399//176 430//176 +f 399//176 431//176 430//176 +f 399//178 400//178 432//178 +f 399//178 432//178 431//178 +f 400//357 401//357 432//357 +f 401//357 433//357 432//357 +f 401//128 402//128 434//128 +f 401//128 434//128 433//128 +f 402//129 403//129 434//129 +f 403//129 435//129 434//129 +f 403//130 404//130 436//130 +f 403//130 436//130 435//130 +f 404//133 405//133 436//133 +f 405//133 437//133 436//133 +f 405//135 406//135 438//135 +f 405//135 438//135 437//135 +f 406//136 407//136 438//136 +f 407//136 439//136 438//136 +f 407//138 408//138 440//138 +f 407//138 440//138 439//138 +f 408//140 409//140 440//140 +f 409//140 441//140 440//140 +f 409//142 410//142 442//142 +f 409//142 442//142 441//142 +f 410//143 411//143 442//143 +f 411//143 443//143 442//143 +f 411//144 412//144 444//144 +f 411//144 444//144 443//144 +f 412//147 413//147 444//147 +f 413//147 445//147 444//147 +f 413//149 414//149 446//149 +f 413//149 446//149 445//149 +f 414//150 415//150 446//150 +f 415//150 447//150 446//150 +f 415//152 416//152 448//152 +f 415//152 448//152 447//152 +f 418//358 417//358 449//358 +f 417//358 450//358 449//358 +f 417//359 419//359 451//359 +f 417//359 451//359 450//359 +f 419//110 420//110 451//110 +f 420//110 452//110 451//110 +f 420//111 421//111 453//111 +f 420//111 453//111 452//111 +f 421//112 422//112 453//112 +f 422//112 454//112 453//112 +f 422//113 423//113 455//113 +f 422//113 455//113 454//113 +f 423//360 424//360 455//360 +f 424//360 456//360 455//360 +f 424//361 425//361 457//361 +f 424//361 457//361 456//361 +f 425//362 426//362 457//362 +f 426//362 458//362 457//362 +f 426//363 427//363 459//363 +f 426//363 459//363 458//363 +f 427//122 428//122 459//122 +f 428//122 460//122 459//122 +f 428//123 429//123 461//123 +f 428//123 461//123 460//123 +f 429//124 430//124 461//124 +f 430//124 462//124 461//124 +f 430//125 431//125 463//125 +f 430//125 463//125 462//125 +f 431//364 432//364 463//364 +f 432//364 464//364 463//364 +f 432//365 433//365 465//365 +f 432//365 465//365 464//365 +f 433//366 434//366 465//366 +f 434//366 466//366 465//366 +f 434//367 435//367 467//367 +f 434//367 467//367 466//367 +f 435//86 436//86 467//86 +f 436//86 468//86 467//86 +f 436//87 437//87 469//87 +f 436//87 469//87 468//87 +f 437//88 438//88 469//88 +f 438//88 470//88 469//88 +f 438//89 439//89 471//89 +f 438//89 471//89 470//89 +f 439//368 440//368 471//368 +f 440//368 472//368 471//368 +f 440//369 441//369 473//369 +f 440//369 473//369 472//369 +f 441//370 442//370 473//370 +f 442//370 474//370 473//370 +f 442//371 443//371 475//371 +f 442//371 475//371 474//371 +f 443//98 444//98 475//98 +f 444//98 476//98 475//98 +f 444//99 445//99 477//99 +f 444//99 477//99 476//99 +f 445//100 446//100 477//100 +f 446//100 478//100 477//100 +f 446//101 447//101 479//101 +f 446//101 479//101 478//101 +f 447//372 448//372 479//372 +f 448//372 480//372 479//372 +f 449//62 450//62 481//62 +f 449//62 481//62 482//62 +f 450//64 451//64 481//64 +f 451//64 483//64 481//64 +f 451//65 452//65 484//65 +f 451//65 484//65 483//65 +f 452//66 453//66 484//66 +f 453//66 485//66 484//66 +f 453//67 454//67 486//67 +f 453//67 486//67 485//67 +f 454//68 455//68 486//68 +f 455//68 487//68 486//68 +f 455//69 456//69 488//69 +f 455//69 488//69 487//69 +f 456//71 457//71 488//71 +f 457//71 489//71 488//71 +f 457//73 458//73 490//73 +f 457//73 490//73 489//73 +f 458//75 459//75 490//75 +f 459//75 491//75 490//75 +f 459//77 460//77 492//77 +f 459//77 492//77 491//77 +f 460//78 461//78 492//78 +f 461//78 493//78 492//78 +f 461//79 462//79 494//79 +f 461//79 494//79 493//79 +f 462//80 463//80 494//80 +f 463//80 495//80 494//80 +f 463//81 464//81 496//81 +f 463//81 496//81 495//81 +f 464//373 465//373 496//373 +f 465//373 497//373 496//373 +f 465//40 466//40 498//40 +f 465//40 498//40 497//40 +f 466//42 467//42 498//42 +f 467//42 499//42 498//42 +f 467//43 468//43 500//43 +f 467//43 500//43 499//43 +f 468//44 469//44 500//44 +f 469//44 501//44 500//44 +f 469//45 470//45 502//45 +f 469//45 502//45 501//45 +f 470//46 471//46 502//46 +f 471//46 503//46 502//46 +f 471//47 472//47 504//47 +f 471//47 504//47 503//47 +f 472//49 473//49 504//49 +f 473//49 505//49 504//49 +f 473//51 474//51 506//51 +f 473//51 506//51 505//51 +f 474//53 475//53 506//53 +f 475//53 507//53 506//53 +f 475//55 476//55 508//55 +f 475//55 508//55 507//55 +f 476//56 477//56 508//56 +f 477//56 509//56 508//56 +f 477//57 478//57 510//57 +f 477//57 510//57 509//57 +f 478//58 479//58 510//58 +f 479//58 511//58 510//58 +f 479//59 480//59 512//59 +f 479//59 512//59 511//59 +f 482//374 481//374 513//374 +f 481//375 514//375 513//375 +f 481//22 483//22 515//22 +f 481//23 515//23 514//23 +f 483//376 484//376 515//376 +f 484//24 516//24 515//24 +f 484//377 485//377 517//377 +f 484//25 517//25 516//25 +f 485//378 486//378 517//378 +f 486//26 518//26 517//26 +f 486//379 487//379 519//379 +f 486//27 519//27 518//27 +f 487//28 488//28 519//28 +f 488//29 520//29 519//29 +f 488//380 489//380 521//380 +f 488//381 521//381 520//381 +f 489//382 490//382 521//382 +f 490//383 522//383 521//383 +f 490//32 491//32 523//32 +f 490//33 523//33 522//33 +f 491//384 492//384 523//384 +f 492//34 524//34 523//34 +f 492//385 493//385 525//385 +f 492//35 525//35 524//35 +f 493//386 494//386 525//386 +f 494//36 526//36 525//36 +f 494//387 495//387 527//387 +f 494//37 527//37 526//37 +f 495//38 496//38 527//38 +f 496//39 528//39 527//39 +f 496//388 497//388 529//388 +f 496//389 529//389 528//389 +f 497//390 498//390 529//390 +f 498//391 530//391 529//391 +f 498//2 499//2 531//2 +f 498//3 531//3 530//3 +f 499//392 500//392 531//392 +f 500//4 532//4 531//4 +f 500//393 501//393 533//393 +f 500//5 533//5 532//5 +f 501//394 502//394 533//394 +f 502//6 534//6 533//6 +f 502//395 503//395 535//395 +f 502//7 535//7 534//7 +f 503//8 504//8 535//8 +f 504//9 536//9 535//9 +f 504//396 505//396 537//396 +f 504//397 537//397 536//397 +f 505//398 506//398 537//398 +f 506//399 538//399 537//399 +f 506//12 507//12 539//12 +f 506//13 539//13 538//13 +f 507//400 508//400 539//400 +f 508//14 540//14 539//14 +f 508//401 509//401 541//401 +f 508//15 541//15 540//15 +f 509//402 510//402 541//402 +f 510//16 542//16 541//16 +f 510//403 511//403 543//403 +f 510//17 543//17 542//17 +f 511//18 512//18 543//18 +f 512//19 544//19 543//19 +f 513//404 514//404 545//404 +f 513//405 545//405 546//405 +f 514//406 515//406 545//406 +f 515//407 547//407 545//407 +f 515//408 516//408 548//408 +f 515//409 548//409 547//409 +f 516//410 517//410 548//410 +f 517//411 549//411 548//411 +f 517//412 518//412 550//412 +f 517//413 550//413 549//413 +f 518//414 519//414 550//414 +f 519//415 551//415 550//415 +f 519//416 520//416 552//416 +f 519//417 552//417 551//417 +f 520//418 521//418 552//418 +f 521//419 553//419 552//419 +f 521//420 522//420 554//420 +f 521//421 554//421 553//421 +f 522//422 523//422 554//422 +f 523//423 555//423 554//423 +f 523//424 524//424 556//424 +f 523//425 556//425 555//425 +f 524//426 525//426 556//426 +f 525//427 557//427 556//427 +f 525//428 526//428 558//428 +f 525//429 558//429 557//429 +f 526//430 527//430 558//430 +f 527//431 559//431 558//431 +f 527//432 528//432 560//432 +f 527//433 560//433 559//433 +f 528//434 529//434 560//434 +f 529//435 561//435 560//435 +f 529//436 530//436 562//436 +f 529//437 562//437 561//437 +f 530//438 531//438 562//438 +f 531//439 563//439 562//439 +f 531//440 532//440 564//440 +f 531//441 564//441 563//441 +f 532//442 533//442 564//442 +f 533//443 565//443 564//443 +f 533//444 534//444 566//444 +f 533//445 566//445 565//445 +f 534//446 535//446 566//446 +f 535//447 567//447 566//447 +f 535//448 536//448 568//448 +f 535//449 568//449 567//449 +f 536//450 537//450 568//450 +f 537//451 569//451 568//451 +f 537//452 538//452 570//452 +f 537//453 570//453 569//453 +f 538//454 539//454 570//454 +f 539//455 571//455 570//455 +f 539//456 540//456 572//456 +f 539//457 572//457 571//457 +f 540//458 541//458 572//458 +f 541//459 573//459 572//459 +f 541//460 542//460 574//460 +f 541//461 574//461 573//461 +f 542//462 543//462 574//462 +f 543//463 575//463 574//463 +f 543//464 544//464 576//464 +f 543//465 576//465 575//465 +f 546//466 545//466 577//466 +f 545//466 578//466 577//466 +f 545//467 547//467 579//467 +f 545//467 579//467 578//467 +f 547//468 548//468 579//468 +f 548//468 580//468 579//468 +f 548//469 549//469 581//469 +f 548//469 581//469 580//469 +f 549//470 550//470 581//470 +f 550//470 582//470 581//470 +f 550//471 551//471 583//471 +f 550//471 583//471 582//471 +f 551//472 552//472 583//472 +f 552//472 584//472 583//472 +f 552//473 553//473 585//473 +f 552//473 585//473 584//473 +f 553//474 554//474 585//474 +f 554//474 586//474 585//474 +f 554//475 555//475 587//475 +f 554//475 587//475 586//475 +f 555//476 556//476 587//476 +f 556//476 588//476 587//476 +f 556//477 557//477 589//477 +f 556//477 589//477 588//477 +f 557//478 558//478 589//478 +f 558//478 590//478 589//478 +f 558//479 559//479 591//479 +f 558//479 591//479 590//479 +f 559//480 560//480 591//480 +f 560//480 592//480 591//480 +f 560//481 561//481 593//481 +f 560//481 593//481 592//481 +f 561//482 562//482 593//482 +f 562//482 594//482 593//482 +f 562//483 563//483 595//483 +f 562//483 595//483 594//483 +f 563//484 564//484 595//484 +f 564//484 596//484 595//484 +f 564//485 565//485 597//485 +f 564//485 597//485 596//485 +f 565//486 566//486 597//486 +f 566//486 598//486 597//486 +f 566//487 567//487 599//487 +f 566//487 599//487 598//487 +f 567//488 568//488 599//488 +f 568//488 600//488 599//488 +f 568//489 569//489 601//489 +f 568//489 601//489 600//489 +f 569//490 570//490 601//490 +f 570//490 602//490 601//490 +f 570//491 571//491 603//491 +f 570//491 603//491 602//491 +f 571//492 572//492 603//492 +f 572//492 604//492 603//492 +f 572//493 573//493 605//493 +f 572//493 605//493 604//493 +f 573//494 574//494 605//494 +f 574//494 606//494 605//494 +f 574//495 575//495 607//495 +f 574//495 607//495 606//495 +f 575//496 576//496 607//496 +f 576//496 608//496 607//496 +f 577//497 578//497 609//497 +f 577//497 609//497 610//497 +f 578//498 579//498 609//498 +f 579//498 611//498 609//498 +f 579//499 580//499 612//499 +f 579//499 612//499 611//499 +f 580//500 581//500 612//500 +f 581//500 613//500 612//500 +f 581//501 582//501 614//501 +f 581//501 614//501 613//501 +f 582//502 583//502 614//502 +f 583//502 615//502 614//502 +f 583//503 584//503 616//503 +f 583//503 616//503 615//503 +f 584//504 585//504 616//504 +f 585//504 617//504 616//504 +f 585//505 586//505 618//505 +f 585//505 618//505 617//505 +f 586//506 587//506 618//506 +f 587//506 619//506 618//506 +f 587//507 588//507 620//507 +f 587//507 620//507 619//507 +f 588//508 589//508 620//508 +f 589//508 621//508 620//508 +f 589//509 590//509 622//509 +f 589//509 622//509 621//509 +f 590//510 591//510 622//510 +f 591//510 623//510 622//510 +f 591//511 592//511 624//511 +f 591//511 624//511 623//511 +f 592//512 593//512 624//512 +f 593//512 625//512 624//512 +f 593//513 594//513 626//513 +f 593//513 626//513 625//513 +f 594//514 595//514 626//514 +f 595//514 627//514 626//514 +f 595//515 596//515 628//515 +f 595//515 628//515 627//515 +f 596//516 597//516 628//516 +f 597//516 629//516 628//516 +f 597//517 598//517 630//517 +f 597//517 630//517 629//517 +f 598//518 599//518 630//518 +f 599//518 631//518 630//518 +f 599//519 600//519 632//519 +f 599//519 632//519 631//519 +f 600//520 601//520 632//520 +f 601//520 633//520 632//520 +f 601//521 602//521 634//521 +f 601//521 634//521 633//521 +f 602//522 603//522 634//522 +f 603//522 635//522 634//522 +f 603//523 604//523 636//523 +f 603//523 636//523 635//523 +f 604//524 605//524 636//524 +f 605//524 637//524 636//524 +f 605//525 606//525 638//525 +f 605//525 638//525 637//525 +f 606//526 607//526 638//526 +f 607//526 639//526 638//526 +f 607//527 608//527 640//527 +f 607//527 640//527 639//527 +f 610//528 609//528 641//528 +f 609//528 642//528 641//528 +f 609//529 611//529 643//529 +f 609//529 643//529 642//529 +f 611//530 612//530 643//530 +f 612//530 644//530 643//530 +f 612//531 613//531 645//531 +f 612//531 645//531 644//531 +f 613//532 614//532 645//532 +f 614//532 646//532 645//532 +f 614//533 615//533 647//533 +f 614//533 647//533 646//533 +f 615//534 616//534 647//534 +f 616//534 648//534 647//534 +f 616//535 617//535 649//535 +f 616//535 649//535 648//535 +f 617//536 618//536 649//536 +f 618//536 650//536 649//536 +f 618//537 619//537 651//537 +f 618//537 651//537 650//537 +f 619//538 620//538 651//538 +f 620//538 652//538 651//538 +f 620//539 621//539 653//539 +f 620//539 653//539 652//539 +f 621//540 622//540 653//540 +f 622//540 654//540 653//540 +f 622//541 623//541 655//541 +f 622//541 655//541 654//541 +f 623//542 624//542 655//542 +f 624//542 656//542 655//542 +f 624//543 625//543 657//543 +f 624//543 657//543 656//543 +f 625//544 626//544 657//544 +f 626//544 658//544 657//544 +f 626//545 627//545 659//545 +f 626//545 659//545 658//545 +f 627//546 628//546 659//546 +f 628//546 660//546 659//546 +f 628//547 629//547 661//547 +f 628//547 661//547 660//547 +f 629//548 630//548 661//548 +f 630//548 662//548 661//548 +f 630//549 631//549 663//549 +f 630//549 663//549 662//549 +f 631//550 632//550 663//550 +f 632//550 664//550 663//550 +f 632//551 633//551 665//551 +f 632//551 665//551 664//551 +f 633//552 634//552 665//552 +f 634//552 666//552 665//552 +f 634//553 635//553 667//553 +f 634//553 667//553 666//553 +f 635//554 636//554 667//554 +f 636//554 668//554 667//554 +f 636//555 637//555 669//555 +f 636//555 669//555 668//555 +f 637//556 638//556 669//556 +f 638//556 670//556 669//556 +f 638//557 639//557 671//557 +f 638//557 671//557 670//557 +f 639//558 640//558 671//558 +f 640//558 672//558 671//558 +f 641//559 642//559 673//559 +f 641//559 673//559 674//559 +f 642//560 643//560 673//560 +f 643//560 675//560 673//560 +f 643//561 644//561 676//561 +f 643//561 676//561 675//561 +f 644//562 645//562 676//562 +f 645//562 677//562 676//562 +f 645//563 646//563 678//563 +f 645//563 678//563 677//563 +f 646//564 647//564 678//564 +f 647//564 679//564 678//564 +f 647//565 648//565 680//565 +f 647//565 680//565 679//565 +f 648//566 649//566 680//566 +f 649//566 681//566 680//566 +f 649//567 650//567 682//567 +f 649//567 682//567 681//567 +f 650//568 651//568 682//568 +f 651//568 683//568 682//568 +f 651//569 652//569 684//569 +f 651//569 684//569 683//569 +f 652//570 653//570 684//570 +f 653//570 685//570 684//570 +f 653//571 654//571 686//571 +f 653//571 686//571 685//571 +f 654//572 655//572 686//572 +f 655//572 687//572 686//572 +f 655//573 656//573 688//573 +f 655//573 688//573 687//573 +f 656//574 657//574 688//574 +f 657//574 689//574 688//574 +f 657//575 658//575 690//575 +f 657//575 690//575 689//575 +f 658//576 659//576 690//576 +f 659//576 691//576 690//576 +f 659//577 660//577 692//577 +f 659//577 692//577 691//577 +f 660//578 661//578 692//578 +f 661//578 693//578 692//578 +f 661//579 662//579 694//579 +f 661//579 694//579 693//579 +f 662//580 663//580 694//580 +f 663//580 695//580 694//580 +f 663//581 664//581 696//581 +f 663//581 696//581 695//581 +f 664//582 665//582 696//582 +f 665//582 697//582 696//582 +f 665//583 666//583 698//583 +f 665//583 698//583 697//583 +f 666//584 667//584 698//584 +f 667//584 699//584 698//584 +f 667//585 668//585 700//585 +f 667//585 700//585 699//585 +f 668//586 669//586 700//586 +f 669//586 701//586 700//586 +f 669//587 670//587 702//587 +f 669//587 702//587 701//587 +f 670//588 671//588 702//588 +f 671//588 703//588 702//588 +f 671//589 672//589 704//589 +f 671//589 704//589 703//589 +f 674//590 673//590 705//590 +f 673//590 706//590 705//590 +f 673//591 675//591 707//591 +f 673//591 707//591 706//591 +f 675//592 676//592 707//592 +f 676//592 708//592 707//592 +f 676//593 677//593 709//593 +f 676//593 709//593 708//593 +f 677//594 678//594 709//594 +f 678//594 710//594 709//594 +f 678//595 679//595 711//595 +f 678//595 711//595 710//595 +f 679//596 680//596 711//596 +f 680//596 712//596 711//596 +f 680//597 681//597 713//597 +f 680//597 713//597 712//597 +f 681//598 682//598 713//598 +f 682//598 714//598 713//598 +f 682//599 683//599 715//599 +f 682//599 715//599 714//599 +f 683//600 684//600 715//600 +f 684//601 716//601 715//601 +f 684//602 685//602 717//602 +f 684//602 717//602 716//602 +f 685//603 686//603 717//603 +f 686//603 718//603 717//603 +f 686//604 687//604 719//604 +f 686//605 719//605 718//605 +f 687//606 688//606 719//606 +f 688//606 720//606 719//606 +f 688//607 689//607 721//607 +f 688//607 721//607 720//607 +f 689//608 690//608 721//608 +f 690//608 722//608 721//608 +f 690//609 691//609 723//609 +f 690//609 723//609 722//609 +f 691//610 692//610 723//610 +f 692//610 724//610 723//610 +f 692//611 693//611 725//611 +f 692//611 725//611 724//611 +f 693//612 694//612 725//612 +f 694//612 726//612 725//612 +f 694//613 695//613 727//613 +f 694//613 727//613 726//613 +f 695//614 696//614 727//614 +f 696//614 728//614 727//614 +f 696//615 697//615 729//615 +f 696//615 729//615 728//615 +f 697//616 698//616 729//616 +f 698//616 730//616 729//616 +f 698//617 699//617 731//617 +f 698//617 731//617 730//617 +f 699//618 700//618 731//618 +f 700//619 732//619 731//619 +f 700//620 701//620 733//620 +f 700//620 733//620 732//620 +f 701//621 702//621 733//621 +f 702//621 734//621 733//621 +f 702//622 703//622 735//622 +f 702//623 735//623 734//623 +f 703//624 704//624 735//624 +f 704//624 736//624 735//624 +f 705//625 706//625 737//625 +f 705//625 737//625 738//625 +f 706//626 707//626 737//626 +f 707//626 739//626 737//626 +f 707//627 708//627 740//627 +f 707//627 740//627 739//627 +f 708//628 709//628 740//628 +f 709//628 741//628 740//628 +f 709//629 710//629 742//629 +f 709//630 742//630 741//630 +f 710//631 711//631 742//631 +f 711//631 743//631 742//631 +f 711//632 712//632 744//632 +f 711//632 744//632 743//632 +f 712//633 713//633 744//633 +f 713//633 745//633 744//633 +f 713//634 714//634 746//634 +f 713//634 746//634 745//634 +f 714//635 715//635 746//635 +f 715//635 747//635 746//635 +f 715//636 716//636 748//636 +f 715//636 748//636 747//636 +f 716//637 717//637 748//637 +f 717//638 749//638 748//638 +f 717//639 718//639 750//639 +f 717//639 750//639 749//639 +f 718//640 719//640 750//640 +f 719//640 751//640 750//640 +f 719//641 720//641 752//641 +f 719//641 752//641 751//641 +f 720//642 721//642 752//642 +f 721//642 753//642 752//642 +f 721//643 722//643 754//643 +f 721//643 754//643 753//643 +f 722//644 723//644 754//644 +f 723//644 755//644 754//644 +f 723//645 724//645 756//645 +f 723//645 756//645 755//645 +f 724//646 725//646 756//646 +f 725//646 757//646 756//646 +f 725//647 726//647 758//647 +f 725//647 758//647 757//647 +f 726//648 727//648 758//648 +f 727//648 759//648 758//648 +f 727//649 728//649 760//649 +f 727//649 760//649 759//649 +f 728//650 729//650 760//650 +f 729//650 761//650 760//650 +f 729//651 730//651 762//651 +f 729//651 762//651 761//651 +f 730//652 731//652 762//652 +f 731//652 763//652 762//652 +f 731//653 732//653 764//653 +f 731//653 764//653 763//653 +f 732//654 733//654 764//654 +f 733//654 765//654 764//654 +f 733//655 734//655 766//655 +f 733//655 766//655 765//655 +f 734//656 735//656 766//656 +f 735//656 767//656 766//656 +f 735//657 736//657 768//657 +f 735//657 768//657 767//657 +f 738//658 737//658 769//658 +f 737//658 770//658 769//658 +f 737//659 739//659 771//659 +f 737//659 771//659 770//659 +f 739//660 740//660 771//660 +f 740//660 772//660 771//660 +f 740//661 741//661 773//661 +f 740//661 773//661 772//661 +f 741//662 742//662 773//662 +f 742//662 774//662 773//662 +f 742//663 743//663 775//663 +f 742//663 775//663 774//663 +f 743//664 744//664 775//664 +f 744//664 776//664 775//664 +f 744//665 745//665 777//665 +f 744//665 777//665 776//665 +f 745//666 746//666 777//666 +f 746//666 778//666 777//666 +f 746//667 747//667 779//667 +f 746//667 779//667 778//667 +f 747//668 748//668 779//668 +f 748//668 780//668 779//668 +f 748//669 749//669 781//669 +f 748//669 781//669 780//669 +f 749//670 750//670 781//670 +f 750//670 782//670 781//670 +f 750//671 751//671 783//671 +f 750//671 783//671 782//671 +f 751//672 752//672 783//672 +f 752//672 784//672 783//672 +f 752//673 753//673 785//673 +f 752//673 785//673 784//673 +f 753//674 754//674 785//674 +f 754//674 786//674 785//674 +f 754//675 755//675 787//675 +f 754//675 787//675 786//675 +f 755//676 756//676 787//676 +f 756//676 788//676 787//676 +f 756//677 757//677 789//677 +f 756//677 789//677 788//677 +f 757//678 758//678 789//678 +f 758//678 790//678 789//678 +f 758//679 759//679 791//679 +f 758//679 791//679 790//679 +f 759//680 760//680 791//680 +f 760//680 792//680 791//680 +f 760//681 761//681 793//681 +f 760//681 793//681 792//681 +f 761//682 762//682 793//682 +f 762//682 794//682 793//682 +f 762//683 763//683 795//683 +f 762//683 795//683 794//683 +f 763//684 764//684 795//684 +f 764//684 796//684 795//684 +f 764//685 765//685 797//685 +f 764//685 797//685 796//685 +f 765//686 766//686 797//686 +f 766//686 798//686 797//686 +f 766//687 767//687 799//687 +f 766//687 799//687 798//687 +f 767//688 768//688 799//688 +f 768//688 800//688 799//688 +f 769//674 770//674 801//674 +f 769//674 801//674 802//674 +f 770//689 771//689 801//689 +f 771//675 803//675 801//675 +f 771//676 772//676 804//676 +f 771//676 804//676 803//676 +f 772//677 773//677 804//677 +f 773//677 805//677 804//677 +f 773//678 774//678 806//678 +f 773//678 806//678 805//678 +f 774//679 775//679 806//679 +f 775//679 807//679 806//679 +f 775//680 776//680 808//680 +f 775//680 808//680 807//680 +f 776//681 777//681 808//681 +f 777//681 809//681 808//681 +f 777//682 778//682 810//682 +f 777//682 810//682 809//682 +f 778//683 779//683 810//683 +f 779//683 811//683 810//683 +f 779//684 780//684 812//684 +f 779//684 812//684 811//684 +f 780//685 781//685 812//685 +f 781//685 813//685 812//685 +f 781//686 782//686 814//686 +f 781//686 814//686 813//686 +f 782//687 783//687 814//687 +f 783//687 815//687 814//687 +f 783//688 784//688 816//688 +f 783//688 816//688 815//688 +f 784//690 785//690 816//690 +f 785//690 817//690 816//690 +f 785//658 786//658 818//658 +f 785//658 818//658 817//658 +f 786//691 787//691 818//691 +f 787//659 819//659 818//659 +f 787//660 788//660 820//660 +f 787//660 820//660 819//660 +f 788//661 789//661 820//661 +f 789//661 821//661 820//661 +f 789//662 790//662 822//662 +f 789//662 822//662 821//662 +f 790//663 791//663 822//663 +f 791//663 823//663 822//663 +f 791//664 792//664 824//664 +f 791//664 824//664 823//664 +f 792//665 793//665 824//665 +f 793//665 825//665 824//665 +f 793//666 794//666 826//666 +f 793//666 826//666 825//666 +f 794//667 795//667 826//667 +f 795//667 827//667 826//667 +f 795//668 796//668 828//668 +f 795//668 828//668 827//668 +f 796//669 797//669 828//669 +f 797//669 829//669 828//669 +f 797//670 798//670 830//670 +f 797//670 830//670 829//670 +f 798//671 799//671 830//671 +f 799//671 831//671 830//671 +f 799//672 800//672 832//672 +f 799//672 832//672 831//672 +f 802//692 801//692 833//692 +f 801//693 834//693 833//693 +f 801//694 803//694 835//694 +f 801//644 835//644 834//644 +f 803//645 804//645 835//645 +f 804//645 836//645 835//645 +f 804//695 805//695 837//695 +f 804//646 837//646 836//646 +f 805//647 806//647 837//647 +f 806//696 838//696 837//696 +f 806//697 807//697 839//697 +f 806//648 839//648 838//648 +f 807//698 808//698 839//698 +f 808//649 840//649 839//649 +f 808//699 809//699 841//699 +f 808//700 841//700 840//700 +f 809//701 810//701 841//701 +f 810//702 842//702 841//702 +f 810//703 811//703 843//703 +f 810//652 843//652 842//652 +f 811//704 812//704 843//704 +f 812//653 844//653 843//653 +f 812//654 813//654 845//654 +f 812//705 845//705 844//705 +f 813//706 814//706 845//706 +f 814//655 846//655 845//655 +f 814//656 815//656 847//656 +f 814//656 847//656 846//656 +f 815//707 816//707 847//707 +f 816//657 848//657 847//657 +f 816//708 817//708 849//708 +f 816//709 849//709 848//709 +f 817//710 818//710 849//710 +f 818//711 850//711 849//711 +f 818//626 819//626 851//626 +f 818//626 851//626 850//626 +f 819//627 820//627 851//627 +f 820//627 852//627 851//627 +f 820//628 821//628 853//628 +f 820//628 853//628 852//628 +f 821//629 822//629 853//629 +f 822//629 854//629 853//629 +f 822//631 823//631 855//631 +f 822//712 855//712 854//712 +f 823//713 824//713 855//713 +f 824//632 856//632 855//632 +f 824//714 825//714 857//714 +f 824//715 857//715 856//715 +f 825//716 826//716 857//716 +f 826//717 858//717 857//717 +f 826//635 827//635 859//635 +f 826//635 859//635 858//635 +f 827//636 828//636 859//636 +f 828//718 860//718 859//718 +f 828//637 829//637 861//637 +f 828//637 861//637 860//637 +f 829//639 830//639 861//639 +f 830//639 862//639 861//639 +f 830//719 831//719 863//719 +f 830//640 863//640 862//640 +f 831//641 832//641 863//641 +f 832//641 864//641 863//641 +f 833//608 834//608 865//608 +f 833//608 865//608 866//608 +f 834//609 835//609 865//609 +f 835//609 867//609 865//609 +f 835//720 836//720 868//720 +f 835//720 868//720 867//720 +f 836//721 837//721 868//721 +f 837//611 869//611 868//611 +f 837//722 838//722 870//722 +f 837//612 870//612 869//612 +f 838//613 839//613 870//613 +f 839//613 871//613 870//613 +f 839//614 840//614 872//614 +f 839//614 872//614 871//614 +f 840//615 841//615 872//615 +f 841//615 873//615 872//615 +f 841//616 842//616 874//616 +f 841//616 874//616 873//616 +f 842//617 843//617 874//617 +f 843//617 875//617 874//617 +f 843//619 844//619 876//619 +f 843//619 876//619 875//619 +f 844//723 845//723 876//723 +f 845//620 877//620 876//620 +f 845//724 846//724 878//724 +f 845//621 878//621 877//621 +f 846//622 847//622 878//622 +f 847//622 879//622 878//622 +f 847//624 848//624 880//624 +f 847//624 880//624 879//624 +f 848//725 849//725 880//725 +f 849//725 881//725 880//725 +f 849//590 850//590 882//590 +f 849//590 882//590 881//590 +f 850//591 851//591 882//591 +f 851//591 883//591 882//591 +f 851//726 852//726 884//726 +f 851//726 884//726 883//726 +f 852//593 853//593 884//593 +f 853//593 885//593 884//593 +f 853//727 854//727 886//727 +f 853//594 886//594 885//594 +f 854//595 855//595 886//595 +f 855//595 887//595 886//595 +f 855//596 856//596 888//596 +f 855//596 888//596 887//596 +f 856//597 857//597 888//597 +f 857//597 889//597 888//597 +f 857//598 858//598 890//598 +f 857//598 890//598 889//598 +f 858//599 859//599 890//599 +f 859//599 891//599 890//599 +f 859//601 860//601 892//601 +f 859//601 892//601 891//601 +f 860//728 861//728 892//728 +f 861//602 893//602 892//602 +f 861//729 862//729 894//729 +f 861//603 894//603 893//603 +f 862//604 863//604 894//604 +f 863//604 895//604 894//604 +f 863//606 864//606 896//606 +f 863//606 896//606 895//606 +f 866//575 865//575 897//575 +f 865//575 898//575 897//575 +f 865//576 867//576 899//576 +f 865//576 899//576 898//576 +f 867//577 868//577 899//577 +f 868//577 900//577 899//577 +f 868//578 869//578 901//578 +f 868//578 901//578 900//578 +f 869//579 870//579 901//579 +f 870//579 902//579 901//579 +f 870//580 871//580 903//580 +f 870//580 903//580 902//580 +f 871//581 872//581 903//581 +f 872//581 904//581 903//581 +f 872//582 873//582 905//582 +f 872//582 905//582 904//582 +f 873//583 874//583 905//583 +f 874//583 906//583 905//583 +f 874//584 875//584 907//584 +f 874//584 907//584 906//584 +f 875//585 876//585 907//585 +f 876//585 908//585 907//585 +f 876//586 877//586 909//586 +f 876//586 909//586 908//586 +f 877//587 878//587 909//587 +f 878//587 910//587 909//587 +f 878//588 879//588 911//588 +f 878//588 911//588 910//588 +f 879//589 880//589 911//589 +f 880//589 912//589 911//589 +f 880//730 881//730 913//730 +f 880//730 913//730 912//730 +f 881//559 882//559 913//559 +f 882//559 914//559 913//559 +f 882//560 883//560 915//560 +f 882//560 915//560 914//560 +f 883//561 884//561 915//561 +f 884//561 916//561 915//561 +f 884//562 885//562 917//562 +f 884//562 917//562 916//562 +f 885//563 886//563 917//563 +f 886//563 918//563 917//563 +f 886//564 887//564 919//564 +f 886//564 919//564 918//564 +f 887//565 888//565 919//565 +f 888//565 920//565 919//565 +f 888//566 889//566 921//566 +f 888//566 921//566 920//566 +f 889//567 890//567 921//567 +f 890//567 922//567 921//567 +f 890//568 891//568 923//568 +f 890//568 923//568 922//568 +f 891//569 892//569 923//569 +f 892//569 924//569 923//569 +f 892//570 893//570 925//570 +f 892//570 925//570 924//570 +f 893//571 894//571 925//571 +f 894//571 926//571 925//571 +f 894//572 895//572 927//572 +f 894//572 927//572 926//572 +f 895//573 896//573 927//573 +f 896//573 928//573 927//573 +f 897//544 898//544 929//544 +f 897//544 929//544 930//544 +f 898//545 899//545 929//545 +f 899//545 931//545 929//545 +f 899//731 900//731 932//731 +f 899//546 932//546 931//546 +f 900//547 901//547 932//547 +f 901//732 933//732 932//732 +f 901//548 902//548 934//548 +f 901//733 934//733 933//733 +f 902//734 903//734 934//734 +f 903//549 935//549 934//549 +f 903//550 904//550 936//550 +f 903//550 936//550 935//550 +f 904//551 905//551 936//551 +f 905//735 937//735 936//735 +f 905//552 906//552 938//552 +f 905//736 938//736 937//736 +f 906//553 907//553 938//553 +f 907//553 939//553 938//553 +f 907//737 908//737 940//737 +f 907//554 940//554 939//554 +f 908//555 909//555 940//555 +f 909//738 941//738 940//738 +f 909//556 910//556 942//556 +f 909//739 942//739 941//739 +f 910//740 911//740 942//740 +f 911//557 943//557 942//557 +f 911//558 912//558 944//558 +f 911//558 944//558 943//558 +f 912//741 913//741 944//741 +f 913//741 945//741 944//741 +f 913//528 914//528 946//528 +f 913//528 946//528 945//528 +f 914//529 915//529 946//529 +f 915//529 947//529 946//529 +f 915//742 916//742 948//742 +f 915//530 948//530 947//530 +f 916//531 917//531 948//531 +f 917//743 949//743 948//743 +f 917//532 918//532 950//532 +f 917//744 950//744 949//744 +f 918//745 919//745 950//745 +f 919//533 951//533 950//533 +f 919//534 920//534 952//534 +f 919//534 952//534 951//534 +f 920//535 921//535 952//535 +f 921//746 953//746 952//746 +f 921//536 922//536 954//536 +f 921//747 954//747 953//747 +f 922//537 923//537 954//537 +f 923//537 955//537 954//537 +f 923//748 924//748 956//748 +f 923//538 956//538 955//538 +f 924//539 925//539 956//539 +f 925//749 957//749 956//749 +f 925//540 926//540 958//540 +f 925//750 958//750 957//750 +f 926//751 927//751 958//751 +f 927//541 959//541 958//541 +f 927//542 928//542 960//542 +f 927//542 960//542 959//542 +f 930//752 929//752 961//752 +f 929//753 962//753 961//753 +f 929//754 931//754 963//754 +f 929//755 963//755 962//755 +f 931//515 932//515 963//515 +f 932//515 964//515 963//515 +f 932//516 933//516 965//516 +f 932//516 965//516 964//516 +f 933//517 934//517 965//517 +f 934//517 966//517 965//517 +f 934//518 935//518 967//518 +f 934//518 967//518 966//518 +f 935//756 936//756 967//756 +f 936//757 968//757 967//757 +f 936//758 937//758 969//758 +f 936//759 969//759 968//759 +f 937//760 938//760 969//760 +f 938//761 970//761 969//761 +f 938//762 939//762 971//762 +f 938//763 971//763 970//763 +f 939//523 940//523 971//523 +f 940//523 972//523 971//523 +f 940//524 941//524 973//524 +f 940//524 973//524 972//524 +f 941//525 942//525 973//525 +f 942//525 974//525 973//525 +f 942//526 943//526 975//526 +f 942//526 975//526 974//526 +f 943//764 944//764 975//764 +f 944//765 976//765 975//765 +f 944//766 945//766 977//766 +f 944//767 977//767 976//767 +f 945//768 946//768 977//768 +f 946//769 978//769 977//769 +f 946//770 947//770 979//770 +f 946//771 979//771 978//771 +f 947//499 948//499 979//499 +f 948//499 980//499 979//499 +f 948//500 949//500 981//500 +f 948//500 981//500 980//500 +f 949//501 950//501 981//501 +f 950//501 982//501 981//501 +f 950//502 951//502 983//502 +f 950//502 983//502 982//502 +f 951//772 952//772 983//772 +f 952//773 984//773 983//773 +f 952//774 953//774 985//774 +f 952//775 985//775 984//775 +f 953//776 954//776 985//776 +f 954//777 986//777 985//777 +f 954//778 955//778 987//778 +f 954//779 987//779 986//779 +f 955//507 956//507 987//507 +f 956//507 988//507 987//507 +f 956//508 957//508 989//508 +f 956//508 989//508 988//508 +f 957//509 958//509 989//509 +f 958//509 990//509 989//509 +f 958//510 959//510 991//510 +f 958//510 991//510 990//510 +f 959//780 960//780 991//780 +f 960//781 992//781 991//781 +f 961//782 962//782 993//782 +f 961//482 993//482 994//482 +f 962//483 963//483 993//483 +f 963//483 995//483 993//483 +f 963//484 964//484 996//484 +f 963//484 996//484 995//484 +f 964//485 965//485 996//485 +f 965//485 997//485 996//485 +f 965//486 966//486 998//486 +f 965//486 998//486 997//486 +f 966//487 967//487 998//487 +f 967//487 999//487 998//487 +f 967//783 968//783 1000//783 +f 967//488 1000//488 999//488 +f 968//784 969//784 1000//784 +f 969//489 1001//489 1000//489 +f 969//785 970//785 1002//785 +f 969//490 1002//490 1001//490 +f 970//786 971//786 1002//786 +f 971//491 1003//491 1002//491 +f 971//492 972//492 1004//492 +f 971//492 1004//492 1003//492 +f 972//493 973//493 1004//493 +f 973//493 1005//493 1004//493 +f 973//494 974//494 1006//494 +f 973//494 1006//494 1005//494 +f 974//495 975//495 1006//495 +f 975//495 1007//495 1006//495 +f 975//496 976//496 1008//496 +f 975//496 1008//496 1007//496 +f 976//787 977//787 1008//787 +f 977//788 1009//788 1008//788 +f 977//789 978//789 1010//789 +f 977//466 1010//466 1009//466 +f 978//467 979//467 1010//467 +f 979//467 1011//467 1010//467 +f 979//468 980//468 1012//468 +f 979//468 1012//468 1011//468 +f 980//469 981//469 1012//469 +f 981//469 1013//469 1012//469 +f 981//470 982//470 1014//470 +f 981//470 1014//470 1013//470 +f 982//471 983//471 1014//471 +f 983//471 1015//471 1014//471 +f 983//790 984//790 1016//790 +f 983//472 1016//472 1015//472 +f 984//791 985//791 1016//791 +f 985//473 1017//473 1016//473 +f 985//792 986//792 1018//792 +f 985//474 1018//474 1017//474 +f 986//793 987//793 1018//793 +f 987//475 1019//475 1018//475 +f 987//476 988//476 1020//476 +f 987//476 1020//476 1019//476 +f 988//477 989//477 1020//477 +f 989//477 1021//477 1020//477 +f 989//478 990//478 1022//478 +f 989//478 1022//478 1021//478 +f 990//479 991//479 1022//479 +f 991//479 1023//479 1022//479 +f 991//480 992//480 1024//480 +f 991//480 1024//480 1023//480 +f 994//794 993//794 2//794 +f 994//794 2//794 1//794 +f 993//438 995//438 5//438 +f 993//439 5//439 2//439 +f 995//440 996//440 7//440 +f 995//440 7//440 5//440 +f 996//442 997//442 9//442 +f 996//442 9//442 7//442 +f 997//444 998//444 11//444 +f 997//444 11//444 9//444 +f 998//446 999//446 13//446 +f 998//446 13//446 11//446 +f 999//449 1000//449 15//449 +f 999//448 15//448 13//448 +f 1000//795 1001//795 17//795 +f 1000//795 17//795 15//795 +f 1001//796 1002//796 19//796 +f 1001//796 19//796 17//796 +f 1002//454 1003//454 21//454 +f 1002//455 21//455 19//455 +f 1003//456 1004//456 23//456 +f 1003//456 23//456 21//456 +f 1004//458 1005//458 25//458 +f 1004//458 25//458 23//458 +f 1005//460 1006//460 27//460 +f 1005//460 27//460 25//460 +f 1006//462 1007//462 29//462 +f 1006//462 29//462 27//462 +f 1007//465 1008//465 31//465 +f 1007//464 31//464 29//464 +f 1008//797 1009//797 33//797 +f 1008//797 33//797 31//797 +f 1009//798 1010//798 35//798 +f 1009//798 35//798 33//798 +f 1010//406 1011//406 37//406 +f 1010//407 37//407 35//407 +f 1011//408 1012//408 39//408 +f 1011//408 39//408 37//408 +f 1012//410 1013//410 41//410 +f 1012//410 41//410 39//410 +f 1013//412 1014//412 43//412 +f 1013//412 43//412 41//412 +f 1014//414 1015//414 45//414 +f 1014//414 45//414 43//414 +f 1015//417 1016//417 47//417 +f 1015//416 47//416 45//416 +f 1016//799 1017//799 49//799 +f 1016//799 49//799 47//799 +f 1017//800 1018//800 51//800 +f 1017//800 51//800 49//800 +f 1018//422 1019//422 53//422 +f 1018//423 53//423 51//423 +f 1019//424 1020//424 55//424 +f 1019//424 55//424 53//424 +f 1020//426 1021//426 57//426 +f 1020//426 57//426 55//426 +f 1021//428 1022//428 59//428 +f 1021//428 59//428 57//428 +f 1022//430 1023//430 61//430 +f 1022//430 61//430 59//430 +f 1023//433 1024//433 63//433 +f 1023//432 63//432 61//432 +f 63//801 1//801 4//801 +f 63//801 4//801 64//801 +f 64//373 4//373 65//373 +f 64//802 65//802 96//802 +f 96//365 65//365 98//365 +f 96//803 98//803 128//803 +f 128//357 98//357 129//357 +f 128//357 129//357 160//357 +f 160//356 129//356 162//356 +f 160//356 162//356 192//356 +f 192//351 162//351 193//351 +f 192//351 193//351 224//351 +f 224//804 193//804 226//804 +f 224//805 226//805 256//805 +f 256//336 226//336 257//336 +f 256//336 257//336 288//336 +f 288//318 257//318 290//318 +f 288//318 290//318 320//318 +f 320//806 290//806 321//806 +f 320//806 321//806 352//806 +f 352//229 321//229 354//229 +f 352//229 354//229 384//229 +f 384//194 354//194 385//194 +f 384//194 385//194 416//194 +f 416//153 385//153 418//153 +f 416//153 418//153 448//153 +f 448//807 418//807 449//807 +f 448//807 449//807 480//807 +f 480//60 449//60 482//60 +f 480//60 482//60 512//60 +f 512//808 482//808 513//808 +f 512//809 513//809 544//809 +f 544//810 513//810 546//810 +f 544//811 546//811 576//811 +f 576//788 546//788 577//788 +f 576//788 577//788 608//788 +f 608//812 577//812 610//812 +f 608//812 610//812 640//812 +f 640//741 610//741 641//741 +f 640//741 641//741 672//741 +f 672//730 641//730 674//730 +f 672//730 674//730 704//730 +f 704//725 674//725 705//725 +f 704//725 705//725 736//725 +f 736//813 705//813 738//813 +f 736//813 738//813 768//813 +f 768//690 738//690 769//690 +f 768//690 769//690 800//690 +f 800//673 769//673 802//673 +f 800//673 802//673 832//673 +f 832//814 802//814 833//814 +f 832//815 833//815 864//815 +f 864//607 833//607 866//607 +f 864//607 866//607 896//607 +f 896//574 866//574 897//574 +f 896//574 897//574 928//574 +f 928//543 897//543 930//543 +f 928//543 930//543 960//543 +f 960//816 930//816 961//816 +f 960//817 961//817 992//817 +f 992//481 961//481 994//481 +f 992//818 994//818 1024//818 +f 1//819 63//819 1024//819 +f 1//819 1024//819 994//819 diff --git a/OMesh/OMeshInterface.hpp b/OMesh/OMeshInterface.hpp new file mode 100644 index 0000000..0fd1cc1 --- /dev/null +++ b/OMesh/OMeshInterface.hpp @@ -0,0 +1,209 @@ +#pragma once + +// DGL +#include "DGL/DGL_Types.hpp" + +// OpenMesh +#include +#include +#include + +// C++ +#include "Cpp_Alias.hpp" + + +namespace OMeshInterface +{ + inline namespace LibraryReferences + { + // DGL + + using FaceGL = DGL::Face ; + using FaceList = DGL::FaceList ; + using Vector3 = DGL::Vector3 ; + using VertexList = DGL::VertexList; + + // OpenMesh + + using EdgeHandle = OpenMesh::EdgeHandle ; + using HE_Mesh = OpenMesh::TriMesh_ArrayKernelT<> ; + using HE_MeshPoly = OpenMesh::PolyMesh_ArrayKernelT<>; + using FaceHandle = OpenMesh::FaceHandle ; + using HalfEdgeHandle = OpenMesh::HalfedgeHandle ; + using IO_Options = OpenMesh::IO::Options ; + using VertexHandle = OpenMesh::VertexHandle ; + using Vertex = OpenMesh::ArrayKernel::Vertex ; + + using OpenMesh::IO::read_mesh; + + // Second Order Aliases + using Point = HE_Mesh::Point; + using Edge = HE_Mesh::Edge ; + + using EdgeList = vector; + + using EdgeHandles = vector; + using FaceHandles = vector; + using HalfEdgeHandles = vector; + using VertHandles = vector; + } + + + + + class OMesh_HE + { + public: + + OMesh_HE() {} + + void Load(string _filePath) + { + IO_Options loadOptions; + + bool loadResult, hasFaceNormals, hasVertexNormals; + + oMeshObj.request_vertex_normals(); + oMeshObj.request_face_normals (); + + loadResult = read_mesh(oMeshObj, _filePath, loadOptions); + + if (loadResult == false) + { + throw std::runtime_error("OMesh_HE: Failed to load the mesh."); + } + + hasFaceNormals = loadOptions.check(IO_Options::FaceNormal ); + hasVertexNormals = loadOptions.check(IO_Options::VertexNormal); + + if (!hasVertexNormals) + { + oMeshObj.update_vertex_normals (); + } + if (!hasFaceNormals) + { + oMeshObj.update_face_normals (); + } + + GenerateVertexList (); + GenerateVertexNormalList(); + GenerateFaceNormalList (); + GenerateVertexEdgeList (); + GenerateFaceList (); + + return; + } + + const VertexList& GetVerticies() const + { + return verticies; + } + + const VertexList& GetVertNormals() const + { + return vertNormals; + } + + const EdgeList& GetVertEdges() const + { + return edges; + } + + const FaceList& GetFaces() const + { + return faces; + } + + const VertexList& GetFaceNormals() const + { + return faceNormals; + } + + protected: + + void GenerateVertexList() + { + using VertIter = HE_Mesh::VertexIter; + + for (VertIter element = oMeshObj.vertices_begin(); element != oMeshObj.vertices_end(); element++) + { + auto vertex = oMeshObj.point(*element); + + verticies.push_back(Vector3(vertex[0], vertex[1], vertex[2])); + } + + return; + } + + void GenerateVertexNormalList() + { + using VertIter = HE_Mesh::VertexIter; + + for (VertIter element = oMeshObj.vertices_begin(); element != oMeshObj.vertices_end(); element++) + { + auto normal = oMeshObj.normal(*element); + + vertNormals.push_back(Vector3(normal[0], normal[1], normal[2])); + } + + return; + } + + void GenerateFaceNormalList() + { + using FaceIter = HE_Mesh::FaceIter; + + for (FaceIter faceElem = oMeshObj.faces_begin(); faceElem != oMeshObj.faces_end(); faceElem++) + { + auto normal = oMeshObj.normal(*faceElem); + + faceNormals.push_back(Vector3(normal[0], normal[1], normal[2])); + } + } + + void GenerateVertexEdgeList() + { + using EdgeIter = HE_Mesh::EdgeIter; + + for (EdgeIter element = oMeshObj.edges_begin(); element != oMeshObj.edges_begin(); element++) + { + using OEdge = decltype(oMeshObj.edge(*element)); + + OEdge edge = oMeshObj.edge(*element); + + edges.push_back(edge); + } + } + + void GenerateFaceList() + { + using FaceIterElem = decltype(oMeshObj.faces_begin()); + + for (FaceIterElem faceElement = oMeshObj.faces_begin(); faceElement != oMeshObj.faces_end(); faceElement++) + { + FaceGL face; + + int index = 0; + + using FaceVertexIter = HE_Mesh::FaceVertexIter; + + for (FaceVertexIter vertElement = oMeshObj.fv_begin(*faceElement); vertElement != oMeshObj.fv_end(*faceElement); vertElement++, index++) + { + face.vec[index] = vertElement->idx(); + } + + faces.push_back(face); + } + + return; + } + + HE_Mesh oMeshObj; + + VertexList verticies ; + VertexList vertNormals; + VertexList faceNormals; + EdgeList edges ; + FaceList faces ; + }; +} diff --git a/Shaders/PhongShader.frag b/Shaders/PhongShader.frag index 982e99e..d9b368c 100644 --- a/Shaders/PhongShader.frag +++ b/Shaders/PhongShader.frag @@ -1,5 +1,7 @@ #version 330 core + + out vec4 FragColor; in vec3 FragPosition ; diff --git a/Shaders/PhongShader.vert b/Shaders/PhongShader.vert index 5c683f0..2643da5 100644 --- a/Shaders/PhongShader.vert +++ b/Shaders/PhongShader.vert @@ -1,9 +1,13 @@ #version 330 core + + #define VertexIndex 0 #define NormalIndex 1 #define TextureIndex 2 + + layout (location = VertexIndex ) in vec3 VertPosition; layout (location = NormalIndex ) in vec3 VertNormal ; layout (location = TextureIndex) in vec3 VertTexture ;