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

Phili

unregistriert

1

22.01.2006, 12:23

Konvertierung des xFormates fehlerhaft

Ich hab probiert ein Konvertierungsprogramm von .x in mein eigenes, sehr einfaches .ph Format zu schreiben.

Ich entferne erst alle ';' und ',' speichere die Zwischendatei als .a und fahre denn mit der .a Datei fort.
Funktioniert aber nicht, weil es zu beginn der Funktion zum Umwandeln der .a in die .ph Datei mit der Meldung "Konverter hat ein Problem festgestellt und muss beendet werden"abstürtzt.
Der Code:

PHKonvert

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
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#include <fstream>
using namespace std;

ifstream ifs;
ofstream ofs;
ofstream Prot("Protokoll.txt");

void Format(char Name[], char Endung[])
{
    Prot<<"Format von "<<Name<<endl;
    int i;
    for(i = 0; i < 100; i++)
    {
        if(Name[i]=='.')
        {
            Endung[0]=Name[i+1];
            Endung[1]=Name[i+2];
            Endung[2]=Name[i+3];
            Endung[3]='\0';
        }
    }
    Prot<<"\tFormat: ."<<Endung<<endl<<endl;
}

void XzuA(char ifsfile[], char ofsfile[])
{
    Prot<<"Konvertierung von "<<ifsfile<<" zu "<<ofsfile<<endl;
    ifs.open(ifsfile);
    ofs.open(ofsfile);
    Prot<<"\tDateien geoeffnet"<<endl;
    int i;
    char str[100];
    Prot<<"\tStarte Konvertierung"<<endl;
    while(!ifs.fail())
    {
        ifs>>str;
        for(i = 0; i < 100; i++)
        {
            if(str[i]==',')str[i]=' ';
            if(str[i]==';')str[i]=' ';
        }
        ofs<<str<<endl;
    }
    Prot<<"\tKonvertierung abgeschlossen"<<endl;
    ifs.close();
    ofs.close();
    Prot<<"\tDateien geschlossen"<<endl<<endl;
}

void AzuPH(char ifsfile[], char ofsfile[])
{
    Prot<<"Konvertierung von "<<ifsfile<<" zu "<<ofsfile<<endl;
    ifs.open(ifsfile);
    ofs.open(ofsfile);
    Prot<<"\tDateien geoeffnet"<<endl;
    int i;
    float Pos[3][100000]; int PosMenge=0;
    float Nor[3][100000]; int NorMenge=0;
    float vec[3][100000];
    char str[100];
    int a; int b; 
    int Index;
    Prot<<"Starte Konvertierung"<<endl;
    while(!ifs.fail())
    {
        ifs>>str;
        if(str=="Mesh")
        {
            ifs>>str;
            if(str!="{")ifs>>str;
            ifs>>a;
            for(i = 0; i < a; i++)
            {
                ifs>>vec[0][a];
                ifs>>vec[1][a];
                ifs>>vec[2][a];
            }
            ifs>>a;
            for(i = 0; i < a; i++)
            {
                ifs>>b;
                if(b == 3)
                {
                    ifs>>Index;
                    Pos[0][PosMenge] = vec[0][Index];
                    Pos[1][PosMenge] = vec[1][Index];
                    Pos[2][PosMenge] = vec[2][Index];
                    PosMenge+=1;
                    ifs>>Index;
                    Pos[0][PosMenge] = vec[0][Index];
                    Pos[1][PosMenge] = vec[1][Index];
                    Pos[2][PosMenge] = vec[2][Index];
                    PosMenge+=1;
                    ifs>>Index;
                    Pos[0][PosMenge] = vec[0][Index];
                    Pos[1][PosMenge] = vec[1][Index];
                    Pos[2][PosMenge] = vec[2][Index];
                    PosMenge+=1;
                }
                if(b==4)
                {
                    ifs>>Index;
                    Pos[0][PosMenge] = vec[0][Index];
                    Pos[1][PosMenge] = vec[1][Index];
                    Pos[2][PosMenge] = vec[2][Index];
                    PosMenge+=1;
                    ifs>>Index;
                    Pos[0][PosMenge] = vec[0][Index];
                    Pos[1][PosMenge] = vec[1][Index];
                    Pos[2][PosMenge] = vec[2][Index];
                    PosMenge+=1;
                    ifs>>Index;
                    Pos[0][PosMenge] = vec[0][Index];
                    Pos[1][PosMenge] = vec[1][Index];
                    Pos[2][PosMenge] = vec[2][Index];
                    PosMenge+=1;
                    Pos[0][PosMenge] = Pos[0][PosMenge-1];
                    Pos[1][PosMenge] = Pos[1][PosMenge-1];
                    Pos[2][PosMenge] = Pos[2][PosMenge-1];
                    PosMenge+=1;
                    ifs>>Index;
                    Pos[0][PosMenge] = vec[0][Index];
                    Pos[1][PosMenge] = vec[1][Index];
                    Pos[2][PosMenge] = vec[2][Index];
                    PosMenge+=1;
                    Pos[0][PosMenge] = Pos[0][PosMenge-5];
                    Pos[1][PosMenge] = Pos[0][PosMenge-5];
                    Pos[2][PosMenge] = Pos[0][PosMenge-5];
                    PosMenge+=1;
                }
            }
        }
        if(str=="MeshNormal")
        {
            ifs>>str;
            if(str!="{")ifs>>str;
            ifs>>a;
            for(i = 0; i < a; i++)
            {
                ifs>>vec[0][a];
                ifs>>vec[1][a];
                ifs>>vec[2][a];
            }
            ifs>>a;
            for(i = 0; i < a; i++)
            {
                ifs>>b;
                if(b == 3)
                {
                    ifs>>Index;
                    Nor[0][NorMenge] = vec[0][Index];
                    Nor[1][NorMenge] = vec[1][Index];
                    Nor[2][NorMenge] = vec[2][Index];
                    NorMenge+=1;
                    ifs>>Index;
                    Nor[0][NorMenge] = vec[0][Index];
                    Nor[1][NorMenge] = vec[1][Index];
                    Nor[2][NorMenge] = vec[2][Index];
                    NorMenge+=1;
                    ifs>>Index;
                    Nor[0][NorMenge] = vec[0][Index];
                    Nor[1][NorMenge] = vec[1][Index];
                    Nor[2][NorMenge] = vec[2][Index];
                    NorMenge+=1;
                }
                if(b==4)
                {
                    ifs>>Index;
                    Nor[0][NorMenge] = vec[0][Index];
                    Nor[1][NorMenge] = vec[1][Index];
                    Nor[2][NorMenge] = vec[2][Index];
                    NorMenge+=1;
                    ifs>>Index;
                    Nor[0][NorMenge] = vec[0][Index];
                    Nor[1][NorMenge] = vec[1][Index];
                    Nor[2][NorMenge] = vec[2][Index];
                    NorMenge+=1;
                    ifs>>Index;
                    Nor[0][NorMenge] = vec[0][Index];
                    Nor[1][NorMenge] = vec[1][Index];
                    Nor[2][NorMenge] = vec[2][Index];
                    NorMenge+=1;
                    Nor[0][NorMenge] = Nor[0][NorMenge-1];
                    Nor[1][NorMenge] = Nor[1][NorMenge-1];
                    Nor[2][NorMenge] = Nor[2][NorMenge-1];
                    NorMenge+=1;
                    ifs>>Index;
                    Nor[0][NorMenge] = Nor[0][Index];
                    Nor[1][NorMenge] = Nor[1][Index];
                    Nor[2][NorMenge] = Nor[2][Index];
                    NorMenge+=1;
                    Nor[0][NorMenge] = Nor[0][NorMenge-5];
                    Nor[1][NorMenge] = Nor[0][NorMenge-5];
                    Nor[2][NorMenge] = Nor[0][NorMenge-5];
                    NorMenge+=1;
                }
            }
        }
    }
    Prot<<"\tKonvertierung abgeschlossen"<<endl;
    ifs.close();
    ofs.close();
    Prot<<"\tDateien geschlossen"<<endl<<endl;
} 


main:

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
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
#include "PHKonvert.hpp"
#include <iostream>
using namespace std;

int main()
{
    char XFile[100];
    char AFile[100];
    char PHFile[100];
    char Form[4];
    while(1)
    {
        cout<<"Gib bitte den Namen der zu oeffnenden Datei zum Lesen an"<<endl;
        cin>>XFile;
        Format(XFile, Form);
        if((Form[0] != 'x')||(Form[1] != '\0'))
        {
            cout<<XFile<<" ist keine .x-Datei sondern eine ."<<Form<<"-Datei"<<endl;
        }
        else
        {
            break;
        }
    }

    while(1)
    {
        cout<<"Gib bitte den Namen der zu oeffnenden Datei zur Zwischenablage an"<<endl;
        cin>>AFile;
        Format(AFile, Form);
        if((Form[0] != 'a')||(Form[1] != '\0'))
        {
        cout<<AFile<<" ist keine .a-Datei sondern eine ."<<Form<<"-Datei"<<endl;
        }
        else
        {
            break;
        }
    }

    while(1)
    {
        cout<<"Gib bitte den Namen der entgueltigen Datei an"<<endl;
        cin>>PHFile;
        Format(PHFile, Form);
        if((Form[0] != 'p')||(Form[1] != 'h')||(Form[2] != '\0'))
        {
        cout<<PHFile<<" ist keine .ph-Datei sondern eine ."<<Form<<"-Datei"<<endl;
        }
        else
        {
            break;
        }
    }

    XzuA(XFile, AFile);
    AzuPH(AFile, PHFile);
    cout<<"Konvertierung beendet"<<endl;
    return 0;
}


Die Protokoll-Datei - scheinbar wurde die Funtion gar nicht aufgerufen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Format von name.x
    Format: .x

Format von name.a
    Format: .a

Format von name.ph
    Format: .ph

Konvertierung von name.x zu name.a
    Dateien geoeffnet
    Starte Konvertierung
    Konvertierung abgeschlossen
    Dateien geschlossen


Als ich das ganze ohne einteilung in zwei Dateien und Funktionen gemacht hab, hat alles funktioniert(ich poste den Code jetzt aber lieber nicht - er war wirklich extrem unübersichtlich, daswegen hab ich ja auch alles neu geschrieben)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

22.01.2006, 12:46

meinst du mit X das Format von DirectX? Wenn ja nutz doch doch D3DXLoadMeshFromFile Funktion und hol dir dort alle wichtigen Daten.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Phili

unregistriert

3

22.01.2006, 17:50

Ich würd aber gerne mit möglichst wenig (am besten ohne) D3DX auskommen.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

22.01.2006, 18:11

Möchten und können sind 2 unterschiedliche Dinge. Wenn du nicht gerade eine Spezifikation für das .X Format hast, solltest du mal líeber bei dem bleiben, womit man auf der sicheren Seite ist. Und dann würde ich auch nicht das .X Format wählen sondern ein besseres, wenn man schon so einen Aúfwand betreibt ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Phili

unregistriert

5

22.01.2006, 18:23

Intern benutze ich das (selbsterfundene) .ph Format. Es ist extrem einfach aufgebaut und lässt sich leicht in das Programm einbinden.
Im Grunde wollte ich nur irgendein Format, in das die meißten Programme konvertieren können(Milkshape, AC3D, Blender...) in das .ph Format konvertieren können.
Und weil das .x Format recht einfach und mit dem Texteditor zu lesen ist, hab ich es halt gonammen.

Was für ein Format würdest du mir denn als " besser" empfehlen?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

22.01.2006, 18:27

Dazu gibt es Haufenweise Topic in diesem Forum, aber MDL soll nicht schlecht sein.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Phili

unregistriert

7

22.01.2006, 18:55

Was ist denn An .x eigentlich so schlecht?

Ich kann nirgens einen Exporter für MDL finden(benutze zurzeit Blender).

Phili

unregistriert

8

22.01.2006, 19:53

Wenn ich jetzt trotz allem bei meinen Konverterfunktionen bleiben will: Wo ist der Fehler?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

23.01.2006, 00:04

str=="Mesh"

*bong*

str!="{"

*bong bong*

str=="MeshNormal"

*bong bong platsch* ARGH Kopfschmerzen ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Phili

unregistriert

10

23.01.2006, 13:48

Uups. Ich hatte erst mit

C-/C++-Quelltext

1
string str;


gearbeitet, da hab ich wohl noch ein paar blöde Fehler drinnen. :ohoh: :o

Werbeanzeige