Example #1
0
KHalfEdgeMeshPrivate::FaceIndex KHalfEdgeMeshPrivate::addFace(index_array &v1, index_array &v2, index_array &v3)
{
  // Normalize Indices
  size_t size = m_vertices.size() + 1;

  // Normalize Indices
  normalizeIndex(v1[0], size);
  normalizeIndex(v2[0], size);
  normalizeIndex(v3[0], size);

  // Create edges
  HalfEdgeIndex edgeA = getHalfEdge(v1, v2);
  HalfEdgeIndex edgeB = getHalfEdge(v2, v3);
  HalfEdgeIndex edgeC = getHalfEdge(v3, v1);

  // Create Face
  m_faces.emplace_back(edgeA);
  FaceIndex faceIdx = FaceIndex(static_cast<index_type>(m_faces.size()));

  // Initialize Inner Half Edges
  initializeInnerHalfEdge(edgeA, faceIdx, edgeB);
  initializeInnerHalfEdge(edgeB, faceIdx, edgeC);
  initializeInnerHalfEdge(edgeC, faceIdx, edgeA);

  // Set Vertex half edges
  if (vertex(v1[0])->to == 0) vertex(v1[0])->to = edgeA;
  if (vertex(v2[0])->to == 0) vertex(v2[0])->to = edgeB;
  if (vertex(v3[0])->to == 0) vertex(v3[0])->to = edgeC;

  return faceIdx;
}
void Graphics::CreatePlane(VertexContainer& vertices, 
	IndexedTriangleContainer& container,  const Texture& texture, int width, int height) {
	vertices.clear();
	container.clear();

	Vertex cell[] = {
		Vertex(-0.5f, 0, -0.5f, 0, 0.99f), Vertex(-0.5f, 0, 0.5f, 0, 0), Vertex(0.5f, 0, 0.5f, 0.99f, 0),
		Vertex(0.5f, 0, -0.5f, 0.99f, 0.99f),
	};

	for (int x = -width; x <= width; ++x) {
		for (int z = -height; z <= height; ++z) {
			Vertex lb = cell[0], lt = cell[1], rt = cell[2], rb = cell[3];
			lb.x += x, lb.z += z;
			lt.x += x, lt.z += z;
			rt.x += x, rt.z += z;
			rb.x += x, rb.z += z;
			vertices.push_back(lb);
			vertices.push_back(lt);
			vertices.push_back(rt);
			vertices.push_back(rb);
		}
	}

	for (size_t i = 0; i < vertices.size(); i += 4) {
		Triangle lt(i + 0, i + 1, i + 2, texture);
		Triangle rb(i + 0, i + 2, i + 3, texture);
		container.push_back(lt);
		container.push_back(rb);
	}
}
Example #3
0
/*******************************************************************************
 * HalfEdgeMeshPrivate :: Add Commands
 ******************************************************************************/
inline KHalfEdgeMeshPrivate::VertexIndex KHalfEdgeMeshPrivate::addVertex(const KVector3D &v)
{
  m_vertices.emplace_back(v, 0);
  m_aabb.encompassPoint(v);
  return VertexIndex(static_cast<index_type>(m_vertices.size()));
}