Ejemplo n.º 1
0
void FlatLand::setupVertexAndTriangleData()
{
	//
	// Create the vertices (a "heightfield" of triangles)
	//
	{
		const float borderHeight = getBorderHeight();
		{
			for(int i = 0; i < m_side; i++)
			{
				for (int j = 0; j < m_side; j++ )
				{ 

					float h = getHeight( i, j );

					m_vertices[(i * m_side + j) * 4  + 0] = i * 1.0f - m_side * 0.5f;
					m_vertices[(i * m_side + j) * 4  + 1] = h;
					m_vertices[(i * m_side + j) * 4  + 2] = j * 1.0f - m_side * 0.5f;
					m_vertices[(i * m_side + j) * 4  + 3] = 0.0f;	// we need to set this to avoid denormals on P4
				}
			}
		}
		//
		//	Add a border
		//
		{
			for(int i = 0; i < m_side; i++)
			{
				m_vertices[ (          i * m_side + 0     ) * 4  + 1] = borderHeight;
				m_vertices[ (          i * m_side + m_side-1) * 4  + 1] = borderHeight;
				m_vertices[ ( (m_side-1) * m_side + i       ) * 4  + 1] = borderHeight;
				m_vertices[ (i                ) * 4  + 1] = borderHeight;
			}
		}
	}

	//
	// Create the triangles
	//
	{
		hkUint16 corner = 0;
		int index = 0;
		for(int i = 0; i < m_side - 1; i++)
		{
			for (int j = 0; j < m_side - 1; j++ )
			{
				m_indices[index]     = hkUint16(corner);
				m_indices[index + 1] = hkUint16(corner + 1);
				m_indices[index + 2] = hkUint16(corner + m_side);
				// m_indices[index + 3] Dummy

				m_indices[index + 4] = hkUint16(corner + 1);
				m_indices[index + 5] = hkUint16(corner + m_side + 1);
				m_indices[index + 6] = hkUint16(corner + m_side);
				// m_indices[index + 7] Dummy

				index += 8;
				corner++; 
			}
			corner++; 
		}
	}
}
Ejemplo n.º 2
0
void TowerLand::setupVertexAndTriangleData()
{
	//
	// Create the vertices (a "heightfield" of triangles)
	//
	{
		const float borderHeight = getBorderHeight();
		{
			for(int i = 0; i < m_side; i++)
			{
				for (int j = 0; j < m_side; j++ )
				{ 

					float h = getHeight( i, j );

					m_vertices[ (i * m_side + j) * 4  + 0 ] = ((i - m_side * 0.5f) / m_side) * m_size;
					m_vertices[ (i * m_side + j) * 4  + 1 ] = h;
					m_vertices[ (i * m_side + j) * 4  + 2 ] = ((j - m_side * 0.5f) / m_side) * m_size - ( (i%2) * m_shift);
					m_vertices[ (i * m_side + j) * 4  + 3 ] = 0.0f;	// we need to set this to avoid denormals on P4
				}
			}
		}
		//
		//	Add a border
		//
		{
			for(int i = 0; i < m_side; i++)
			{
				m_vertices[ (i * m_side + 0     )                 * 4  + 1] = borderHeight;
				m_vertices[ (i * m_side + m_side-1)               * 4  + 1] = borderHeight;
				m_vertices[ ( (m_side-1) * (m_side-1) + i       ) * 4  + 1] = borderHeight;
				m_vertices[ (i                                  ) * 4  + 1] = borderHeight;
			}
		}
	}

	//
	// Create the triangles
	//
	{
		hkUint16 corner = 0;
		int index = 0;
		for(int i = 0; i < m_side - 1; i++)
		{
			for (int j = 0; j < m_side - 1; j++ )
			{
				m_indices[index]     = hkUint16(corner);
				m_indices[index + 1] = hkUint16(corner + 1);
				m_indices[index + 2] = hkUint16(corner + m_side);
				m_indices[index + 3] = 0; // padding needed for spus

				m_indices[index + 4] = hkUint16(corner + 1);
				m_indices[index + 5] = hkUint16(corner + m_side + 1);
				m_indices[index + 6] = hkUint16(corner + m_side);
				m_indices[index + 7] = 0; // padding needed for spus

				index += 8;
				corner++; 
			}
			corner++; 
		}
	}
}