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++; } } }
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++; } } }