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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

21

11.08.2013, 19:46

Nein, da verwendet man eben nicht einfach '->'. Das muss einem doch einen Denkanstoß geben.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

22

11.08.2013, 20:12

Binäres ios::binary Einlesen betrifft eben Binärdateien. Wavefront OBJ ist (in der Regel) ein textbasiertes Format.

Sprich: Öffne Dateien normal und lese die Daten, wie oben beschrieben ein.

Edit: Ich hinke ganz weit hinterher ;)

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

23

11.08.2013, 22:53

@Volker
Google mal

fopen() C4996

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

24

16.08.2013, 17:04

Der einfache loder ist jetzt so weit vertig doch leider hängt er sich immer in den 'f' Werten auf. Nach dem die 'v', 'vn' und 'vn' eingelesen wurden bleibt er bei den 'f' eifach hängen und durchläuft die Schleife bis ins unendliche. Woran liegt das?
Hier die komplette Lode Funktion:

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
bool ModelClass::LoadModel(char* filename)
{
    //Temp Variablen
    std :: vector <unsigned int  > vertexIndices, uvIndices, normalIndices;
    std :: vector <vec3> temp_vertices;
    std :: vector <vec2> temp_uvs;
    std :: vector <vec3> temp_normals;

    fstream file;
    file.open(filename);

    bool a = true;

    while( a )
    {
 
        char lineHeader;
        // read the first word of the line
        file.get(lineHeader);

        if (file.eof())
        {
            a = false;
        }

        switch (lineHeader)
        {
        case 'v':
            {
                file.get(lineHeader);
                switch (lineHeader)
                {
                case 't':
                    {
                        vec2 UV;
                        file >> UV.x >> UV.y;
                        temp_uvs.push_back(UV);
                        break;
                    }
                case 'n':
                    {
                        vec3 normal;
                        file >> normal.x >> normal.y >> normal.z;
                        temp_normals.push_back(normal);
                        break;
                    }
                case ' ':
                    {
                        vec3 vertex;
                        file >> vertex.x >> vertex.y >> vertex.z;
                        break;
                    }
                }
                break;
            }
        case 'f':
            {
                std::string vertex1, vertex2, vertex3;
                unsigned int vertexIndex[3], uvIndex[3], normalIndex[3];
                // Read the Informations
                file >> vertexIndex[0] >> uvIndex[0] >> normalIndex[0] >> vertexIndex[1] >> uvIndex[1] >> normalIndex[1] >>vertexIndex[2] >> uvIndex[2] >> normalIndex[2];

                // Copy the Informations
                vertexIndices.push_back(vertexIndex[0]);
                vertexIndices.push_back(vertexIndex[1]);
                vertexIndices.push_back(vertexIndex[2]);
                uvIndices    .push_back(uvIndex[0]);
                uvIndices    .push_back(uvIndex[1]);
                uvIndices    .push_back(uvIndex[2]);
                normalIndices.push_back(normalIndex[0]);
                normalIndices.push_back(normalIndex[1]);
                normalIndices.push_back(normalIndex[2]);
                break;
            }
        }

    }

    // For each vertex of each triangle
    for( unsigned int i=0; i<vertexIndices.size(); i++ )
    {
        unsigned int vertexIndex = vertexIndices[i];
        vec3 vertex = temp_vertices[ vertexIndex-1 ];
        this->vertices.push_back(vertex);
    }
    for( unsigned int i=0; i<uvIndices.size(); i++ )
    {
        unsigned int uvIndex = uvIndices[i];
        vec2 uv = temp_uvs[ uvIndex-1 ];
        this->uv.push_back(uv);
    }
    for( unsigned int i=0; i < normalIndices.size(); i++ )
    {
        unsigned int normalIndex = normalIndices[i];
        vec3 normal = temp_normals[ normalIndex-1 ];
        this->normals.push_back(normal);
    }


Und das zu ladende Model
»Volker_Neff« hat folgende Datei angehängt:
  • test.txt (853 Byte - 48 mal heruntergeladen - zuletzt: 11.05.2024, 11:35)

25

16.08.2013, 19:06

C-/C++-Quelltext

1
2
3
4
5
6
7
8
   }
                break;
            }
        case 'f':
            {
                std::string vertex1, vertex2, vertex3;
                unsigned int vertexIndex[3], uvIndex[3], normalIndex[3];
                // Read the Informations

Fehlt das break; da bewusst?
Lieber dumm fragen, als dumm bleiben!

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

26

16.08.2013, 21:52

Wo fehlt ein 'break' das ist doch in Zeile 73

FSA

Community-Fossil

  • Private Nachricht senden

27

16.08.2013, 22:07

Eine Zeile mit f vorne sieht eigentlich so aus:
f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3
So wie du es liest dürfte es nicht funktionieren. Ignorierst du die Slash's?

Zitat

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

28

17.08.2013, 00:01

Wo fehlt ein 'break' das ist doch in Zeile 73

Ja, richtig. Ich suchte eigentlich nach dem in Zeile 54, die zusätzliche Klammerung hat mich spontan verwirrt.
Lieber dumm fragen, als dumm bleiben!

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

29

17.08.2013, 16:11

Stimmt ich übersehe die Slash's, aber dann dürfte dort doch einfach nur müll beim rendern rauskommen. Aber das ist doch nicht der grund dafür das die Schleife nicht abbricht oder? Werde mich nachher doch einmal dransetzen

[Edit] Jetzt läuft alles und wird auch richtig angezeigt Danke für eure Hilfe

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Volker_Neff« (17.08.2013, 16:31)


Werbeanzeige