コード例 #1
0
ファイル: Skybox.cpp プロジェクト: dtbinh/GamePhysics
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;
}
コード例 #2
0
ファイル: game.cpp プロジェクト: cirelin/space
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;
}