Example #1
0
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);
}
Example #2
0
File: Mesh.cpp Project: luk2010/GRE
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 );
    }
}