Du bist nicht angemeldet.

Werbeanzeige

1

29.05.2004, 12:38

3DS-File-Loader

Hi,

Seit ner Woche arbeite ich so zum Zeitvertreib an einem Pogramm, welches 3DS-Files laden kann um sie dann als komplette Outdoor-Indoor-Portal-Sektor-Level( :) ) zu exportieren.

Leider funktioniert ist das Laden nicht so richtig:

Ich mache das so (wie in tb3DSFile):

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
int C3DSFile::Init(string sFilename)
{
    fstream             File;
    C3DSChunkHeader     ChunkHeader;

    File.open(sFilename.c_str(), ios::in|ios::binary);

    while(File.good() && !File.eof())
    {
        if(!File.read(reinterpret_cast<char*>(&ChunkHeader), sizeof(C3DSChunkHeader)))
            ERROR_MESSAGE("!File.read", -1);

        switch(ChunkHeader.m_wChunkID)
        {

        case 0x4D4D:
            
            // WARUM HIER NICHTS???

        break;

        case 0x3D3D:
            
            // WARUM HIER NICHTS???

        break;

        case 0xAFFF:
            
            // MACHWAS
        
        break;

        case 0x4000:    
        
            // MACHWAS

        break;

        case 0x4100:
        
            // MACHWAS

        break;

        case 0x4600:
        
            // MACHWAS

        break;

        default:

            if(!File.seekg(static_cast<int>(File.tellg()) + ChunkHeader.m_dwChunkSize - sizeof(C3DSChunkHeader)))
                ERROR_MESSAGE("!File.seekg", -1);
        
        break;

        }
    }

    return 0;


So, jetzt ist das Problem, dass nach dem ersten oder zweiten Chunk nur noch Müll rauskommt (von den Chunkdaten her), und die Datei dann zuende ist.

z.B. bei der 3DS-File city.3ds von Davids Buch (ich glaube Kapitel 3.2 oder so) sieht Ausgabe sieht so aus.

Chunksize, ChunkID
131074 19789 (0x4D4D)
3 10 (?, überspringen)
1631403264 768 (?, überspringen)
FEHLER: !File.read

erkennt jemand das Problem?

danke,

Chrissi

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

2

29.05.2004, 15:03

Chunksize 131074? Komisch. Das ist übrigens in Hex 20002. Vielleicht ist die oberste 2 ein Flag?
"Games are algorithmic entertainment."

3

31.05.2004, 21:27

Ich hab es jetzt. ich nutze eine Klasse für ChunkHeader, und die ist ja bekanntlich immer größer als die Größe der einzelnen Membervariablen! Daran lags. Ich muss jetzt anstatt sizeof(C3DSChunkHeader) sizeof(WORD) + sizeof(DWORD) nehmen und die Varialben ändern, und schon funktionierts!

Ich habe jetzt aber mal ein anderes Problem (wo mir sicher nur David weiterhelfen kann!)

Es gibt ja in der Datei 3DSReader.cpp eine Funktion GenerateRawData. Wie schafft es die TriBase-Engine, die vielen Schleifen dort so schnell auszuführen. Man muss mal bedenken. Ein Material mit 2000 Vertices wird locker in 2 Sekunden von meinem Computer bearbeitet. (Wobei sicher so 20000 Rechenoperationen ausgeführt werden). Wenn ich aber (fast) genau den selben Code in meiner Anwendung aufrufe, muss ich mit 10min rechnen. bis das Ergebnis da ist!

Ich hoffe, ich habe mich klar ausgedrückt,

danke,
Chrissi

Werbeanzeige