Esempio n. 1
0
bool GameState::enter(void* options) 
{
	m_crate = new CTexture();
	std::wstring crateFile = L"../GameData/Textures/woodcrate01.dds";
	m_crate->load(crateFile);

	m_sky = new CTextureCube();
	std::wstring skyFile = L"../GameData/Textures/skybox.dds";
	m_sky->load(skyFile);

	m_grass = new CTexture();
	std::wstring grassFile = L"../GameData/Textures/grass.dds";
	m_grass->load(grassFile);

	m_skybox = new SkyMesh(new CSkySphereGeometry(10, 3), new CSkyBoxMaterial(m_sky));
	m_playerCube = new CubeMesh(CCubeGeometry::getInstance(), new CBasicMaterial(m_crate));
	m_playerCube->translate(glm::vec3(4.95f, 0.0f, 4.95f));
	m_sceneCube = new CubeMesh(CCubeGeometry::getInstance(), new CBasicMaterial(m_crate));
	m_sceneCube->translate(glm::vec3(-2.0f, 0.0f, 3.0f));
	m_ground = new GroundMesh(CQuadGeometry::getInstance(), new CBasicMaterial(m_grass));
	m_ground->translate(glm::vec3(0.0f, -1.0f, 0.0f));

	std::string fontname = "Arial";
	m_font = new CFontWrapper(fontname);

	m_player = new Player();
	m_dirLight = new CLight();

	m_pointLights = new CLight[LIGHT_COUNT];
	m_pointLightDirs = new glm::vec3[LIGHT_COUNT];
	boost::random::mt19937 gen;
	boost::random::uniform_real_distribution<> pos_dist(-20.0f, 20.0f);
	boost::random::uniform_real_distribution<> color_dist(0.2f, 1.0f);
	for (int i = 0; i < LIGHT_COUNT; i++)
	{
		m_pointLights[i].Type = POINTLIGHT;
		m_pointLights[i].LightPosition = glm::vec3(pos_dist(gen), 4.0f, pos_dist(gen));
		m_pointLights[i].LightColor = glm::vec3(color_dist(gen), color_dist(gen), color_dist(gen));
		m_pointLights[i].LightRange = glm::vec4(8.0f, 8.0f, 8.0f, 1.0f);
		m_pointLightDirs[i] = glm::normalize(glm::vec3(pos_dist(gen), 0.0f, pos_dist(gen)));
	}
	m_player->attach(m_playerCube);

	CGeometryData test_data;
	test_data.getPositionVector()->push_back(glm::vec3(1.879789f, 1.23123f, 0.1231231f));
	test_data.getPositionVector()->push_back(glm::vec3(1.122789f, 1.21223f, 3.1231231f));
	test_data.getPositionVector()->push_back(glm::vec3(1.879789f, 1.23123f, 0.1231231f));
	test_data.getPositionVector()->push_back(glm::vec3(1.123789f, 1.23123f, 0.1231231f));
	test_data.getPositionVector()->push_back(glm::vec3(1.879789f, 1.12323f, 0.43431231f));
	test_data.getPositionVector()->push_back(glm::vec3(0.879789f, 1.23123f, 2.1231231f));
	test_data.getPositionVector()->push_back(glm::vec3(0.129789f, 1.23123f, 2.123231f));
	test_data.getPositionVector()->push_back(glm::vec3(1.879789f, 4.23123f, 2.1231231f));
	test_data.getPositionVector()->push_back(glm::vec3(1.879789f, 4.23123f, 2.1231231f));
	test_data.removeDuplicates();

	return true;
}
Esempio n. 2
0
// ---------- begin of function ColorTable::generate_table ----------//
//
// match one set of palette with a universal palette
// the set of palette is pointed by sPal, size is sPalSize,
// with some reserved color pointed by sReservedColor and size is sReservedCount
// the univeral palette is pointed by Pal, size is PalSize,
// with some reserved color pointed by reservedColor and size is reservedCount
// note : numbers in reservedColor must be in ascending order
//
// generated map size must be palSize and it has only scale
//
void ColorTable::generate_table(PalDesc &sPalD, PalDesc &palD)
{
	int sPalSize = sPalD.pal_size, palSize = palD.pal_size;

	err_when(sPalD.pal == NULL || sPalSize <= 0 || sPalD.reserved_count < 0);
	err_when(palD.pal == NULL || palSize <= 0 || palD.reserved_count < 0);
	err_when(palSize > MAX_COLOUR_TABLE_SIZE || sPalSize > MAX_COLOUR_TABLE_SIZE);
	deinit();

	abs_scale = 0;
	table_size = sPalSize;
	WORD *remapEntry = remap_table = (WORD *)mem_add(sPalSize);

	int sReservedIndex = 0;
	for(int c=0; c < sPalSize; ++c, ++remapEntry)
	{
		*remapEntry = c;				// put a default value (as if it is a reserved color)
		
		// ------ see if it is a reserved color --------//
		if( sPalD.is_reserved(c, sReservedIndex))
			continue;

		RGBColor rgb = sPalD.get_rgb(c);

		// ------- scan the closet color, except the reserved color
		int cc, dist[NEAREST_COLOR], thisDiff;
		BYTE closeColor[NEAREST_COLOR]; // [0] is the closest

		for( cc = 0; cc < NEAREST_COLOR; ++cc )
		{
			closeColor[cc] = c;
			dist[cc] = 3*0xff*0xff+1;
		}
		int dReservedIndex = 0;
		int d;
		for( d=0; d < palSize; ++d)
		{
			// ------- skip scanning reserved color ------//
			if( palD.is_reserved(d, dReservedIndex) )
				continue;

			// ------- compare the sqaure distance ----------//
			thisDiff = color_dist(rgb, palD.get_rgb(d));

			if( thisDiff < dist[NEAREST_COLOR-1])
			{
				BYTE d1 = (BYTE) d; 
				for( cc = 0; cc < NEAREST_COLOR; ++cc )
				{
					if( thisDiff < dist[cc] )
					{
						// swap thisDiff and dist[cc]
						// so that the replaced result will be shifted to next
						int tempd;
						BYTE tempc;
						tempd = dist[cc];
						dist[cc] = thisDiff;
						thisDiff = tempd;

						tempc = closeColor[cc];
						closeColor[cc] = d1;
						d1 = tempc;
					}
				}
			}
		}

		// closeColor[] are the closest 8 colours, use hsv comparison to find the nearest
		d = closeColor[0];
		*remapEntry = d;
		int minDiff = color_dist_hsv(rgb, palD.get_rgb(d));
		for( cc = 1; cc < NEAREST_COLOR; ++cc)
		{
			d = closeColor[cc];
			thisDiff = color_dist_hsv(rgb, palD.get_rgb(d));
			if( thisDiff < minDiff )
			{
				minDiff = thisDiff;
				*remapEntry = d;
			}
		}
	}
}