Here is my code to create the Mesh, if I had to take a guess I would say the issue is somewhere in here.
void CQuadTree::CreateRenderMesh(){ // Iterate through and find all the triangles within our range. int triangleCount = 0; vector<CHeightMap::terrainTriangle*>* pTriangles = CHeightMap::GetInstance()->GetTriangleList(); for(unsigned int i = 0; i < pTriangles->size(); ++i) { for (int k = 0; k < 3; ++k) { if(((*pTriangles)->vertices[k].x >= m_iMinX) && ((*pTriangles)->vertices[k].x <= m_iMaxX) && ((*pTriangles)->vertices[k].z >= m_iMinZ) && ((*pTriangles)->vertices[k].z <= m_iMaxZ)) { // One of the Triangles vertices is within range, add the entire triangle. triangleCount++; break; } } } char buffer[256] = {0}; sprintf(buffer, "Render Mesh Create called, NumTriangles %d\n", triangleCount); CLogger::GetInstance()->WriteToFile(buffer); // Make sure we found some Triangles. if(triangleCount) { char buffer[256] = {0}; sprintf(buffer, "Creating Renderable Mesh. Triangle Count: %d\n", triangleCount); CLogger::GetInstance()->WriteToFile(buffer); // Begin Creating the actual Mesh. CHeightMap::terrainVertex* vertex; D3DXCreateMeshFVF((triangleCount * 2),(triangleCount *3), D3DXMESH_MANAGED, D3DFVF_XYZ |D3DFVF_TEX1, CRenderer::GetInstance()->GetDevice(), &m_pMesh); m_pMesh->LockVertexBuffer(0, (void**)&vertex); int vertexIndex = 0; for(unsigned int i = 0; i < pTriangles->size(); ++i) { for (int k = 0; k < 3; ++k) { if(((*pTriangles)->vertices[k].x >= m_iMinX) && ((*pTriangles)->vertices[k].x <= m_iMaxX) && ((*pTriangles)->vertices[k].z >= m_iMinZ) && ((*pTriangles)->vertices[k].z <= m_iMaxZ)) { // Triangle is in range, copy its vertices into our Vertex buffer. vertex[vertexIndex] = (*pTriangles)->vertices[0]; vertex[vertexIndex+1] = (*pTriangles)->vertices[1]; vertex[vertexIndex+2] = (*pTriangles)->vertices[2]; vertexIndex += 3; break; } } } m_pMesh->UnlockVertexBuffer(); WORD* indexBuffer = 0; m_pMesh->LockIndexBuffer(0, (void**)&indexBuffer); for(int i = 0; i < (triangleCount * 3); i++) { indexBuffer = i; } m_pMesh->UnlockIndexBuffer(); DWORD* attributeBuffer = 0; m_pMesh->LockAttributeBuffer(0, &attributeBuffer); for(int i = 0; i < triangleCount; i++) { attributeBuffer = 0; } m_pMesh->UnlockAttributeBuffer(); std::vector<DWORD> adjacencyBuffer(m_pMesh->GetNumFaces() * 3); m_pMesh->GenerateAdjacency(0.001f, &adjacencyBuffer[0]); m_pMesh->OptimizeInplace(D3DXMESHOPT_IGNOREVERTS, &adjacencyBuffer[0], NULL, NULL, NULL); }}
Thoughts?
EDIT:
Log file showing the QuadTree is structured correctly and does find Triangles for the mesh:
CQuadTree Constructor called. MinX: 0, MaxX: 504, MinZ: 0, MaxZ: 504, Level: 0 Splicing, Creating more Children. New Level: 0 CQuadTree Constructor called. MinX: 0, MaxX: 252, MinZ: 0, MaxZ: 252, Level: 1 Splicing, Creating more Children. New Level: 1 CQuadTree Constructor called. MinX: 0, MaxX: 126, MinZ: 0, MaxZ: 126, Level: 2 Render Mesh Create called, NumTriangles 496 Creating Renderable Mesh. Triangle Count: 496 CQuadTree Constructor called. MinX: 126, MaxX: 252, MinZ: 0, MaxZ: 126, Level: 2 Render Mesh Create called, NumTriangles 496 Creating Renderable Mesh. Triangle Count: 496 CQuadTree Constructor called. MinX: 0, MaxX: 126, MinZ: 126, MaxZ: 252, Level: 2 Render Mesh Create called, NumTriangles 512 Creating Renderable Mesh. Triangle Count: 512 CQuadTree Constructor called. MinX: 126, MaxX: 252, MinZ: 126, MaxZ: 252, Level: 2 Render Mesh Create called, NumTriangles 512 Creating Renderable Mesh. Triangle Count: 512 CQuadTree Constructor called. MinX: 252, MaxX: 504, MinZ: 0, MaxZ: 252, Level: 1 Splicing, Creating more Children. New Level: 1 CQuadTree Constructor called. MinX: 252, MaxX: 378, MinZ: 0, MaxZ: 126, Level: 2 Render Mesh Create called, NumTriangles 496 Creating Renderable Mesh. Triangle Count: 496 CQuadTree Constructor called. MinX: 378, MaxX: 504, MinZ: 0, MaxZ: 126, Level: 2 Render Mesh Create called, NumTriangles 465 Creating Renderable Mesh. Triangle Count: 465 CQuadTree Constructor called. MinX: 252, MaxX: 378, MinZ: 126, MaxZ: 252, Level: 2 Render Mesh Create called, NumTriangles 512 Creating Renderable Mesh. Triangle Count: 512 CQuadTree Constructor called. MinX: 378, MaxX: 504, MinZ: 126, MaxZ: 252, Level: 2 Render Mesh Create called, NumTriangles 480 Creating Renderable Mesh. Triangle Count: 480 CQuadTree Constructor called. MinX: 0, MaxX: 252, MinZ: 252, MaxZ: 504, Level: 1 Splicing, Creating more Children. New Level: 1 CQuadTree Constructor called. MinX: 0, MaxX: 126, MinZ: 252, MaxZ: 378, Level: 2 Render Mesh Create called, NumTriangles 512 Creating Renderable Mesh. Triangle Count: 512 CQuadTree Constructor called. MinX: 126, MaxX: 252, MinZ: 252, MaxZ: 378, Level: 2 Render Mesh Create called, NumTriangles 512 Creating Renderable Mesh. Triangle Count: 512 CQuadTree Constructor called. MinX: 0, MaxX: 126, MinZ: 378, MaxZ: 504, Level: 2 Render Mesh Create called, NumTriangles 496 Creating Renderable Mesh. Triangle Count: 496 CQuadTree Constructor called. MinX: 126, MaxX: 252, MinZ: 378, MaxZ: 504, Level: 2 Render Mesh Create called, NumTriangles 496 Creating Renderable Mesh. Triangle Count: 496 CQuadTree Constructor called. MinX: 252, MaxX: 504, MinZ: 252, MaxZ: 504, Level: 1 Splicing, Creating more Children. New Level: 1 CQuadTree Constructor called. MinX: 252, MaxX: 378, MinZ: 252, MaxZ: 378, Level: 2 Render Mesh Create called, NumTriangles 512 Creating Renderable Mesh. Triangle Count: 512 CQuadTree Constructor called. MinX: 378, MaxX: 504, MinZ: 252, MaxZ: 378, Level: 2 Render Mesh Create called, NumTriangles 480 Creating Renderable Mesh. Triangle Count: 480 CQuadTree Constructor called. MinX: 252, MaxX: 378, MinZ: 378, MaxZ: 504, Level: 2 Render Mesh Create called, NumTriangles 496 Creating Renderable Mesh. Triangle Count: 496 CQuadTree Constructor called. MinX: 378, MaxX: 504, MinZ: 378, MaxZ: 504, Level: 2 Render Mesh Create called, NumTriangles 465 Creating Renderable Mesh. Triangle Count: 465