/**
 *  @brief fügt ein einzelnes Zeichen zur Zeichenliste hinzu
 */
inline void glArchivItem_Font::DrawChar(unsigned curChar, VertexArrays& vertices, DrawPoint& curPos) const
{
    CharInfo ci = GetCharInfo(curChar);

    GlPoint texCoord1(ci.pos);
    GlPoint texCoord2(ci.pos + DrawPoint(ci.width, dy));

    vertices.texCoords.push_back(texCoord1);
    vertices.texCoords.push_back(GlPoint(texCoord1.x, texCoord2.y));
    vertices.texCoords.push_back(texCoord2);
    vertices.texCoords.push_back(GlPoint(texCoord2.x, texCoord1.y));

    GlPoint curPos1(curPos);
    GlPoint curPos2(curPos + DrawPoint(ci.width, dy));

    vertices.vertices.push_back(curPos1);
    vertices.vertices.push_back(GlPoint(curPos1.x, curPos2.y));
    vertices.vertices.push_back(curPos2);
    vertices.vertices.push_back(GlPoint(curPos2.x, curPos1.y));

    curPos.x += ci.width;
}
Example #2
0
void PrimitiveMeshHelper::SolidCube(float width, float height, float depth) {
  SR_ASSERT(width > 0 && height > 0 && depth > 0);
  width = width/2;
  height = height/2;
  depth = depth/2;

  DrawCmdData<Vertex> cmd;
  cmd.draw_mode = kDrawTriangles;
  VertexList &vert_list = cmd.vertex_list;
  std::vector<unsigned short> &index_list = cmd.index_list;

  //normal
  {
    // Front Face
    int baseIndex = vert_list.size();
    vec3 normal(0, 0, +1);

    vec2 texCoord1(0, 0);	vec3 vertex1(-width, -height, depth);
    vec2 texCoord2(1, 0);	vec3 vertex2( width, -height, depth);
    vec2 texCoord3(1, 1);	vec3 vertex3( width,  height, depth);
    vec2 texCoord4(0, 1);	vec3 vertex4(-width,  height, depth);

    //add vertex
    Vertex v1;  v1.pos = vertex1; v1.texcoord = texCoord1;  v1.normal = normal;
    Vertex v2;  v2.pos = vertex2; v2.texcoord = texCoord2;  v2.normal = normal;
    Vertex v3;  v3.pos = vertex3; v3.texcoord = texCoord3;  v3.normal = normal;
    Vertex v4;  v4.pos = vertex4; v4.texcoord = texCoord4;  v4.normal = normal;

    vert_list.push_back(v1);
    vert_list.push_back(v2);
    vert_list.push_back(v3);
    vert_list.push_back(v4);

    //add index
    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 1);
    index_list.push_back(baseIndex + 2);

    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 2);
    index_list.push_back(baseIndex + 3);
  }
  {
    // Back Face
    int baseIndex = vert_list.size();
    vec3 normal(0, 0, -1);

    vec2 texCoord1(1, 0);	vec3 vertex1(-width, -height, -depth);
    vec2 texCoord2(1, 1);	vec3 vertex2(-width,  height, -depth);
    vec2 texCoord3(0, 1);	vec3 vertex3( width,  height, -depth);
    vec2 texCoord4(0, 0);	vec3 vertex4( width, -height, -depth);

    //add vertex
    Vertex v1;  v1.pos = vertex1; v1.texcoord = texCoord1;  v1.normal = normal;
    Vertex v2;  v2.pos = vertex2; v2.texcoord = texCoord2;  v2.normal = normal;
    Vertex v3;  v3.pos = vertex3; v3.texcoord = texCoord3;  v3.normal = normal;
    Vertex v4;  v4.pos = vertex4; v4.texcoord = texCoord4;  v4.normal = normal;

    vert_list.push_back(v1);
    vert_list.push_back(v2);
    vert_list.push_back(v3);
    vert_list.push_back(v4);

    //add index
    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 1);
    index_list.push_back(baseIndex + 2);

    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 2);
    index_list.push_back(baseIndex + 3);
  }

  {
    // Top Face
    int baseIndex = vert_list.size();
    vec3 normal(0, 1, 0);

    vec2 texCoord1(0, 1);	vec3 vertex1(-width, height, -depth);
    vec2 texCoord2(0, 0);	vec3 vertex2(-width, height,  depth);
    vec2 texCoord3(1, 0);	vec3 vertex3( width, height,  depth);
    vec2 texCoord4(1, 1);	vec3 vertex4( width, height, -depth);

    //add vertex
    Vertex v1;  v1.pos = vertex1; v1.texcoord = texCoord1;  v1.normal = normal;
    Vertex v2;  v2.pos = vertex2; v2.texcoord = texCoord2;  v2.normal = normal;
    Vertex v3;  v3.pos = vertex3; v3.texcoord = texCoord3;  v3.normal = normal;
    Vertex v4;  v4.pos = vertex4; v4.texcoord = texCoord4;  v4.normal = normal;

    vert_list.push_back(v1);
    vert_list.push_back(v2);
    vert_list.push_back(v3);
    vert_list.push_back(v4);

    //add index
    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 1);
    index_list.push_back(baseIndex + 2);

    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 2);
    index_list.push_back(baseIndex + 3);
  }

  {
    // Bottom Face
    int baseIndex = vert_list.size();
    vec3 normal(0, -1, 0);

    vec2 texCoord1(1, 1);	vec3 vertex1(-width, -height, -depth);
    vec2 texCoord2(0, 1);	vec3 vertex2( width, -height, -depth);
    vec2 texCoord3(0, 0);	vec3 vertex3( width, -height,  depth);
    vec2 texCoord4(1, 0);	vec3 vertex4(-width, -height,  depth);

    //add vertex
    Vertex v1;  v1.pos = vertex1; v1.texcoord = texCoord1;  v1.normal = normal;
    Vertex v2;  v2.pos = vertex2; v2.texcoord = texCoord2;  v2.normal = normal;
    Vertex v3;  v3.pos = vertex3; v3.texcoord = texCoord3;  v3.normal = normal;
    Vertex v4;  v4.pos = vertex4; v4.texcoord = texCoord4;  v4.normal = normal;

    vert_list.push_back(v1);
    vert_list.push_back(v2);
    vert_list.push_back(v3);
    vert_list.push_back(v4);

    //add index
    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 1);
    index_list.push_back(baseIndex + 2);

    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 2);
    index_list.push_back(baseIndex + 3);
  }

  {
    // Right face
    int baseIndex = vert_list.size();
    vec3 normal(1, 0, 0);

    vec2 texCoord1(1, 0);	vec3 vertex1(width, -height, -depth);
    vec2 texCoord2(1, 1);	vec3 vertex2(width,  height, -depth);
    vec2 texCoord3(0, 1);	vec3 vertex3(width,  height,  depth);
    vec2 texCoord4(0, 0);	vec3 vertex4(width, -height,  depth);

    //add vertex
    Vertex v1;  v1.pos = vertex1; v1.texcoord = texCoord1;  v1.normal = normal;
    Vertex v2;  v2.pos = vertex2; v2.texcoord = texCoord2;  v2.normal = normal;
    Vertex v3;  v3.pos = vertex3; v3.texcoord = texCoord3;  v3.normal = normal;
    Vertex v4;  v4.pos = vertex4; v4.texcoord = texCoord4;  v4.normal = normal;

    vert_list.push_back(v1);
    vert_list.push_back(v2);
    vert_list.push_back(v3);
    vert_list.push_back(v4);

    //add index
    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 1);
    index_list.push_back(baseIndex + 2);

    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 2);
    index_list.push_back(baseIndex + 3);
  }

  {
    // Left Face
    int baseIndex = vert_list.size();
    vec3 normal(0, -1, 0);

    vec2 texCoord1(0, 0);	vec3 vertex1(-width, -height, -depth);
    vec2 texCoord2(1, 0);	vec3 vertex2(-width, -height,  depth);
    vec2 texCoord3(1, 1);	vec3 vertex3(-width,  height,  depth);
    vec2 texCoord4(0, 1);	vec3 vertex4(-width,  height, -depth);

    //add vertex
    Vertex v1;  v1.pos = vertex1; v1.texcoord = texCoord1;  v1.normal = normal;
    Vertex v2;  v2.pos = vertex2; v2.texcoord = texCoord2;  v2.normal = normal;
    Vertex v3;  v3.pos = vertex3; v3.texcoord = texCoord3;  v3.normal = normal;
    Vertex v4;  v4.pos = vertex4; v4.texcoord = texCoord4;  v4.normal = normal;

    vert_list.push_back(v1);
    vert_list.push_back(v2);
    vert_list.push_back(v3);
    vert_list.push_back(v4);

    //add index
    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 1);
    index_list.push_back(baseIndex + 2);

    index_list.push_back(baseIndex + 0);
    index_list.push_back(baseIndex + 2);
    index_list.push_back(baseIndex + 3);
  }
  this->cmd_list_->push_back(cmd);
}
std::vector<DrawCmdData<Vertex_1P1N1UV>> SolidCubeFactory::CreateNormalMesh()
{
	float width = width_/2;
	float height = height_/2;
	float depth = depth_/2;

	DrawCmdData<Vertex_1P1N1UV> cmd;
	cmd.draw_mode = kDrawTriangles;
	DrawCmdData<Vertex_1P1N1UV>::VertexList &vert_list = cmd.vertex_list;
	std::vector<unsigned short> &index_list = cmd.index_list;

	//normal
	{
		// Front Face
		int baseIndex = vert_list.size();
		Vec3 normal(0, 0, +1);

		Vec2 texCoord1(0, 0);	Vec3 vertex1(-width, -height, depth);
		Vec2 texCoord2(1, 0);	Vec3 vertex2( width, -height, depth);
		Vec2 texCoord3(1, 1);	Vec3 vertex3( width,  height, depth);
		Vec2 texCoord4(0, 1);	Vec3 vertex4(-width,  height, depth);

		//add vertex
		Vertex_1P1N1UV v1;  v1.p = vertex1; v1.uv = texCoord1;  v1.n = normal;
		Vertex_1P1N1UV v2;  v2.p = vertex2; v2.uv = texCoord2;  v2.n = normal;
		Vertex_1P1N1UV v3;  v3.p = vertex3; v3.uv = texCoord3;  v3.n = normal;
		Vertex_1P1N1UV v4;  v4.p = vertex4; v4.uv = texCoord4;  v4.n = normal;

		vert_list.push_back(v1);
		vert_list.push_back(v2);
		vert_list.push_back(v3);
		vert_list.push_back(v4);

		//add index
		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 1);
		index_list.push_back(baseIndex + 2);

		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 2);
		index_list.push_back(baseIndex + 3);
	}
	{
		// Back Face
		int baseIndex = vert_list.size();
		Vec3 normal(0, 0, -1);

		Vec2 texCoord1(1, 0);	Vec3 vertex1(-width, -height, -depth);
		Vec2 texCoord2(1, 1);	Vec3 vertex2(-width,  height, -depth);
		Vec2 texCoord3(0, 1);	Vec3 vertex3( width,  height, -depth);
		Vec2 texCoord4(0, 0);	Vec3 vertex4( width, -height, -depth);

		//add vertex
		Vertex_1P1N1UV v1;  v1.p = vertex1; v1.uv = texCoord1;  v1.n = normal;
		Vertex_1P1N1UV v2;  v2.p = vertex2; v2.uv = texCoord2;  v2.n = normal;
		Vertex_1P1N1UV v3;  v3.p = vertex3; v3.uv = texCoord3;  v3.n = normal;
		Vertex_1P1N1UV v4;  v4.p = vertex4; v4.uv = texCoord4;  v4.n = normal;

		vert_list.push_back(v1);
		vert_list.push_back(v2);
		vert_list.push_back(v3);
		vert_list.push_back(v4);

		//add index
		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 1);
		index_list.push_back(baseIndex + 2);

		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 2);
		index_list.push_back(baseIndex + 3);
	}

	{
		// Top Face
		int baseIndex = vert_list.size();
		Vec3 normal(0, 1, 0);

		Vec2 texCoord1(0, 1);	Vec3 vertex1(-width, height, -depth);
		Vec2 texCoord2(0, 0);	Vec3 vertex2(-width, height,  depth);
		Vec2 texCoord3(1, 0);	Vec3 vertex3( width, height,  depth);
		Vec2 texCoord4(1, 1);	Vec3 vertex4( width, height, -depth);

		//add vertex
		Vertex_1P1N1UV v1;  v1.p = vertex1; v1.uv = texCoord1;  v1.n = normal;
		Vertex_1P1N1UV v2;  v2.p = vertex2; v2.uv = texCoord2;  v2.n = normal;
		Vertex_1P1N1UV v3;  v3.p = vertex3; v3.uv = texCoord3;  v3.n = normal;
		Vertex_1P1N1UV v4;  v4.p = vertex4; v4.uv = texCoord4;  v4.n = normal;

		vert_list.push_back(v1);
		vert_list.push_back(v2);
		vert_list.push_back(v3);
		vert_list.push_back(v4);

		//add index
		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 1);
		index_list.push_back(baseIndex + 2);

		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 2);
		index_list.push_back(baseIndex + 3);
	}

	{
		// Bottom Face
		int baseIndex = vert_list.size();
		Vec3 normal(0, -1, 0);

		Vec2 texCoord1(1, 1);	Vec3 vertex1(-width, -height, -depth);
		Vec2 texCoord2(0, 1);	Vec3 vertex2( width, -height, -depth);
		Vec2 texCoord3(0, 0);	Vec3 vertex3( width, -height,  depth);
		Vec2 texCoord4(1, 0);	Vec3 vertex4(-width, -height,  depth);

		//add vertex
		Vertex_1P1N1UV v1;  v1.p = vertex1; v1.uv = texCoord1;  v1.n = normal;
		Vertex_1P1N1UV v2;  v2.p = vertex2; v2.uv = texCoord2;  v2.n = normal;
		Vertex_1P1N1UV v3;  v3.p = vertex3; v3.uv = texCoord3;  v3.n = normal;
		Vertex_1P1N1UV v4;  v4.p = vertex4; v4.uv = texCoord4;  v4.n = normal;

		vert_list.push_back(v1);
		vert_list.push_back(v2);
		vert_list.push_back(v3);
		vert_list.push_back(v4);

		//add index
		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 1);
		index_list.push_back(baseIndex + 2);

		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 2);
		index_list.push_back(baseIndex + 3);
	}

	{
		// Right face
		int baseIndex = vert_list.size();
		Vec3 normal(1, 0, 0);

		Vec2 texCoord1(1, 0);	Vec3 vertex1(width, -height, -depth);
		Vec2 texCoord2(1, 1);	Vec3 vertex2(width,  height, -depth);
		Vec2 texCoord3(0, 1);	Vec3 vertex3(width,  height,  depth);
		Vec2 texCoord4(0, 0);	Vec3 vertex4(width, -height,  depth);

		//add vertex
		Vertex_1P1N1UV v1;  v1.p = vertex1; v1.uv = texCoord1;  v1.n = normal;
		Vertex_1P1N1UV v2;  v2.p = vertex2; v2.uv = texCoord2;  v2.n = normal;
		Vertex_1P1N1UV v3;  v3.p = vertex3; v3.uv = texCoord3;  v3.n = normal;
		Vertex_1P1N1UV v4;  v4.p = vertex4; v4.uv = texCoord4;  v4.n = normal;

		vert_list.push_back(v1);
		vert_list.push_back(v2);
		vert_list.push_back(v3);
		vert_list.push_back(v4);

		//add index
		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 1);
		index_list.push_back(baseIndex + 2);

		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 2);
		index_list.push_back(baseIndex + 3);
	}

	{
		// Left Face
		int baseIndex = vert_list.size();
		Vec3 normal(-1, 0, 0);

		Vec2 texCoord1(0, 0);	Vec3 vertex1(-width, -height, -depth);
		Vec2 texCoord2(1, 0);	Vec3 vertex2(-width, -height,  depth);
		Vec2 texCoord3(1, 1);	Vec3 vertex3(-width,  height,  depth);
		Vec2 texCoord4(0, 1);	Vec3 vertex4(-width,  height, -depth);

		//add vertex
		Vertex_1P1N1UV v1;  v1.p = vertex1; v1.uv = texCoord1;  v1.n = normal;
		Vertex_1P1N1UV v2;  v2.p = vertex2; v2.uv = texCoord2;  v2.n = normal;
		Vertex_1P1N1UV v3;  v3.p = vertex3; v3.uv = texCoord3;  v3.n = normal;
		Vertex_1P1N1UV v4;  v4.p = vertex4; v4.uv = texCoord4;  v4.n = normal;

		vert_list.push_back(v1);
		vert_list.push_back(v2);
		vert_list.push_back(v3);
		vert_list.push_back(v4);

		//add index
		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 1);
		index_list.push_back(baseIndex + 2);

		index_list.push_back(baseIndex + 0);
		index_list.push_back(baseIndex + 2);
		index_list.push_back(baseIndex + 3);
	}

	std::vector<DrawCmdData<Vertex_1P1N1UV>> data_list;
	data_list.push_back(cmd);
	return data_list;
}