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

16.05.2005, 14:53

Problem mit Blender-Model

Hallo Leute, ich geb ja zu, ich bin im Moment Dauergast hier aber bis zum ersten Spiel ist's halt sehr kompliziert.
Arbeitet hier jemand mit Blender? Ich hab mir ein kleines Model gemacht und als X-Datei exportiert aber das Programm stürzt ab, wenn ich mir die Texturen und Materialien noch mit reinlade (die ich in Blender eingestellt habe). Ich verstehe nicht, was ich falsch mache. Ich hab eigentlich alle Schritte des Samples vom DX SDK befolgt.

Ich bin mir sicher, es liegt an den Materialien, denn ohne Materialien funktioniert's.

Kennt sich da jemad mit aus?
Mein Projekt: Rise of the Sylvan

Samuel G.

Treue Seele

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

2

18.05.2005, 20:41

Beitrag

Nun ja,...


Bist du sicher, dass der Fehler an Blender liegt?
Wie sieht den dein "Programm" aus (verwendete Engine,...)? Hier wären zusätzl. Informationen sinnvoll!
Quak

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

3

18.05.2005, 21:57

Vielleicht ein Pfad Problem und er findet die Texturen nicht? Kommt dann eine vernünftige Fehlermeldung?
"Games are algorithmic entertainment."

4

19.05.2005, 15:38

Das Programm orientiert sich an dem Meshes-Tutorial des DirectX-SDK. Das seltsame ist, das vorgefertigte Mesh Tiger.x funktioniert. Meine Texturen liegen im gleichen Ordner, wie die x-Datei.
Außerdem lässt sich mein Mesh ganz normal mit MeshView öffnen (mit Texturen!). Ich benutze keine Engine, nur D3DX.
Die globalen Variablen:

C-/C++-Quelltext

1
2
3
4
5
6
LPDIRECT3D9             g_pD3D=NULL;
LPDIRECT3DDEVICE9       g_pD3DDevice=NULL;
LPD3DXMESH              g_pMesh=NULL;
D3DMATERIAL9*           g_pMaterials=NULL;
LPDIRECT3DTEXTURE9*     g_pTextures=NULL;
DWORD                   g_dwNumMat;

Hier ist der Hauptteil der Init-Methode:

C-/C++-Quelltext

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
LPD3DXBUFFER pd3dxMatBuf;
    if(FAILED( D3DXLoadMeshFromX( "Test.x", D3DXMESH_MANAGED, 
                                   g_pD3DDevice, NULL, 
                                   &pd3dxMatBuf, NULL, &g_dwNumMat, 
                                   &g_pMesh)))
    {
        MessageBox(NULL, "Could not find tiger.x", "Meshes.exe", MB_OK);
        return E_FAIL;
    }

    D3DXMATERIAL* d3dxMat=(D3DXMATERIAL*)pd3dxMatBuf->GetBufferPointer();
    g_pMaterials = new D3DMATERIAL9[g_dwNumMat];
    g_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMat];
    for (DWORD i=0; i<g_dwNumMat; i++)
    {
        g_pMaterials[i]=d3dxMat[i].MatD3D;
        g_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;
        g_pTextures[i]=NULL;
        if (FAILED(D3DXCreateTextureFromFile(g_pD3DDevice,d3dxMat[i].pTextureFilename,
                                            &g_pTextures[i])))
        {
            return E_FAIL;
        }
    }

    pd3dxMatBuf->Release();

Und so wird es dann gerendert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
g_pD3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,150), 1.0f, 0 );

    g_pD3DDevice->BeginScene();
    
    for (DWORD i=0; i<g_dwNumMat; i++)
    {
        g_pD3DDevice->SetMaterial(&g_pMaterials[i]);
        g_pD3DDevice->SetTexture(0,g_pTextures[i]);
        g_pMesh->DrawSubset(i);
    }
g_pD3DDevice->EndScene();

    g_pD3DDevice->Present( NULL, NULL, NULL, NULL );
Mein Projekt: Rise of the Sylvan

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

5

19.05.2005, 20:06

Schau halt im Debugger ob D3DXCreateTextureFromFile fehlschlägt und wenn ja schau Dir d3dxMat.pTextureFilename an. Ein beliebtes Problem sind absolute Pfade in Texturnamen, manche Programme ignorieren Sie (und finden dann die texturen, die im modellpfad sind) und manche nicht.
"Games are algorithmic entertainment."

6

20.05.2005, 14:24

Du hast recht. pTextureFileName hat keinen Inhalt. Irgendwie bekommt der den Texturnamen nicht aus der x-Datei gezogen, denn wenn ich anstellen von pd3dxMat.pTextureFilename einen String wie "Texture2.bmp" einsetze, geht es.

Aber was mache ich da?
Mein Projekt: Rise of the Sylvan

7

21.05.2005, 22:32

Also ich hab jetzt mal die 3ds-Datei in ein tbm-Model umgewandelt und die tbModel-Klasse der TriBase-Engine benutzt - und es funktioniert. Das heißt es liegt nicht am Modell, sondern an der Ladefunktion. Aber was ist das falsch? Wie ladet ihr éuch denn die X-Dateien?
Mein Projekt: Rise of the Sylvan

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

8

04.07.2005, 20:26

gibt es nicht verschiedene arten von .x-dateien? ich meine von der verschlüsselug her? ich hab glaub mal irgendwo was darüber gelesen..kann es sein das die .x-datei binär oder als nativer text verschlüsselt werden kann?

Werbeanzeige