/** * @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; }
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; }