Преглед на файлове

Fixing an OBJ loader bug that fragmented the loaded meshes (#4494)

The nextShapeEnd integer is a pointer in the OBJ data structures.
The faceVertIndex is a vertex index counter for the mesh we are
about to create. Both integers are not compatible, which causes
the code to finish the meshes too early, thus writing the OBJ data
incompletely into the target meshes.

It wasn't noticed because for the last mesh, it process all remaining
data, causing the last mesh to contain all remaining triangles.

This would have been noticed if the OBJ meshes used different textures
for each mesh.
pull/4496/head
Eike Decker преди 2 дни
committed by GitHub
родител
ревизия
7c5d74e98e
No known key found for this signature in database GPG ключ ID: B5690EEEBB952194
променени са 1 файла, в които са добавени 3 реда и са изтрити 3 реда
  1. +3
    -3
      src/rmodels.c

+ 3
- 3
src/rmodels.c Целия файл

@ -4244,7 +4244,7 @@ static Model LoadOBJ(const char *fileName)
// walk all the faces
for (unsigned int faceId = 0; faceId < objAttributes.num_faces; faceId++)
{
if (faceVertIndex >= nextShapeEnd)
if (faceId >= nextShapeEnd)
{
// try to find the last vert in the next shape
nextShape++;
@ -4295,7 +4295,7 @@ static Model LoadOBJ(const char *fileName)
for (unsigned int faceId = 0; faceId < objAttributes.num_faces; faceId++)
{
bool newMesh = false; // do we need a new mesh?
if (faceVertIndex >= nextShapeEnd)
if (faceId >= nextShapeEnd)
{
// try to find the last vert in the next shape
nextShape++;
@ -4357,7 +4357,7 @@ static Model LoadOBJ(const char *fileName)
for (unsigned int faceId = 0; faceId < objAttributes.num_faces; faceId++)
{
bool newMesh = false; // do we need a new mesh?
if (faceVertIndex >= nextShapeEnd)
if (faceId >= nextShapeEnd)
{
// try to find the last vert in the next shape
nextShape++;

Зареждане…
Отказ
Запис