/// \brief
    ///  Sets full transformation
    ///
    /// \param vPos
    ///  Position vector (world space)
    ///
    /// \param fYaw
    ///  yaw roation (degrees)
    ///
    /// \param fScale
    ///  Uniform scaling factor
    ///
    inline void SetTransformation(const hkvVec3& vPos, float fYaw, float fScale)
    {
        hkvMat3 rotation (hkvNoInitialization);
        rotation.setFromEulerAngles (0, 0, fYaw);
        rotation *= fScale;

        SetTransformation (vPos,rotation,fScale);
    }
Example #2
0
ezConeAngleGizmo::ezConeAngleGizmo()
{
  m_Angle = ezAngle::Degree(1.0f);
  m_fAngleScale = 1.0f;
  m_fRadius = 1.0f;

  m_ManipulateMode = ManipulateMode::None;

  m_ConeAngle.Configure(this, ezEngineGizmoHandleType::Cone, ezColorLinearUB(200, 200, 0, 128), false);

  SetVisible(false);
  SetTransformation(ezTransform::IdentityTransform());
}
Example #3
0
// SetTransformation
void
ChannelTransform::SetTransformation(const Transformable& other)
{
	// calc affine parameters

	// translation
	double tx;
	double ty;
	other.translation(&tx, &ty);

	// rotation
	double rotation = agg::rad2deg(other.rotation());

	// scale
	double scaleX;
	double scaleY;
	other.scaling(&scaleX, &scaleY);

	if (isnanf(tx) || isnanf(ty) || isnanf(scaleX) || isnanf(scaleY))
		return;

	SetTransformation(B_ORIGIN, BPoint(tx, ty), rotation, scaleX, scaleY);
}
void ProgressiveTriangleGeometry::Set(TriangleBasedGeometry& geometry) {
	int i;
	ClearAll();

	max_vertex_count_  = geometry.GetMaxVertexCount();
	max_triangle_count_ = geometry.GetMaxTriangleCount();

	tbc::GeometryBase::SetBoundingRadius(geometry.GetBoundingRadius());

	tbc::GeometryBase::SetBasicMaterialSettings(geometry.GetBasicMaterialSettings());

	SetLastFrameVisible(geometry.GetLastFrameVisible());
	SetTransformation(geometry.GetTransformation());

	VertexList   _vertex_list;
	TriangleList _triangle_list;
	VertexList   org_vertex_list;
	TriangleList org_triangle_list;
	VertexSplitList vertex_split_list;

	bool clear_normal_data = (geometry.GetNormalData() != 0);
	geometry.GenerateVertexNormalData();

	/*
		Copy vertex, uv and color data.
	*/

	for (i = 0; i < (int)geometry.GetVertexCount(); i++) {
		Vertex* vertex = new Vertex;
		vertex->x()  = geometry.GetVertexData()[i * 3 + 0];
		vertex->y()  = geometry.GetVertexData()[i * 3 + 1];
		vertex->z()  = geometry.GetVertexData()[i * 3 + 2];
		vertex->nx() = geometry.GetNormalData()[i * 3 + 0];
		vertex->ny() = geometry.GetNormalData()[i * 3 + 1];
		vertex->nz() = geometry.GetNormalData()[i * 3 + 2];

		if (geometry.GetUVData() != 0) {
			vertex->u() = geometry.GetUVData()[i * 2 + 0];
			vertex->v() = geometry.GetUVData()[i * 2 + 1];
		} else {
			vertex->u() = 0.0f;
			vertex->v() = 0.0f;
		}

		if (geometry.GetColorData() != 0) {
			int __size = 4;
			if (geometry.GetColorFormat() == tbc::GeometryBase::kColorRgb)
				__size = 3;

			vertex->r() = (float)geometry.GetColorData()[i * __size + 0] / 255.0f;
			vertex->g() = (float)geometry.GetColorData()[i * __size + 1] / 255.0f;
			vertex->b() = (float)geometry.GetColorData()[i * __size + 2] / 255.0f;
			vertex->a() = 1.0f;

			if (__size == 4) {
				vertex->a() = (float)geometry.GetColorData()[i * __size + 3] / 255.0f;
			}
		} else {
			vertex->r() = 0.0f;
			vertex->g() = 0.0f;
			vertex->b() = 0.0f;
			vertex->a() = 1.0f;
		}

		_vertex_list.push_back(vertex);

		Vertex* v_copy = new Vertex(vertex);
		vertex->twin_ = v_copy;
		// Keep a copy of the original mesh.
		org_vertex_list.push_back(v_copy);
	}

	/*
		Copy triangles.
	*/

	int triangle_count = (int)geometry.GetTriangleCount();
	for (i = 0; i < triangle_count; i++) {
		Triangle* triangle = new Triangle;
		Triangle* triangle2 = new Triangle;

		uint32 indices[4];
		geometry.GetTriangleIndices(i, indices);

		triangle->v1_ = *ListUtil::FindByIndex(_vertex_list, indices[0]);
		triangle->v2_ = *ListUtil::FindByIndex(_vertex_list, indices[1]);
		triangle->v3_ = *ListUtil::FindByIndex(_vertex_list, indices[2]);

		triangle2->v1_ = *ListUtil::FindByIndex(org_vertex_list, indices[0]);
		triangle2->v2_ = *ListUtil::FindByIndex(org_vertex_list, indices[1]);
		triangle2->v3_ = *ListUtil::FindByIndex(org_vertex_list, indices[2]);

		_triangle_list.push_back(triangle);
		org_triangle_list.push_back(triangle2);
	}

	/*
		The main loop.
	*/

	Edge edge_to_collapse;

	while (!_triangle_list.empty()) {
		// FindEdgeToCollapse() will put the collapsing edge last in the array.
		FindEdgeToCollapse(org_vertex_list,
				   org_triangle_list,
				   _vertex_list,
				   _triangle_list,
				   edge_to_collapse);

		VertexSplit* vertex_split = new VertexSplit;
		vertex_split_list.push_back(vertex_split);

		vertex_split->vertex_to_split_ = edge_to_collapse.v2_;
		vertex_split->new_vertex_ = edge_to_collapse.v1_;

		vertex_split->num_old_triangles_ = (int)(_triangle_list.size() - edge_to_collapse.triangle_list_.size());
		vertex_split->num_new_triangles_ = (int)edge_to_collapse.triangle_list_.size();

		SetDeltaScalars(vertex_split->delta_scalars_,
				edge_to_collapse.v1_->scalars_,
				edge_to_collapse.v2_->scalars_);

		CopyAddScalars(vertex_split->pivot_scalars_,
				edge_to_collapse.v2_->scalars_,
				vertex_split->delta_scalars_);

		CopyScalars(edge_to_collapse.v2_->scalars_,
				vertex_split->pivot_scalars_);

		TriangleList::iterator tri_iter;

		for (tri_iter = edge_to_collapse.triangle_list_.begin();
			tri_iter != edge_to_collapse.triangle_list_.end();
			++tri_iter) {
			Triangle* triangle = *tri_iter;
			_triangle_list.remove(triangle);
			vertex_split->new_triangles_.push_back(triangle);
		}

		// Setup the affected triangles. Affected triangles are those that
		// are sharing the vertex that will be removed. We need to change the pointer that
		// points at the removed vertex to point to the other vertex instead.
		for (tri_iter =  _triangle_list.begin();
			tri_iter != _triangle_list.end();
			++tri_iter) {
			Triangle* triangle = *tri_iter;

			if (triangle->HaveVertex(edge_to_collapse.v1_) == true) {
				vertex_split->fix_triangles_.push_back(triangle);
				triangle->ReplaceVertex(edge_to_collapse.v1_, vertex_split->vertex_to_split_);

				// If two vertices are the same.
				if (triangle->v1_ == triangle->v2_ ||
				   triangle->v1_ == triangle->v3_ ||
				   triangle->v2_ == triangle->v3_) {
					deb_assert(false);
				}
			}
		}

		// Place V2 last in the list, and remove V1 completely.
		_vertex_list.remove(edge_to_collapse.v1_);
		_vertex_list.remove(edge_to_collapse.v2_);
		_vertex_list.push_back(edge_to_collapse.v2_);
	} // End while(lVertexCount > 1)


	// Now we are all done calculating the vertex splits.
	// It's time to generate the final data.

	// Start with creating the lowest level mesh data.
	base_vertex_count_ = (int)_vertex_list.size();
	base_triangle_count_ = (int)_triangle_list.size();
	num_vertex_splits_ = (int)vertex_split_list.size();

	current_vertex_count_ = base_vertex_count_;
	current_triangle_count_ = base_triangle_count_;

	base_vertex_data_ = new float[base_vertex_count_ * 3];
	base_normal_data_ = new float[base_vertex_count_ * 3];
	current_vertex_data_ = new float[(current_vertex_count_ + num_vertex_splits_) * 3];
	current_normal_data_ = new float[(current_vertex_count_ + num_vertex_splits_) * 3];

	if (geometry.GetUVData() != 0) {
		base_uv_data_ = new float[base_vertex_count_ * 2];
		current_uv_data_ = new float[(current_vertex_count_ + num_vertex_splits_) * 2];
	}
	if (geometry.GetColorData() != 0) {
		base_color_data_ = new float[base_vertex_count_ * 4];
		current_color_data_ = new float[(current_vertex_count_ + num_vertex_splits_) * 4];
		current_color_data8_ = new uint8[(current_vertex_count_ + num_vertex_splits_) * 4];
	}

	VertexList::iterator vertex_iter;

	for (vertex_iter = _vertex_list.begin(), i = 0;
		vertex_iter != _vertex_list.end();
		++vertex_iter, ++i) {
		Vertex* vertex = *vertex_iter;

		base_vertex_data_[i * 3 + 0] = vertex->x();
		base_vertex_data_[i * 3 + 1] = vertex->y();
		base_vertex_data_[i * 3 + 2] = vertex->z();
		current_vertex_data_[i * 3 + 0] = vertex->x();
		current_vertex_data_[i * 3 + 1] = vertex->y();
		current_vertex_data_[i * 3 + 2] = vertex->z();

		base_normal_data_[i * 3 + 0] = vertex->nx();
		base_normal_data_[i * 3 + 1] = vertex->ny();
		base_normal_data_[i * 3 + 2] = vertex->nz();
		current_normal_data_[i * 3 + 0] = vertex->nx();
		current_normal_data_[i * 3 + 1] = vertex->ny();
		current_normal_data_[i * 3 + 2] = vertex->nz();

		if (geometry.GetUVData() != 0) {
			base_uv_data_[i * 2 + 0] = vertex->u();
			base_uv_data_[i * 2 + 1] = vertex->v();

			current_uv_data_[i * 2 + 0] = vertex->u();
			current_uv_data_[i * 2 + 1] = vertex->v();
		}

		if (geometry.GetColorData() != 0) {
			base_color_data_[i * 4 + 0] = vertex->r();
			base_color_data_[i * 4 + 1] = vertex->g();
			base_color_data_[i * 4 + 2] = vertex->b();
			base_color_data_[i * 4 + 3] = vertex->a();

			current_color_data_[i * 4 + 0] = vertex->r();
			current_color_data_[i * 4 + 1] = vertex->g();
			current_color_data_[i * 4 + 2] = vertex->b();
			current_color_data_[i * 4 + 3] = vertex->a();

			current_color_data8_[i * 4 + 0] = (uint8)(vertex->r() * 255.0f);
			current_color_data8_[i * 4 + 1] = (uint8)(vertex->g() * 255.0f);
			current_color_data8_[i * 4 + 2] = (uint8)(vertex->b() * 255.0f);
			current_color_data8_[i * 4 + 3] = (uint8)(vertex->a() * 255.0f);
		}
	}

	current_indices_ = new uint32[_triangle_list.size() * 3];

	if (_triangle_list.empty() == false) {
		base_indices_ = new uint32[_triangle_list.size() * 3];

		TriangleList::iterator tri_iter;
		for (tri_iter = _triangle_list.begin(), i = 0;
			tri_iter != _triangle_list.end();
			++tri_iter, ++i) {
			Triangle* triangle = *tri_iter;

			unsigned long index0 = ListUtil::FindIndexOf(_vertex_list, triangle->v1_);
			unsigned long index1 = ListUtil::FindIndexOf(_vertex_list, triangle->v2_);
			unsigned long index2 = ListUtil::FindIndexOf(_vertex_list, triangle->v3_);

			deb_assert(index0 >= 0);
			deb_assert(index1 >= 0);
			deb_assert(index2 >= 0);

			base_indices_[i * 3 + 0] = index0;
			base_indices_[i * 3 + 1] = index1;
			base_indices_[i * 3 + 2] = index2;
			current_indices_[i * 3 + 0] = index0;
			current_indices_[i * 3 + 1] = index1;
			current_indices_[i * 3 + 2] = index2;
		}
	}

	// Now let's create the rest of the data needed.

	if (vertex_split_list.size() > 0) {
		int vertex_index = (int)_vertex_list.size();

		vertex_split_ = new VertexSplit[vertex_split_list.size()];

		VertexSplitList::reverse_iterator vs_iter;

		for (vs_iter = vertex_split_list.rbegin(), i = 0;
			vs_iter != vertex_split_list.rend();
			++vs_iter, i++) {
			VertexSplit* vs = *vs_iter;
			vertex_split_[i].LightCopy(*vs);
			vertex_split_[i].num_new_triangles_    = (int)vs->new_triangles_.size();
			vertex_split_[i].num_old_triangles_    = (int)_triangle_list.size();
			vertex_split_[i].num_old_vertices_     = (int)_vertex_list.size();
			vertex_split_[i].vertex_to_split_index_ = ListUtil::FindIndexOf(_vertex_list, vs->vertex_to_split_);
			vertex_split_[i].num_index_fixes_      = (int)vs->fix_triangles_.size();
			vertex_split_[i].index_fix_           = new int[vertex_split_[i].num_index_fixes_];
			vertex_split_[i].index_fix_index_      = new int[vertex_split_[i].num_index_fixes_ * 2];

			// Write new vertex data.
			_vertex_list.push_back(vs->new_vertex_);

			current_vertex_data_[vertex_index * 3 + 0] = vs->new_vertex_->x();
			current_vertex_data_[vertex_index * 3 + 1] = vs->new_vertex_->y();
			current_vertex_data_[vertex_index * 3 + 2] = vs->new_vertex_->z();

			current_normal_data_[vertex_index * 3 + 0] = vs->new_vertex_->nx();
			current_normal_data_[vertex_index * 3 + 1] = vs->new_vertex_->ny();
			current_normal_data_[vertex_index * 3 + 2] = vs->new_vertex_->nz();

			if (geometry.GetUVData() != 0) {
				current_uv_data_[vertex_index * 2 + 0] = vs->new_vertex_->u();
				current_uv_data_[vertex_index * 2 + 1] = vs->new_vertex_->v();
			}

			if (geometry.GetColorData() != 0) {
				current_color_data_[vertex_index * 4 + 0] = vs->new_vertex_->r();
				current_color_data_[vertex_index * 4 + 1] = vs->new_vertex_->g();
				current_color_data_[vertex_index * 4 + 2] = vs->new_vertex_->b();
				current_color_data_[vertex_index * 4 + 3] = vs->new_vertex_->a();

				current_color_data8_[vertex_index * 4 + 0] = (uint8)(vs->new_vertex_->r() * 255.0f);
				current_color_data8_[vertex_index * 4 + 1] = (uint8)(vs->new_vertex_->g() * 255.0f);
				current_color_data8_[vertex_index * 4 + 2] = (uint8)(vs->new_vertex_->b() * 255.0f);
				current_color_data8_[vertex_index * 4 + 3] = (uint8)(vs->new_vertex_->a() * 255.0f);
			}

			vertex_index++;

			// Write index fixes. (Fix the "old" triangles).
			int j;
			TriangleList::iterator tri_iter;

			for (tri_iter = vs->fix_triangles_.begin(), j = 0;
				tri_iter != vs->fix_triangles_.end();
				++tri_iter, ++j) {
				Triangle* triangle = *tri_iter;

				deb_assert(triangle->vertex_index_history_.size() > 0);
				deb_assert(triangle->vertex_history_.size() > 0);

				int tri_index = ListUtil::FindIndexOf(_triangle_list, triangle);
				int vertex = triangle->vertex_index_history_.back();
				triangle->vertex_index_history_.pop_back();
				int index = tri_index * 3 + vertex;
				vertex_split_[i].index_fix_[j] = index;

				int old_value = 0;
				int new_value = 0;

				switch(vertex) {
				case 0:
					old_value = ListUtil::FindIndexOf(_vertex_list, triangle->v1_);
					triangle->v1_ = triangle->vertex_history_.back();
					triangle->vertex_history_.pop_back();
					new_value = ListUtil::FindIndexOf(_vertex_list, triangle->v1_);
					break;
				case 1:
					old_value = ListUtil::FindIndexOf(_vertex_list, triangle->v2_);
					triangle->v2_ = triangle->vertex_history_.back();
					triangle->vertex_history_.pop_back();
					new_value = ListUtil::FindIndexOf(_vertex_list, triangle->v2_);
					break;
				case 2:
					old_value = ListUtil::FindIndexOf(_vertex_list, triangle->v3_);
					triangle->v3_ = triangle->vertex_history_.back();
					triangle->vertex_history_.pop_back();
					new_value = ListUtil::FindIndexOf(_vertex_list, triangle->v3_);
					break;
				};

				vertex_split_[i].index_fix_index_[j * 2 + 0] = old_value;
				vertex_split_[i].index_fix_index_[j * 2 + 1] = new_value;
			}

			// Write all new triangles.
			for (tri_iter = vs->new_triangles_.begin();
				tri_iter != vs->new_triangles_.end();
				++tri_iter) {
				Triangle* triangle = *tri_iter;
				_triangle_list.push_back(triangle);
				int tri_index = (int)_triangle_list.size() - 1;

				unsigned long index0 = ListUtil::FindIndexOf(_vertex_list, triangle->v1_);
				unsigned long index1 = ListUtil::FindIndexOf(_vertex_list, triangle->v2_);
				unsigned long index2 = ListUtil::FindIndexOf(_vertex_list, triangle->v3_);

				current_indices_[tri_index * 3 + 0] = index0;
				current_indices_[tri_index * 3 + 1] = index1;
				current_indices_[tri_index * 3 + 2] = index2;
			}
		}
	}

	// Delete all memory allocated.
	ListUtil::DeleteAll(_triangle_list);
	ListUtil::DeleteAll(_vertex_list);
	ListUtil::DeleteAll(vertex_split_list);

	if (clear_normal_data == true) {
		geometry.ClearVertexNormalData();
	}
}
void ProgressiveTriangleGeometry::Copy(ProgressiveTriangleGeometry& progressive_geometry) {
	max_vertex_count_	      = progressive_geometry.max_vertex_count_;
	max_triangle_count_	  = progressive_geometry.max_triangle_count_;

	base_vertex_count_	  = progressive_geometry.base_vertex_count_;
	base_triangle_count_	  = progressive_geometry.base_triangle_count_;

	current_vertex_count_	  = progressive_geometry.current_vertex_count_;
	current_triangle_count_ = progressive_geometry.current_triangle_count_;

	current_vertex_data_	  = 0;
	current_uv_data_	      = 0;
	current_color_data_	  = 0;
	current_color_data8_	  = 0;
	current_indices_	      = 0;

	base_vertex_data_	      = 0;
	base_uv_data_		      = 0;
	base_color_data_	      = 0;
	base_indices_	      = 0;

	vertex_split_		  = 0;
	current_v_split_	      = progressive_geometry.current_v_split_;
	num_vertex_splits_	  = progressive_geometry.num_vertex_splits_;

	color_format_		  = progressive_geometry.color_format_;

	SetTransformation(progressive_geometry.GetTransformation());

	const tbc::GeometryBase::BasicMaterialSettings& mat_settings = progressive_geometry.GetBasicMaterialSettings();
	tbc::GeometryBase::SetBasicMaterialSettings(mat_settings);

	SetLastFrameVisible(progressive_geometry.GetLastFrameVisible());

	tbc::GeometryBase::SetRendererData(progressive_geometry.GetRendererData());

	int i;
	// Copy the current state data.

	if (progressive_geometry.current_vertex_data_ != 0) {
		int num_elements = (base_vertex_count_ + num_vertex_splits_) * 3;
		current_vertex_data_ = new float[num_elements];
		for (i = 0; i < num_elements; i++) {
			current_vertex_data_[i] = progressive_geometry.current_vertex_data_[i];
		}
	}

	if (progressive_geometry.current_uv_data_ != 0) {
		int num_elements = (base_vertex_count_ + num_vertex_splits_) * 2;
		current_uv_data_ = new float[num_elements];
		for (i = 0; i < num_elements; i++) {
			current_uv_data_[i] = progressive_geometry.current_uv_data_[i];
		}
	}

	if (progressive_geometry.current_color_data_ != 0) {
		int num_elements = (base_vertex_count_ + num_vertex_splits_) * 4;
		current_color_data_ = new float[num_elements];
		for (i = 0; i < num_elements; i++) {
			current_color_data_[i] = progressive_geometry.current_color_data_[i];
		}
	}

	if (progressive_geometry.current_color_data8_ != 0) {
		int num_elements = (base_vertex_count_ + num_vertex_splits_) * 4;
		current_color_data8_ = new uint8[num_elements];
		for (i = 0; i < num_elements; i++) {
			current_color_data8_[i] = progressive_geometry.current_color_data8_[i];
		}
	}

	if (progressive_geometry.current_indices_ != 0) {
		int num_elements = (base_triangle_count_ + num_vertex_splits_ * 2) * 3;
		current_indices_ = new uint32[num_elements];
		for (i = 0; i < num_elements; i++) {
			current_indices_[i] = progressive_geometry.current_indices_[i];
		}
	}

	// Copy the base mesh data.
	if (progressive_geometry.base_vertex_data_ != 0) {
		int num_elements = base_vertex_count_ * 3;
		base_vertex_data_ = new float[num_elements];
		for (i = 0; i < num_elements; i++) {
			base_vertex_data_[i] = progressive_geometry.base_vertex_data_[i];
		}
	}

	if (progressive_geometry.base_uv_data_ != 0) {
		int num_elements = base_vertex_count_ * 2;
		base_uv_data_ = new float[num_elements];
		for (i = 0; i < num_elements; i++) {
			base_uv_data_[i] = progressive_geometry.base_uv_data_[i];
		}
	}

	if (progressive_geometry.base_color_data_ != 0) {
		int num_elements = base_vertex_count_ * 4;
		base_color_data_ = new float[num_elements];
		for (i = 0; i < num_elements; i++) {
			base_color_data_[i] = progressive_geometry.base_color_data_[i];
		}
	}

	if (progressive_geometry.base_indices_ != 0) {
		int num_elements = base_triangle_count_ * 3;
		base_indices_ = new uint32[num_elements];
		for (i = 0; i < num_elements; i++) {
			base_indices_[i] = progressive_geometry.base_indices_[i];
		}
	}

	if (progressive_geometry.vertex_split_ != 0) {
		int num_elements = num_vertex_splits_;
		vertex_split_ = new VertexSplit[num_elements];
		for (i = 0; i < num_elements; i++) {
			vertex_split_[i].Copy(progressive_geometry.vertex_split_[i]);
		}
	}

	tbc::GeometryBase::SetBoundingRadius(progressive_geometry.GetBoundingRadius());
}
Example #6
0
 /// \brief
 ///   Copies essential data from passed-in instance, e.g. initial name and transformation, etc.
 ///
 /// \param inst
 ///   Instance to copy data from
 virtual void            CopyEssentialsFromInstance(const VGInstance& inst)        {
     SetName(inst.GetName());
     SetTransformation(inst.GetTransformation());
 }
Example #7
0
// Reset
void
ChannelTransform::Reset()
{
	SetTransformation(B_ORIGIN, B_ORIGIN, 0.0, 1.0, 1.0);
}
Example #8
0
int main() {
  // Initialize GLFW
  if (!glfwInit()) {
    std::cerr << "Failed to initialize GLFW!" << std::endl;
    return EXIT_FAILURE;
  }

  // Setup OpenGL context
  glfwWindowHint(GLFW_SAMPLES, 4);
  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

  // Try to create a window
  auto window = glfwCreateWindow( SIZE, SIZE, "PPGSO gl_transform", nullptr, nullptr);
  if (!window) {
    std::cerr << "Failed to open GLFW window, your graphics card is probably only capable of OpenGL 2.1" << std::endl;
    glfwTerminate();
    return EXIT_FAILURE;
  }

  // Finalize window setup
  glfwMakeContextCurrent(window);

  // Initialize GLEW
  glewExperimental = GL_TRUE;
  glewInit();
  if (!glewIsSupported("GL_VERSION_3_3")) {
    std::cerr << "Failed to initialize GLEW with OpenGL 3.3!" << std::endl;
    glfwTerminate();
    return EXIT_FAILURE;
  }

  // Load shaders
  auto program = ShaderPtr(new Shader{gl_transform_vert, gl_transform_frag});
  program->Use();

  auto texture = Texture{"lena.rgb", 512, 512};
  auto quad = Mesh{program, "quad.obj"};

  float time = 0;
  // Main execution loop
  while (!glfwWindowShouldClose(window)) {
    // Set gray background
    glClearColor(.5f,.5f,.5f,0);
    // Clear depth and color buffers
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    SetTransformation(program, time+=0.01f);

    program->SetMatrix(glm::mat4(1.0f), "ModelView");
    quad.Render();

    // Display result
    glfwSwapBuffers(window);
    glfwPollEvents();
  }

  // Clean up
  glfwTerminate();

  return EXIT_SUCCESS;
}
Example #9
0
Enviroment::Enviroment() {
	glm::mat4 scale(1.0f);
	scale = glm::scale(scale, glm::vec3(SIZE, SIZE, SIZE) );
	SetTransformation(scale);
}
Example #10
0
// Reset
void
AdvancedTransform::Reset()
{
	SetTransformation(B_ORIGIN, B_ORIGIN, 0.0, 1.0, 1.0);
}