Main
{
	CGame Game
	{
		CFont Font
		CWorld World
		CPlayer Player (Perhaps this should be part of World)
	}
}

To-Do List:
1.1.1 Load my neat-o little map
1.1.2 Render it flat
1.2.1 Load textures called for by the neat-o little map
1.2.2 Render it with those textures

3.1.1 Realize input
3.1.2 Utilize input to move around map
3.2.1 Make a realistic walking structure for my avatar

2.1.1 Load a simple object
2.1.2 Load a complex object called for by the neat-o little map


float CurGroundHeight =	 
	(World->m_TileHeight *																							//Scale by Tile Height
   ((World->m_ElevationData[((GLuint)m_vPos.x/(GLuint)World->m_TileWidth)  ] -										//Get the height of the top-left vertex
	 World->m_ElevationData[((GLuint)m_vPos.x/(GLuint)World->m_TileWidth)+1])										//Get the height of the top-right vertex, and find the difference between the two
* (((GLuint)m_vPos.x % ((GLuint)World->m_TileWidth*World->m_TessLevel)) / (World->m_TileWidth*World->m_TessLevel) + //Find the height on the top edge for how far into the quad we are, x-wise
   ((World->m_ElevationData[((GLuint)m_vPos.x/(GLuint)World->m_TileWidth)  ] -										//Get the height of the top-left vertex
	 World->m_ElevationData[((GLuint)m_vPos.x/(GLuint)World->m_TileWidth)+(World->m_Width*World->m_TessLevel+1)]	//Get the height of the bottom-left vertex, and find the difference between the two
* (((GLuint)m_vPos.y % ((GLuint)World->m_TileWidth*World->m_TessLevel)) / (World->m_TileWidth*World->m_TessLevel))  //Find the height on the top edge for how far into the quad we are, x-wise
	 / 2.0f;

*/
//GLfloat CurGroundHeight = (World->m_TileHeight * ((World->m_ElevationData[((GLuint)m_vPos.x/(GLuint)World->m_TileWidth) ] - World->m_ElevationData[((GLuint)m_vPos.x/(GLuint)World->m_TileWidth)+1]) * (((GLuint)m_vPos.x % ((GLuint)World->m_TileWidth*World->m_TessLevel)) / (World->m_TileWidth*World->m_TessLevel) + ((World->m_ElevationData[((GLuint)m_vPos.x/(GLuint)World->m_TileWidth)  ] - World->m_ElevationData[((GLuint)m_vPos.x/(GLuint)World->m_TileWidth)+(World->m_Width*World->m_TessLevel+1)] * (((GLuint)m_vPos.y % ((GLuint)World->m_TileWidth*World->m_TessLevel)) / (World->m_TileWidth*World->m_TessLevel)) / 2.0f;



// Compute p1,p2,p3 face normal into pOut
bool CPoint::ComputeFaceNormal ( GLint Face, GLpoint *pOut )
{
	if ( Face < 0 || Face > (GLint)m_NumFaces )
		return 0;		//This face must be nonexistant, tell the calling function
	GLpoint *p1, *p2, *p3;
	// Uses p2 as a new origin for p1,p3
	if ( Face % 2 == 0 )
	{
		p1 = &m_Points[Face*3];
		p2 = &m_Points[Face*3+1];
		p3 = &m_Points[Face*3+m_WidthVert+1];
	}
	else
	{
		p1 = &m_Points[(Face-1)*3+m_WidthVert+1];
		p2 = &m_Points[(Face-1)*3+m_WidthVert];
		p3 = &m_Points[(Face-1)*3];
	}

	GLpoint a;
	VectorOffset(p3, p2, &a);
	GLpoint b;
	VectorOffset(p2, p1, &b);
	// Compute the cross product a X b to get the face normal
	VectorGetNormal(&b, &a, pOut);
	return 1;//VectorNormalize(&Normal, pOut);
}

