//this makes the cube mesh used to represent a voxel.
void OgreDisplay::createVoxelMesh()
{
	ManualObject* manual = sceneMgr->createManualObject("voxel");
	manual->begin("BaseWhite", RenderOperation::OT_TRIANGLE_LIST);

	manual->position(-0.5, -0.5, -0.5); //0
	manual->position(-0.5, -0.5, 0.5); //1
	manual->position(0.5, -0.5, 0.5); //2
	manual->position(0.5, -0.5, -0.5); //3
	manual->position(-0.5, 0.5, -0.5); //4
	manual->position(-0.5, 0.5, 0.5); //5
	manual->position(0.5, 0.5, 0.5); //6
	manual->position(0.5, 0.5, -0.5); //7

	manual->quad(0,1,2,3);
	manual->quad(4,5,6,7);
	manual->quad(0,1,4,5);
	manual->quad(2,3,6,7);
	manual->quad(1,2,5,6);
	manual->quad(0,3,4,7);

	manual->end();

	manual->convertToMesh("voxel");
}
예제 #2
0
    void BoxPrimitive::drawBox()
    {
        ManualObject* manualObject = getManualObject();
        manualObject->clear();
		std::vector<Vector3> corners;
        corners.reserve(8);

        Vector3 vmin = mSize.getMinimum();
        Vector3 vmax = mSize.getMaximum();

        manualObject->begin(mMaterialName);
            manualObject->position(vmin);                               // 0
            manualObject->position(Vector3(vmax.x, vmin.y, vmin.z));    // 1
            manualObject->position(Vector3(vmax.x, vmax.y, vmin.z));    // 2
            manualObject->position(Vector3(vmin.x, vmax.y, vmin.z));    // 3
            manualObject->position(Vector3(vmax.x, vmin.y, vmax.z));    // 4
            manualObject->position(Vector3(vmin.x, vmin.y, vmax.z));    // 5
            manualObject->position(Vector3(vmin.x, vmax.y, vmax.z));    // 6
            manualObject->position(vmax);                               // 7

            manualObject->quad(0, 3, 2, 1);
            manualObject->quad(0, 5, 6, 3);
            manualObject->quad(0, 1, 4, 5);
            manualObject->quad(7, 2, 3, 6);
            manualObject->quad(7, 4, 1, 2);
            manualObject->quad(7, 6, 5, 4);
        manualObject->end();
    }
예제 #3
0
ManualObject* CHud::Create2D(const String& mat, SceneManager* sceneMgr,
	Real s,  // scale pos
	bool dyn, bool clr,
	Real mul, Vector2 ofs,
	uint32 vis, uint8 rndQue,
	int cnt)
{
	ManualObject* m = sceneMgr->createManualObject();
	m->setDynamic(dyn);
	m->setUseIdentityProjection(true);
	m->setUseIdentityView(true);
	m->setCastShadows(false);

	m->estimateVertexCount(cnt * 4);
	m->begin(mat, cnt > 1 ? RenderOperation::OT_TRIANGLE_LIST : RenderOperation::OT_TRIANGLE_STRIP);
	const static Vector2 uv[4] = { Vector2(0.f,1.f),Vector2(1.f,1.f),Vector2(0.f,0.f),Vector2(1.f,0.f) };

	for (int i=0; i < cnt; ++i)
	{	m->position(-s,-s*asp, 0);  m->textureCoord(uv[0]*mul + ofs);  if (clr)  m->colour(0,1,0);
		m->position( s,-s*asp, 0);  m->textureCoord(uv[1]*mul + ofs);  if (clr)  m->colour(0,0,0);
		m->position(-s, s*asp, 0);  m->textureCoord(uv[2]*mul + ofs);  if (clr)  m->colour(1,1,0);
		m->position( s, s*asp, 0);  m->textureCoord(uv[3]*mul + ofs);  if (clr)  m->colour(1,0,0);
	}
	if (cnt > 1)
	for (int i=0; i < cnt; ++i)
	{	int n = i*4;
		m->quad(n,n+1,n+3,n+2);
	}
	m->end();
 
	AxisAlignedBox aabInf;	aabInf.setInfinite();
	m->setBoundingBox(aabInf);  // always visible
	m->setVisibilityFlags(vis);
	m->setRenderQueueGroup(rndQue);  //RQG_Hud2
	return m;
}
예제 #4
0
void UniversePlanet::create() {
    Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().create("BoxColor", "General", true);
    Ogre::Technique* tech = mat->getTechnique(0);
    Ogre::Pass* pass = tech->getPass(0);
    Ogre::TextureUnitState* tex = pass->createTextureUnitState();

    tex->setTextureName("materials/textures/grass.png");
    tex->setNumMipmaps(4);
    tex->setTextureAnisotropy(1);
    tex->setTextureFiltering(Ogre::FO_POINT, Ogre::FO_POINT, Ogre::FO_POINT);

    ManualObject *meshChunk = new ManualObject("meshChunk_" + getName());
    int iVertex = 0;
    block_t currentBlock;
    block_t nextBlock;
    Ogre::Vector3 v;

    meshChunk->begin("BoxColor");

    for(int w = 0; w < 6; ++w)
        for(int z = 0; z < mWorldHeight; ++z)
            for(int y = 0; y < mWorldSize; ++y)
                for(int x = 0; x < mWorldSize; ++x) {
                    currentBlock = getBlock(w, x, y, z);
                    if(currentBlock == 0) continue;

                    //x-1
                    nextBlock = 0;
                    nextBlock = getBlock(w, x - 1, y, z);
                    if(nextBlock == 0) {
                        meshChunk->position(map(w, x, y, z + 1));
                        meshChunk->textureCoord(0, 1);
                        meshChunk->position(map(w, x, y + 1, z + 1));
                        meshChunk->textureCoord(1, 1);
                        meshChunk->position(map(w, x, y + 1, z));
                        meshChunk->textureCoord(1, 0);
                        meshChunk->position(map(w, x, y, z));
                        meshChunk->textureCoord(0, 0);

                        if(w == 0 || w == 3 || w == 5) meshChunk->quad(iVertex + 3, iVertex + 2, iVertex + 1, iVertex);
                        else meshChunk->quad(iVertex, iVertex + 1, iVertex + 2, iVertex + 3);

                        iVertex += 4;
                    }

                    //x+1

                    nextBlock = 0;
                    nextBlock = getBlock(w, x + 1, y, z);
                    if(nextBlock == 0) {
                        meshChunk->position(map(w, x + 1, y, z));
                        meshChunk->textureCoord(0, 1);
                        meshChunk->position(map(w, x + 1, y + 1, z));
                        meshChunk->textureCoord(1, 1);
                        meshChunk->position(map(w, x + 1, y + 1, z + 1));
                        meshChunk->textureCoord(1, 0);
                        meshChunk->position(map(w, x + 1, y, z + 1));
                        meshChunk->textureCoord(0, 0);

                        if(w == 0 || w == 3 || w == 5) meshChunk->quad(iVertex + 3, iVertex + 2, iVertex + 1, iVertex);
                        else meshChunk->quad(iVertex, iVertex + 1, iVertex + 2, iVertex + 3);

                        iVertex += 4;
                    }

                    //y-1
                    nextBlock = 0;
                    nextBlock = getBlock(w, x, y - 1, z);

                    if(nextBlock == 0) {
                        meshChunk->position(map(w, x, y, z));
                        meshChunk->textureCoord(0, 1);
                        meshChunk->position(map(w, x + 1, y, z));
                        meshChunk->textureCoord(1, 1);
                        meshChunk->position(map(w, x + 1, y, z + 1));
                        meshChunk->textureCoord(1, 0);
                        meshChunk->position(map(w, x, y, z + 1));
                        meshChunk->textureCoord(0, 0);

                        if(w == 0 || w == 3 || w == 5) meshChunk->quad(iVertex + 3, iVertex + 2, iVertex + 1, iVertex);
                        else meshChunk->quad(iVertex, iVertex + 1, iVertex + 2, iVertex + 3);

                        iVertex += 4;
                    }

                    //y+1
                    nextBlock = 0;
                    nextBlock = getBlock(w, x, y + 1, z);

                    if(nextBlock == 0) {

                        meshChunk->position(map(w, x, y + 1, z + 1));
                        meshChunk->textureCoord(0, 1);
                        meshChunk->position(map(w, x + 1, y + 1, z + 1));
                        meshChunk->textureCoord(1, 1);
                        meshChunk->position(map(w, x + 1, y + 1, z));
                        meshChunk->textureCoord(1, 0);
                        meshChunk->position(map(w, x, y + 1, z));
                        meshChunk->textureCoord(0, 0);

                        if(w == 0 || w == 3 || w == 5) meshChunk->quad(iVertex + 3, iVertex + 2, iVertex + 1, iVertex);
                        else meshChunk->quad(iVertex, iVertex + 1, iVertex + 2, iVertex + 3);

                        iVertex += 4;
                    }

                    //z-1 ok
                    nextBlock = 0;
                    nextBlock = getBlock(w, x, y, z - 1);

                    if(nextBlock == 0) {
                        meshChunk->position(map(w, x, y + 1, z));
                        meshChunk->textureCoord(0, 1);
                        meshChunk->position(map(w, x + 1, y + 1, z));
                        meshChunk->textureCoord(1, 1);
                        meshChunk->position(map(w, x + 1, y, z));
                        meshChunk->textureCoord(1, 0);
                        meshChunk->position(map(w, x, y, z));
                        meshChunk->textureCoord(0, 0);

                        if(w == 0 || w == 3 || w == 5) meshChunk->quad(iVertex, iVertex + 1, iVertex + 2, iVertex + 3);
                        else meshChunk->quad(iVertex + 3, iVertex + 2, iVertex + 1, iVertex);

                        iVertex += 4;
                    }

                    //z+1 ok
                    nextBlock = 0;
                    nextBlock = getBlock(w, x, y, z + 1);

                    if(nextBlock == 0) {
                        meshChunk->position(map(w, x, y, z + 1));
                        meshChunk->textureCoord(0, 1);
                        meshChunk->position(map(w, x + 1, y, z + 1));
                        meshChunk->textureCoord(1, 1);
                        meshChunk->position(map(w, x + 1, y + 1, z + 1));
                        meshChunk->textureCoord(1, 0);
                        meshChunk->position(map(w, x, y + 1, z + 1));
                        meshChunk->textureCoord(0, 0);

                        if(w == 1 || w == 2 || w == 4) meshChunk->quad(iVertex, iVertex + 1, iVertex + 2, iVertex + 3);
                        else meshChunk->quad(iVertex + 3, iVertex + 2, iVertex + 1, iVertex);

                        iVertex += 4;
                    }

                }
    meshChunk->end();
    Application::getSceneMgr()->getRootSceneNode()->createChildSceneNode()->attachObject(meshChunk);

    Application::getSceneMgr()->setAmbientLight(Ogre::ColourValue(0.5, 0.5, 0.5));
    Ogre::Light* l = Application::getSceneMgr()->createLight("MainLight");
    l->setPosition(20, 80, 50);
}
void OgreDisplay::createCubeMesh(std::string name, std::string material)
{
	//make a cube mesh
	
	ManualObject* cubeMesh = sceneMgr->createManualObject("cube");
	cubeMesh->begin(material, RenderOperation::OT_TRIANGLE_LIST);
	
	cubeMesh->position(-0.5, -0.5, -0.5); //0
	cubeMesh->normal(0,-1,0);
	cubeMesh->textureCoord(0,0);
	cubeMesh->position(-0.5, -0.5, 0.5); //1
	cubeMesh->normal(0,-1,0);
	cubeMesh->textureCoord(0,1);
	cubeMesh->position(0.5, -0.5, 0.5); //2
	cubeMesh->normal(0,-1,0);
	cubeMesh->textureCoord(1,1);
	cubeMesh->position(0.5, -0.5, -0.5); //3
	cubeMesh->normal(0,-1,0);
	cubeMesh->textureCoord(1,0);
	cubeMesh->position(-0.5, 0.5, -0.5); //4
	cubeMesh->normal(0,1,0);
	cubeMesh->textureCoord(0,0);
	cubeMesh->position(-0.5, 0.5, 0.5); //5
	cubeMesh->normal(0,1,0);
	cubeMesh->textureCoord(0,1);
	cubeMesh->position(0.5, 0.5, 0.5); //6
	cubeMesh->normal(0,1,0);
	cubeMesh->textureCoord(1,1);
	cubeMesh->position(0.5, 0.5, -0.5); //7
	cubeMesh->normal(0,1,0);
	cubeMesh->textureCoord(1,0);

	cubeMesh->position(-0.5, -0.5, -0.5); //8
	cubeMesh->normal(0,0,-1);
	cubeMesh->textureCoord(0,0);
	cubeMesh->position(-0.5, -0.5, 0.5); //9
	cubeMesh->normal(0,0,1);
	cubeMesh->textureCoord(0,0);
	cubeMesh->position(0.5, -0.5, 0.5); //10
	cubeMesh->normal(0,0,1);
	cubeMesh->textureCoord(1,0);
	cubeMesh->position(0.5, -0.5, -0.5); //11
	cubeMesh->normal(0,0,-1);
	cubeMesh->textureCoord(1,0);
	cubeMesh->position(-0.5, 0.5, -0.5); //12
	cubeMesh->normal(0,0,-1);
	cubeMesh->textureCoord(0,1);
	cubeMesh->position(-0.5, 0.5, 0.5); //13
	cubeMesh->normal(0,0,1);
	cubeMesh->textureCoord(0,1);
	cubeMesh->position(0.5, 0.5, 0.5); //14
	cubeMesh->normal(0,0,1);
	cubeMesh->textureCoord(1,1);
	cubeMesh->position(0.5, 0.5, -0.5); //15
	cubeMesh->normal(0,0,-1);
	cubeMesh->textureCoord(1,1);

	cubeMesh->position(-0.5, -0.5, -0.5); //16
	cubeMesh->normal(-1,0,0);
	cubeMesh->textureCoord(0,0);
	cubeMesh->position(-0.5, -0.5, 0.5); //17
	cubeMesh->normal(-1,0,0);
	cubeMesh->textureCoord(0,1);
	cubeMesh->position(0.5, -0.5, 0.5); //18
	cubeMesh->normal(1,0,0);
	cubeMesh->textureCoord(0,1);
	cubeMesh->position(0.5, -0.5, -0.5); //19
	cubeMesh->normal(1,0,0);
	cubeMesh->textureCoord(0,0);
	cubeMesh->position(-0.5, 0.5, -0.5); //20
	cubeMesh->normal(-1,0,0);
	cubeMesh->textureCoord(1,0);
	cubeMesh->position(-0.5, 0.5, 0.5); //21
	cubeMesh->normal(-1,0,0);
	cubeMesh->textureCoord(1,1);
	cubeMesh->position(0.5, 0.5, 0.5); //22
	cubeMesh->normal(1,0,0);
	cubeMesh->textureCoord(1,1);
	cubeMesh->position(0.5, 0.5, -0.5); //23
	cubeMesh->normal(1,0,0);
	cubeMesh->textureCoord(1,0);
	
	//bottom
	cubeMesh->quad(3,2,1,0);
	//top
	cubeMesh->quad(4,5,6,7);
	//front
	cubeMesh->quad(10,14,13,9);
	//back
	cubeMesh->quad(8,12,15,11);
	//left
	cubeMesh->quad(16,17,21,20);
	//right
	cubeMesh->quad(23,22,18,19);

	cubeMesh->end();

	cubeMesh->convertToMesh(name);
}