bool Skybox::load( const string& filename ) { removeModels(); mp_Tex = GraphicsManager::GetInstance()->getResourceManager()->loadTexture(filename, GL_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE); if ( ! mp_Tex ) { GraphicsManager::GetInstance()->getResourceManager()->releaseTexture(mp_Tex); return false; } const GLfloat SKYBOX_SCALE = 1000.0f; vec3 skyboxVerts[24] = { vec3(-1.0f, 1.0f, -1.0f), vec3( 1.0f, 1.0f, -1.0f), vec3( 1.0f, -1.0f, -1.0f), vec3(-1.0f, -1.0f, -1.0f), // Front vec3(-1.0f, 1.0f, 1.0f), vec3(-1.0f, 1.0f, -1.0f), vec3(-1.0f, -1.0f, -1.0f), vec3(-1.0f, -1.0f, 1.0f), // Left vec3( 1.0f, 1.0f, 1.0f), vec3(-1.0f, 1.0f, 1.0f), vec3(-1.0f, -1.0f, 1.0f), vec3( 1.0f, -1.0f, 1.0f), // Back vec3( 1.0f, 1.0f, -1.0f), vec3( 1.0f, 1.0f, 1.0f), vec3( 1.0f, -1.0f, 1.0f), vec3( 1.0f, -1.0f, -1.0f), // Right vec3(-1.0f, 1.0f, 1.0f), vec3( 1.0f, 1.0f, 1.0f), vec3( 1.0f, 1.0f, -1.0f), vec3(-1.0f, 1.0f, -1.0f), // Top vec3(-1.0f, -1.0f, 1.0f), vec3( 1.0f, -1.0f, 1.0f), vec3( 1.0f, -1.0f, -1.0f), vec3(-1.0f, -1.0f, -1.0f) // Bottom }; const GLfloat ONE_FOURTH = 0.25f; const GLfloat TWO_FOURTH = 0.5f; const GLfloat THREE_FOURTH = 0.75f; const GLfloat ONE_THIRD = 1.0f / 3.0f + 0.0015f; const GLfloat TWO_THIRD = 2.0f / 3.0f - 0.0015f; vec2 skyboxTxcrds[24] = { vec2( ONE_FOURTH, TWO_THIRD ), vec2( TWO_FOURTH, TWO_THIRD ), vec2( TWO_FOURTH, ONE_THIRD ), vec2( ONE_FOURTH, ONE_THIRD ), // Front vec2( 0.0f, TWO_THIRD ), vec2( ONE_FOURTH, TWO_THIRD ), vec2( ONE_FOURTH, ONE_THIRD ), vec2( 0.0f, ONE_THIRD ), // Left vec2( THREE_FOURTH, TWO_THIRD ), vec2( 1.0f, TWO_THIRD ), vec2( 1.0f, ONE_THIRD ), vec2( THREE_FOURTH, ONE_THIRD ), // Back vec2( TWO_FOURTH, TWO_THIRD ), vec2( THREE_FOURTH, TWO_THIRD ), vec2( THREE_FOURTH, ONE_THIRD ), vec2( TWO_FOURTH, ONE_THIRD ), // Right vec2( ONE_FOURTH, 1.0f ), vec2( TWO_FOURTH, 1.0f ), vec2( TWO_FOURTH, TWO_THIRD ), vec2( ONE_FOURTH, TWO_THIRD ), // Up vec2( ONE_FOURTH, 0.0f ), vec2( TWO_FOURTH, 0.0f ), vec2( TWO_FOURTH, ONE_THIRD ), vec2( ONE_FOURTH, ONE_THIRD ) // Down }; for (int i = 0; i < 24; ++i) skyboxVerts[i] *= SKYBOX_SCALE; Mesh* pMesh = GraphicsManager::GetInstance()->getResourceManager()->addMesh("skybox-quads"); pMesh->begin(GL_QUADS, 24); pMesh->copyVertexData(skyboxVerts); pMesh->copyTextureCoordData(skyboxTxcrds); pMesh->end(); Model* pModel = GraphicsManager::GetInstance()->getResourceManager()->addModel("skybox"); pModel->addMesh(pMesh); addModel(pModel); return true; }
int Game::run() { addModels(); // Holds where the mouse clicked position2di click; stringw start = L"Back"; // Used to switch classes next = 0; while(device->run() && !next) { if(device->isWindowActive()) { // Keep an update on the size of the window ResX = driver->getScreenSize().Width; ResY = driver->getScreenSize().Height; // Start the scene driver->beginScene(true, true, SColor(0,0,0,0)); // Handler for the back button thing if(reciever->mouseOver(rect<s32>(50,150,150,170))) { device->getCursorControl()->setActiveIcon(ECI_HAND); start = L">Back"; if(reciever->isButtonDown(reciever->LeftButton, click)) if(click.X > 50 && click.Y > 150 && click.X < 150 && click.Y < 170) next = 1; }else{ device->getCursorControl()->setActiveIcon(ECI_NORMAL); start = L"Back"; } arial->draw(start, rect<s32>(50,150,150,170), SColor(255,255,255,255)); // Draw changes and close scene smgr->drawAll(); guienv->drawAll(); driver->endScene(); } } removeModels(); return next; }