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);
}
Ejemplo n.º 3
0
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));
}