shared_ptr<MATRIX_4X4> OpenGL3DRenderer::generateModelMatrix(int windowWidth, int windowHeight) { VECTOR_3D worldCenter = VECTOR_3D(-_renderContext->width()*1.0f / 2, -_renderContext->height()*1.0f / 2, -_renderContext->depth()*1.0f / 2); glm::mat4 translation = glm::translate(glm::mat4(1.0f), worldCenter); // Center object around (0, 0, 0) // Arcball code starts here _arcball->updateScreenSize(windowWidth, windowHeight); if (_lastViewMatrix == nullptr) // Handle first frame case _lastViewMatrix = generateViewMatrix(windowWidth, windowHeight); auto rotation = _arcball->modelRotationMatrix(std::make_shared<MATRIX_4X4>(translation), _lastViewMatrix); // TODO: handle FPS double currentTime = glfwGetTime(); float deltaTime = float(currentTime - _lastFrameRenderTime); _lastFrameRenderTime = currentTime; // Arcball code ends here //_lastModelMatrix = std::make_shared<MATRIX_4X4>(translation * (*rotation)); return std::make_shared<MATRIX_4X4>((*rotation) * translation); }
shared_ptr<VECTOR_3D> OpenGL3DRenderer::generateLightSource() { VECTOR_3D spotLight = VECTOR_3D(_renderContext->width()*1.0f * 1.5, _renderContext->height()*1.0f * 1.5, _renderContext->depth()*1.0f * 1.5); return std::make_shared<VECTOR_3D>(spotLight); }
Ioss::NodeBlock::NodeBlock(Ioss::DatabaseIO *io_database, const std::string &my_name, int64_t node_count, int64_t degrees_of_freedom) : Ioss::EntityBlock(io_database, my_name, "node", node_count) { properties.add(Ioss::Property("component_degree", static_cast<int>(degrees_of_freedom))); std::string vector_name; assert(degrees_of_freedom == 1 || degrees_of_freedom == 2 || degrees_of_freedom == 3); if (degrees_of_freedom == 1) vector_name = SCALAR(); else if (degrees_of_freedom == 2) vector_name = VECTOR_2D(); else if (degrees_of_freedom == 3) vector_name = VECTOR_3D(); fields.add(Ioss::Field("mesh_model_coordinates", Ioss::Field::REAL, vector_name, Ioss::Field::MESH, node_count)); // Permit access 1-coordinate at a time fields.add(Ioss::Field("mesh_model_coordinates_x", Ioss::Field::REAL, SCALAR(), Ioss::Field::MESH, node_count)); if (degrees_of_freedom > 1) fields.add(Ioss::Field("mesh_model_coordinates_y", Ioss::Field::REAL, SCALAR(), Ioss::Field::MESH, node_count)); if (degrees_of_freedom > 2) fields.add(Ioss::Field("mesh_model_coordinates_z", Ioss::Field::REAL, SCALAR(), Ioss::Field::MESH, node_count)); fields.add(Ioss::Field("node_connectivity_status", Ioss::Field::CHARACTER, SCALAR(), Ioss::Field::MESH, node_count)); }