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

02.09.2012, 11:10

selbst modelliertes Model laden

Hi,
Ich habe mir gestern eine Model Klasse geschrieben die so aussieht:

Header:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<d3d9.h>
#include<d3dx9.h>
#include<string>

class Model
{
public:
    void InitModel(LPDIRECT3DDEVICE9 d3ddev);
    void UpdateModel(D3DXVECTOR3 pos,D3DXVECTOR3 scal,D3DXVECTOR3 rot,std::string path);
    void RenderModel(void);
    void CleanModel(void);
private:
    LPDIRECT3DDEVICE9 device;
    LPD3DXMESH mesh;
    LPD3DXBUFFER materialBuffer;
    DWORD numMaterials;
    D3DXMATERIAL* d3dxMaterials;
    D3DMATERIAL9 *meshMaterials;
    LPDIRECT3DTEXTURE9 *meshTextures;
};


Cpp:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include"Model.h"

void Model::InitModel(LPDIRECT3DDEVICE9 d3ddev)
{
    device = d3ddev;
    D3DXLoadMeshFromX("C:\\Team17\\Würfel.x",D3DXMESH_SYSTEMMEM,d3ddev,NULL,&materialBuffer,NULL,&numMaterials,&mesh);
    d3dxMaterials = (D3DXMATERIAL*)materialBuffer->GetBufferPointer();
    meshMaterials = new D3DMATERIAL9[numMaterials];
    meshTextures = new LPDIRECT3DTEXTURE9[numMaterials];
    
    for(DWORD i = 0;i < numMaterials;i++)
    {
        meshMaterials[i] = d3dxMaterials[i].MatD3D;
        meshMaterials[i].Ambient = meshMaterials[i].Diffuse;
        meshTextures[i] = NULL;
        if(d3dxMaterials[i].pTextureFilename)
            D3DXCreateTextureFromFile(d3ddev,d3dxMaterials[i].pTextureFilename,&meshTextures[i]);
    }
}

void Model::RenderModel(void)
{
    for(DWORD i = 0;i < numMaterials;i++)
    {
        device->SetMaterial(&meshMaterials[i]);
        device->SetTexture(0,meshTextures[i]);
        mesh->DrawSubset(i);
    }
}

void Model::CleanModel(void)
{
    materialBuffer->Release();
}

void Model::UpdateModel(D3DXVECTOR3 pos,D3DXVECTOR3 scal,D3DXVECTOR3 rot,std::string path)
{
    D3DXMATRIX world,trans,scale,rotX,rotY,rotZ;

    D3DXMatrixTranslation(&trans,pos.x,pos.y,pos.z);
    D3DXMatrixScaling(&scale,scal.x,scal.y,scal.z);
    D3DXMatrixRotationX(&rotX,rot.x);
    D3DXMatrixRotationY(&rotY,rot.y);
    D3DXMatrixRotationZ(&rotZ,rot.z);
    world = scale*rotX*rotY*rotZ*trans;
    device->SetTransform(D3DTS_WORLD,&world);
}


Ich habe den Würfel verändert und als x Datei exportiert. Aber wenn ich es in DirectX laden will dann wird der Würfel unverändert gezeichnet.
Danke im Voraus.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BreakBlack« (02.09.2012, 11:21)


FSA

Community-Fossil

  • Private Nachricht senden

2

02.09.2012, 11:45

Sicher, dass der Dateiname korrekt ist? Du könntest außerdem prüfen, ob dein Modell wirklich geladen wurde und nicht noch das alte im Speicher ist(weiß nicht genau, ob du es wieder löschst).

MSDN: D3DXLoadMeshFromX
Type: HRESULT
If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be one of the following values: D3DERR_INVALIDCALL, E_OUTOFMEMORY.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

3

02.09.2012, 12:05

Habe den Teil mit D3DXLoadMeshFromX so geändert:

Quellcode

1
HRESULT hr = D3DXLoadMeshFromX("C:\\Team17\\Würfel.x",D3DXMESH_SYSTEMMEM,d3ddev,NULL,&materialBuffer,NULL,&numMaterials,&mesh);

Dann hab ich dahinter ein Breakpoint gesetzt. hr hat den Wert S_OK.
Ich habe jetzt eine x Datei mit den Würfel und mit den veränderten Würfel exportiert. Wenn ich es mit einen Editor öffne, steht im veränderten Würfel das gleiche wie im normalen Würfel.

FSA

Community-Fossil

  • Private Nachricht senden

4

02.09.2012, 13:07

Dann ist der Würfel nicht verändert.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

5

02.09.2012, 13:46

http://www.imagebanana.com/view/9okdbh4m/ddd.png
Hier hab ich mal ein Würfel bischen übertrieben verändert.
Wenn ich das als x Datei exportiere wird es wieder zum normalen Würfel.

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

6

02.09.2012, 13:59

Schau Dir das Änderungsdatum der Datei an. Evtl. speicherst Du aus Versehen woanders hin, als Dein Programm nachher liest.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

7

02.09.2012, 14:19

Das Änderungsdatum verändert sich wenn ich es da erneut exportiere aber der Würfel bleibt gleich...
Muss man vielleicht bei Blender noch irgendwas umstellen wenn man eine x Datei exportieren will? (Außer bei Import-Export: DirectX Model Format (.x) ein Häkchen zu machen)

8

02.09.2012, 15:55

Kann man Dateien im .x Format nicht in einem Texteditor öffnen? Schau doch einfach mal rein ob es eher "gleichäßige" Koordinaten sind oder "das reinste Chaos" :)
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

9

02.09.2012, 16:55

Zitat

Kann man Dateien im .x Format nicht in einem Texteditor öffnen?

Wenn sie binär gespeichert sind, dann nicht.

FSA

Community-Fossil

  • Private Nachricht senden

10

02.09.2012, 18:48

Blender macht das nicht binär. ( Nicht aus Standrad zumindest )

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige