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

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

1

25.05.2014, 10:44

Assimp importiert falsche Modellinformationen

Liebe Leser

Ich habe ein Problem mit Assimp. Es Importiert Normalvektoren falsch. Ich laden .3ds damit.

Wenn ich in AC3D eine Kugel erstelle, deren Normalvektoren nach außen zeigen, (korekt)
zeigt mir meine Anwendung, dass die Normalvektoren nach innen zeigen. (falsch)
Ich muss die Normalvektoren immer umkehren (flipp normal), damit sie später korrekt angezeigt werden.

Die Positionsdaten werden auch irgendwie vertauscht. Ich weiß nicht woran das liegt.

Siehe Bilder im Anhang

Bild1 -> Ac3D
Bild2 -> Meine Anwendung.




Hier ist die Schleife, die die Infos lädt.

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
        for(int v = 0; v < mp_Mesh[m].mpMesh->mNumVertices; v++)
        {
            SVERTEX             Vertex;
            
            Vertex.Pos.x        = mp_Mesh[m].mpMesh->mVertices[v].x;
            Vertex.Pos.y        = mp_Mesh[m].mpMesh->mVertices[v].y;
            Vertex.Pos.z        = mp_Mesh[m].mpMesh->mVertices[v].z;

            Vertex.Normal.x     = mp_Mesh[m].mpMesh->mNormals[v].x;
            Vertex.Normal.y     = mp_Mesh[m].mpMesh->mNormals[v].y;
            Vertex.Normal.z     = mp_Mesh[m].mpMesh->mNormals[v].z;

            if(mp_Mesh[m].mpMesh->HasTextureCoords(0))
            {
            Vertex.Tex.x        = mp_Mesh[m].mpMesh->mTextureCoords[v]->x;
            Vertex.Tex.y        = mp_Mesh[m].mpMesh->mTextureCoords[v]->y;
            }
            else
            {
            Vertex.Tex.x        = 0.0f; 
            Vertex.Tex.y        = 0.0f;
            }

            Geo_Puffer->Set_Vertex(VertexCounter, &Vertex);
            VertexCounter += 1;
        }
»Sebastian Müller« hat folgende Bilder angehängt:
  • Ab1.png
  • AB2.png

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

2

25.05.2014, 11:21

Als kleine Info: In diesem Fall berechnet die Bibliothek die Normalenvektoren die Normalen eher falsch, da sie in der Datei selber gar nicht gespeichert sind. ;)
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

3

25.05.2014, 18:50

Brauchst Du die 3D-Szene in einem linkshändigen oder rechtshändigen Koordinatensystem? Und hast Du Assimp angewiesen, nach linkshändig zu konvertieren oder nicht? Diese beiden Fakten sollten zusammenpassen.
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.

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

4

25.05.2014, 18:50

Ich habe es mit .x versucht. nun klappt es perfekt.

Wegen den Normalvektoren hatte einen kleinen Fehler im Shader entdekt.

Trotzdem danke.

Werbeanzeige