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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

21

02.06.2009, 09:00

Zitat von »"PatrickB"«

Mein Problem ist jetzt, dass der Anfangswert eines Vertices ja nicht immer 0 ist bzw. pvoid. Also würd ich jetzt mit VertexStart angeben wollen, wo angefangen werden soll nach Minimum und Maximum zu suchen. Aber pAttribTable.VertexStart ist vom Typ DWORD.

Also weiß ich jetzt nicht wie ich der Funktion sagen kann wo sie anfangen soll :-/


Zähl einfach immer den VertexCount des vorangegangenen subset dazu. Das sollte dir nen Pointer auf den Anfang des aktuellen Subset geben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
meshModel->GetAttributeTable(pAttribTable, &dwTableSize); 


UINT vertex_stride = D3DXGetFVFVertexSize(meshModel->GetFVF());
char* vertices;

boundbox = new sboundbox[dwTableSize]; 

meshModel->LockVertexBuffer(D3DLOCK_READONLY, (LPVOID*)&vertices); 

for(i = 0; i < dwTableSize; i++) 
{ 
  D3DXComputeBoundingBox((D3DXVECTOR3*)pvoid, 
                         pAttribTable[i].VertexCount, 
                         vertex_stride,
                         &boundbox[i].MinBounds, 
                         &boundbox[i].MaxBounds);
  vertices += vertex_stride;
} 

meshModel->UnlockVertexBuffer(); 

22

02.06.2009, 10:54

Irgendwie klappt das immer noch nicht so ganz so wie das da steht.

Das 1. Subset wird immer richtig gezeichnet aber die restlichen sind falsch weil das Minimum und Maximum nicht stimmt =(



EDIT:

Juhu, endlich. Durch einen Zufall hab ich jetzt herausgefunden wie es funktioniert. Nur weiß ich nicht wieso es jetzt so funktioniert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    DWORD add = 0;

    meshModel->LockVertexBuffer(D3DLOCK_READONLY, (LPVOID*)&pvoid);

    for(i = 0; i < dwTableSize; i++)
    {
        D3DXComputeBoundingBox((D3DXVECTOR3*)pvoid + add,
                            pAttribTable[i].VertexCount,
                            D3DXGetFVFVertexSize(meshModel->GetFVF()),
                            &boundbox[i].MinBounds,
                            &boundbox[i].MaxBounds);

        add += pAttribTable[i].VertexCount*2;
}

23

02.06.2009, 13:29

Ok, hab wieder eine neue Frage:

Wie kann ich auf die einzelnen Vertices eines Meshes zugreifen?

Also ich will ein Terrain erstellen auf dem Objekte bewegt werden können. Und wenn das Terrain eine Erhöhung hat, muss das Objekt auch nach oben verschoben werden.

Wie genau ich das berechnen muss weiß ich (http://www.toymaker.info/Games/html/terrain_follow.html) aber dazu brauche ich immer die 3 Koordinaten eines Dreiecks um daraus eine Ebene auszurechnen und so den Schnittpunkt bestimmen zu können.

Kann mir jemand sagen wie ich immer die 3 Koordinaten eines Vertices geliefert bekomme, aus einem X File heraus?

Danke schonmal!

Spy

Frischling

  • Private Nachricht senden

24

19.06.2009, 21:51

Zitat von »"PatrickB"«

Und wie berechne ich die? (Bounding Box)


Einfach den kleinsten(kleinste X,Y und Z Komponente) und größten(größte X,Y,Z Komponente) Vektor herausfinden und die zwei Vektoren speichern. Das wären dann eigentlich auch schon die brisantesten Daten, die du für eine Bounding Box brauchst.
MfG Spy
Mein GE-Projekt

Werbeanzeige