void InitMeshes(Graphics* ge) { fprintf(stdout, "\n"); fprintf(stdout, "------------- Loading Meshes -------------\n"); m = MeshObject("mustang.obj", 1); s_mesh = MeshObject("Square.obj", 7); target_mesh = MeshObject("Square_wall.obj", 1); fprintf(stdout, "------------------------------------------\n"); // P-51 Mustang mustang = MeshHolder(&m); mustang.SetRotation(glm::rotate(mat4(1.f), 0.f, vec3(0.f, 0.0f, 1.f))); mustang.SetPosition(vec3(0.0f, 0.0f, 0.0f)); mustang2 = MeshHolder(&m); mustang2.SetRotation(glm::rotate(mat4(1.f), 0.f, vec3(0.f, 0.0f, 1.f))); mustang2.SetPosition(vec3(0.0f, 0.0f, 20.0f)); mustang3 = MeshHolder(&m); mustang3.SetRotation(glm::rotate(mat4(1.f), 0.f, vec3(0.f, 0.0f, 1.f))); mustang3.SetPosition(vec3(20.0f, 0.0f, 20.0f)); mustang4 = MeshHolder(&m); mustang4.SetRotation(glm::rotate(mat4(1.f), 0.f, vec3(0.f, 0.0f, 1.f))); mustang4.SetPosition(vec3(20.0f, 0.0f, 0.0f)); mustangHigh = MeshHolder(&m); mustangHigh.SetRotation(glm::rotate(mat4(1.f), 0.f, vec3(0.f, 0.0f, 1.f))); mustangHigh.SetPosition(vec3(60.0f, 60.0f, 0.0f)); ground = MeshHolder(&s_mesh); ground.SetRotation(glm::rotate(mat4(1.f), 0.f, vec3(0.f, 0.0f, 1.f))); ground.SetPosition(vec3(10.0f, -1.5f, 10.0f)); target = MeshHolder(&target_mesh); target.SetRotation(glm::rotate(mat4(1.f), 0.f, vec3(0.f, 0.0f, 1.f))); target.SetPosition(vec3(60.0f, 60.f, 100.0f)); target.ChangeTexture(1); target2 = MeshHolder(&target_mesh); target2.SetRotation(glm::rotate(mat4(1.f), 0.f, vec3(0.f, 0.0f, 1.f))); target2.SetPosition(vec3(60.0f, 40.f, 100.0f)); target2.ChangeTexture(1); std::vector<MeshObject*> meshes; meshes.push_back(&m); meshes.push_back(&s_mesh); meshes.push_back(&target_mesh); ge->GenerateBuffer(meshes); EndOfLine.AddPoint(vec3(60.0f, 60.0f, 0.0f)); std::vector<Line*> lines; lines.push_back(&EndOfLine); ge->GenerateLineBuffer(lines); }
Mesh MeshManager::createRectangle(const Gre::Surface &surface) { if ( surface.height > 0 && surface.width > 0 ) { std::string name = std::string ( "MeshRectangle#" ) + std::to_string(iMeshes.size()); std::string svbname = name + "/svb"; std::string sibname = name + "/sib"; // To create a Mesh, we have to fill a SoftwareVertexBuffer. SoftwareVertexBufferHolder svbholder = SoftwareVertexBufferHolder ( new SoftwareVertexBufferPrivate(svbname) ); if ( !svbholder.isInvalid() ) { VertexDescriptor vdesc; vdesc << VertexComponentType::Position; svbholder->setVertexDescriptor(vdesc); VertexPosition* data = (VertexPosition*) new VertexPosition[4]; data[0] = VertexPosition ( surface.left , surface.top , 0.0f ); data[1] = VertexPosition ( surface.left + surface.width , surface.top , 0.0f ); data[2] = VertexPosition ( surface.left + surface.width , surface.top - surface.height , 0.0f ); data[3] = VertexPosition ( surface.left , surface.top - surface.height , 0.0f ); svbholder->addData((const char*) data, sizeof(VertexPosition) * 4); } else { #ifdef GreIsDebugMode GreDebugPretty() << "SoftwareVertexBuffer '" << svbname << "' couldn't be created." << std::endl; #endif return Mesh ( nullptr ); } // We also try to fill a SoftwareIndexBuffer. SoftwareIndexBufferHolder sibholder = SoftwareIndexBufferHolder ( new SoftwareIndexBufferPrivate(sibname) ); if ( !sibholder.isInvalid() ) { IndexDescriptor idesc; idesc.setType(IndexType::UnsignedInteger); unsigned int data[6] = { 0, 1, 2, 2, 3, 0 }; sibholder->setIndexDescriptor(idesc, 0); sibholder->addDataToIndexBatch((const char*) data, sizeof(unsigned int) * 6, 0); } else { #ifdef GreIsDebugMode GreDebugPretty() << "SoftwareIndexBuffer '" << sibname << "' couldn't be created." << std::endl; #endif return Mesh ( nullptr ); } // Now we can add those two HardwareBuffer to a Mesh object. MeshHolder rectangle = MeshHolder ( new MeshPrivate(name) ); if ( !rectangle.isInvalid() ) { rectangle->setSoftwareVertexBuffer(SoftwareVertexBuffer(svbholder)); rectangle->setSoftwareIndexBuffer(SoftwareIndexBuffer(sibholder)); // Everything is set, just add this Mesh to the list and return it. iMeshes.add(rectangle); return Mesh ( rectangle ); } else { #ifdef GreIsDebugMode GreDebugPretty() << "Mesh '" << name << "' couldn't be created." << std::endl; #endif return Mesh ( nullptr ); } } else { #ifdef GreIsDebugMode GreDebugPretty() << "Can't create a Mesh Resource using null Surface." << std::endl; #endif return Mesh ( nullptr ); } }