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; }