Diese IndexBuffer treiben mich noch zum Wahnsinn. Zur groben Übersicht. Ich hab einen Großen VertexBuffer in dem das Gesamte Terrain gespeichert ist. Dann hab ich einen Quadtree in dem jeder Leaf einen IndexBuffer enthält um den enthaltenen Terrain Bereich zu Rendern. Allerdings bleibt der Bildschirm nur Blau :cussing:
Erst hatte ich ein Terrain der Größe 256x256 und damit ein gesamtaufkommen der Indices von 390.150. Allerdings hat jeder Leaf nur einen Bruchteil davon gespeichert. Zwar sind in D3D nur Max 16Bit Indices erlaubt aber meine Graka erlaubt über 1.000.000 Indices auf einmal. Jetzt hab ich mein Terrain auf 64x64 geschrumpft, sind also nur noch 23.814 Indices und damit auf jeden fall im Gültigen Bereich. Aber immer noch nischt. Dann hab ich mein Terrain als Punktliste anzeigen lassen. Das geht Prima und alls wird Ordnungsgemäs gerendert. Sowohl Kamera als auch der VertexBuffer laufen korrekt. Dann hab ich mir ein Assert Makro für DX gebastelt, aber keine Fehlermeldungen.
Die ersten Indices sind auch Korrekt und da alles Rekursiv erzeugt wird, stimmen auch die restlichen Indices. Der IndexBuffer wird auch gesetzt und gerendert.
Dann hab ich mir die Framerate ausgeben lassen. Die sagt mir das auf jedenfall etwas gerendert wurde, nur sieht man nischt.
Hier mal der Rendercode
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
void Terrain::Node::Check(const gtl::vector3& vPoint)
{
// if(!gtl::PointHitsAABBox(m_BoundingBox, vPoint))
// return;
if(m_bIsLeaf)
{
TB_DXASSERT(D3DDevice()->SetIndices(m_pIndices));
TB_DXASSERT(D3DDevice()->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, m_uiVertexCount, 0, m_uiVertexCount / 3));
}
else
{
m_pNode1->Check(vPoint);
m_pNode2->Check(vPoint);
m_pNode3->Check(vPoint);
m_pNode4->Check(vPoint);
}
}
|
m_uiVertexCount ist die Anzahl der Vertice im Leaf.