Fix: Enhance OBJ parser to support variable face formats (v//vn, v/vt) #163
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description:
I encountered an issue where the model loader failed to parse OBJ files that use the
v//vnformat (vertex and normal, but no texture coordinates) or other variations. The original code strictly expected av/vt/vnstructure, causing read errors on models with different export settings.What this PR does:
The current OBJ face parser assumes every face vertex always has vertex/texcoord/normal indices in the format f v/t/n v/t/n v/t/n.
It crashes or fails silently on OBJ files that use the common optional format, such as:
(only vertex and normal, texture coordinate is missing → double slash //)
Changes
sscanfchecks to dynamically detect the format of each face vertex (v/vt/vn,v//vn,v/vt, or justv).Before:
After:
Correctly parses lines like:
Tested with:
Thanks for reviewing!