Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

19.10.2003, 15:17

Blöde IndexBuffer

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.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

2

19.10.2003, 19:07

wieso unterstüzt d3d nur 16bit-indizes.?

"D3DFMT_INDEX32 102 32-bit index buffer bit depth. "

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

19.10.2003, 19:20

Stephan meinte wahrscheinlich, dass man vielleicht lieber auf 32-Bit-Indizes verzichten sollte, weil sehr viele Grafikkarten nicht damit zurechtkommen.

4

19.10.2003, 19:22

Zwar kann man auch 32Bit Indices verwenden, aber in der MSDN steht das der man nur max 16Bit nutzen kann. Ich schätze das gilt dann aber auch nur dann wenn man d3d in Software nutzt. Warum sonst sollte d3d denn auch diese Information von der Graka hollen.

Zitat

Maximum size of indices supported for hardware vertex processing. It is possible to create 32-bit index buffers by specifying D3DFMT_INDEX32; however, you will not be able to render with the index buffer unless this value is greater than 0x0000FFFF


Das ist die Übersetzung

Zitat

Maximale Größe der Indizes gestützt für die Kleinteilgipfelverarbeitung. Es ist möglich, 32-bit Indexpuffer zu verursachen, indem man D3DFMT_INDEX32 spezifiziert; jedochSIND Sie nicht in der Lage, mit dem Indexpuffer zu übertragen, es sei denn dieser Wert grösser als 0x0000FFFF ist
;D schön ist die Übersetzung von hardware vertex processing, aber auch der zweite Satz ist ganz nett :roll:
@google.de Sprachtool
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

5

20.10.2003, 18:37

Das Problem hat sich erledigt. Der Fehler ist mal wieder nur eine dumme Kleinigkeit.

Quellcode

1
TB_DXASSERT(D3DDevice()->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, m_uiVertexCount, 0, m_uiVertexCount / 3));
Der vierte Parameter m_uiVertexCount, hier gehört nicht die Anzahl der Vertice die gerendert werden sollen sondern die Anzahl der Vertice des gesamten Terrains.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige