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

28.05.2009, 11:52

*.X File in eine Klasse laden

Hi,

ich bin gerade dabei Modelle auf Kollisionen zu prüfen.
Dazu brauche ich natürlich auch die Koordinaten der Modelle.
Bis jetzt lade ich das X File noch so:


C-/C++-Quelltext

1
LPD3DXMESH meshSpaceship;

C-/C++-Quelltext

1
2
3
4
5
6
7
8
D3DXLoadMeshFromX("cube.x",    // load this file

                  D3DXMESH_SYSTEMMEM,    // load the mesh into system memory

                  d3ddev,    // the Direct3D Device

                  NULL,    // we aren't using adjacency

                  &bufShipMaterial,    // put the materials here

                  NULL,    // we aren't using effect instances

                  &numMaterials,    // the number of materials in this model

                  &meshSpaceship);    // put the mesh here


Aber jetzt brauche ich ja eine Klasse um die genauen Daten wie Roationsfaktor, Streckungsfaktor, Koordinaten, einzuspeichern.

Wie muss ich die Klasse erstellen und dann wie bekomme ich die Daten dann aus dem X File geliefert?

Gibt es vielleicht einen guten Beispielcode dafür? Suche schon seit Tagen aber habe noch nichts gefunden was mir wirklich weitergeholfen hat.

Mfg

PatrickB

2

28.05.2009, 12:19

Als Denkanstoß. ;)
http://www.chadvernon.com/blog/tutorials/directx9/loading-a-static-mesh-x-format/
fka tm

3

28.05.2009, 17:32

Ja, das Tutorial ist schon mal nicht schlecht, aber ich weiß immer noch nicht wie ich damit jetzt 2 Modelle auf Kollision untersuchen soll.
Ich will später mit Bounding Boxes arbeiten, also die Kollision würde dann nur die Berechnung zwischen Quadern und Quadern und auch Kreisen erfordern. Aber dazu brauche ich ja die einzelnen Koordinaten so wie sie im X File drin stehen.

4

28.05.2009, 17:42

Beim Laden der Modelle Boundingbox/-Sphere berechnen und in der Klasse (Instanz) speichern.

Die Kollisionen finden in Weltkoordinaten statt.

Die aktuelle Position der Modelle kannst du ebenfalls in der Klasse abspeichern.
fka tm

5

28.05.2009, 17:43

Und wie berechne ich die?

6

28.05.2009, 17:49

Die Boundingbox?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
    void* pVertices = NULL;

    m_Mesh->LockVertexBuffer(D3DLOCK_READONLY, (LPVOID*)&pVertices);

    D3DXComputeBoundingBox( (D3DXVECTOR3*)pVertices, 
                            m_dwNumVertices, 
                            D3DXGetFVFVertexSize(m_dwFVF), 
                            &m_vMinBounds, 
                            &m_vMaxBounds);

    m_Mesh->UnlockVertexBuffer();


Siehe auch DX-Doku D3DXComputeBoundingBox
Oder google mal danach...
fka tm

7

28.05.2009, 17:57

Jaaaaaaaa!! Ich glaub das ist das was ich gesucht habe =)

Nun ist das aber noch so, dass ich z.B. für einen Tisch nicht nur eine Box haben will sondern 2 (für den Fuß und die Platte). Die kann man ja auch in einem X File speichern.

Also sozusagen hab ich dann 2 Models (die Quader) in einer X File Datei drin und will jede einzeln laden. So wie wenn ich 2 Subsets habe. Wie mach ich das? Muss ich dann D3DXComputeBoundingBox in eine Schleife packen so wie wenn ich die Materialien zuordne:

C-/C++-Quelltext

1
2
3
4
5
    for(DWORD i = 0; i < numMaterials; i++)    // for each material...

    {
        material[i] = tempMaterials[i].MatD3D;    // get the material info

        material[i].Ambient = material[i].Diffuse;    // make ambient the same as diffuse

    }


Oder geht das anderst?

Danke schonmal!

8

28.05.2009, 18:03

D3DXComputeBoundingBox berechnet das ganze Mesh.

Also entweder Modell splitten, oder die Boxen für die Subsets selbst berechnen.
Also alle Vertices durchlaufen und die Min-/Max-Werte ermitteln und speichern.
fka tm

9

28.05.2009, 18:36

Wie kann ich die Modelle splitten? Oder meinst du extra Dateien anlegen?

10

28.05.2009, 18:41

Extra Dateien, oder Mesh laden und die Subsets auf separate Meshes verteilen.
fka tm

Werbeanzeige