New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improvements to LWO imports #3
Conversation
This conversion must respect the LightWave ZXY rotation order.
- The default layer index is set to -1. - Layers without parents are set to have a parent index of -1. - apcNodes type is changed from std::vector<aiNode*> to std::map<uint16_t, aiNode*>, in order to match layer and layer index.
…h, Bank convention.
…ific layer from an LWO file. We should have two layers (the requested and the default layer) instead of one.
It is added later by BuildGraph when the aiNode hierarchy is created.
Lightwave's logic is that when the pivot is set in the LWS file, it overwrite any pivot from the loaded object. The isPivotSet member is added to NodeDesc and set to false by default. It is changed to true if PivotPosition is found in the LWS file.
When building the graph for an object, we always have: ParentAttachNode -> PivotNode -> AttachNode -> MeshNode -> Meshes PivotNode receives animations if any. AttachNode receives the -pivotPos transform, as well as the child nodes, MeshNode has no transformation and contains the meshes. MeshNode and Meshes are already converted to RH by LWOLoader. PivotNode and AttachNode are LH until they get converted to RH later and separately. The pivot position, when not available in the LWS file is obtained from the LWO object, converted back from RH to LH.
I've added thee additional commits to this pull request. All three are on the LWSLoader. And this is all I have for now for the LWO/LWS update. Hoping this is good to go. |
This is great, it fixed animations for /test/models-nonbsd/LWS/QuickDraw v.2.2.lws as well as for other LWS files in my 'collection' of test files. I changed a small bit in the last commit: free() works only because new/delete is implemented in terms of it, but strictly speaking it invokes undefined behaviour, so I reproduced the intent using regular delete. I think it's fair to add you to CREDITS, any wishes about the naming - gellule? Bye, Alex |
Conflicts: code/LWSLoader.cpp
Great! Thanks for the merge, and for the delete/free fix. By the way, why set to NULL the children above the delete rather than deleting it? Thanks for the CREDITS, gellule should be perfect. No idea why my merge showed-up in the pull request. I don't think that I can change where the merge point at on my side. |
That is because aiNode's destructor deletes all of its children recursively, so I had to NULL out the one to keep it. Calling delete on a NULL-pointer is a no-op. Bye, Alex |
Indeed, thanks! |
merge master to RS build branch
function parameter 'name' should be passed by const reference
Update to the latest version from upstream
Merge Master Branch To My Branch
==23896==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x12f9daec1827 at pc 0x7ffcad83699c bp 0x00c61574c910 sp 0x00c61574c910 READ of size 1 at 0x12f9daec1827 thread T0 ==23896==WARNING: Failed to use and restart external symbolizer! #0 0x7ffcad83699b in Assimp::IOStreamBuffer<char>::getNextLine C:\Users\aavenel\Dev\assimp\include\assimp\IOStreamBuffer.h:299 assimp#1 0x7ffcad83ce69 in Assimp::PLY::DOM::ParseHeader C:\Users\aavenel\Dev\assimp\code\AssetLib\Ply\PlyParser.cpp:428 assimp#2 0x7ffcad83d58e in Assimp::PLY::DOM::ParseInstanceBinary C:\Users\aavenel\Dev\assimp\code\AssetLib\Ply\PlyParser.cpp:498 assimp#3 0x7ffcad83302a in Assimp::PLYImporter::InternReadFile C:\Users\aavenel\Dev\assimp\code\AssetLib\Ply\PlyLoader.cpp:189 assimp#4 0x7ffcad4f2f48 in Assimp::BaseImporter::ReadFile C:\Users\aavenel\Dev\assimp\code\Common\BaseImporter.cpp:135 assimp#5 0x7ffcad51ee46 in Assimp::Importer::ReadFile C:\Users\aavenel\Dev\assimp\code\Common\Importer.cpp:709 assimp#6 0x7ff7dd8f9f1a in ImportModel C:\Users\aavenel\Dev\assimp\tools\assimp_cmd\Main.cpp:307 assimp#7 0x7ff7dd8fdf9e in Assimp_Info C:\Users\aavenel\Dev\assimp\tools\assimp_cmd\Info.cpp:344 assimp#8 0x7ff7dd8fc04f in main C:\Users\aavenel\Dev\assimp\tools\assimp_cmd\Main.cpp:222 assimp#9 0x7ff7dd9030eb in __scrt_common_main_seh D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288 assimp#10 0x7ffd39e57343 in BaseThreadInitThunk+0x13 (C:\WINDOWS\System32\KERNEL32.DLL+0x180017343) assimp#11 0x7ffd3a2626b0 in RtlUserThreadStart+0x20 (C:\WINDOWS\SYSTEM32\ntdll.dll+0x1800526b0)
==23896==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x12f9daec1827 at pc 0x7ffcad83699c bp 0x00c61574c910 sp 0x00c61574c910 READ of size 1 at 0x12f9daec1827 thread T0 ==23896==WARNING: Failed to use and restart external symbolizer! #0 0x7ffcad83699b in Assimp::IOStreamBuffer<char>::getNextLine C:\Users\aavenel\Dev\assimp\include\assimp\IOStreamBuffer.h:299 #1 0x7ffcad83ce69 in Assimp::PLY::DOM::ParseHeader C:\Users\aavenel\Dev\assimp\code\AssetLib\Ply\PlyParser.cpp:428 #2 0x7ffcad83d58e in Assimp::PLY::DOM::ParseInstanceBinary C:\Users\aavenel\Dev\assimp\code\AssetLib\Ply\PlyParser.cpp:498 #3 0x7ffcad83302a in Assimp::PLYImporter::InternReadFile C:\Users\aavenel\Dev\assimp\code\AssetLib\Ply\PlyLoader.cpp:189 #4 0x7ffcad4f2f48 in Assimp::BaseImporter::ReadFile C:\Users\aavenel\Dev\assimp\code\Common\BaseImporter.cpp:135 #5 0x7ffcad51ee46 in Assimp::Importer::ReadFile C:\Users\aavenel\Dev\assimp\code\Common\Importer.cpp:709 #6 0x7ff7dd8f9f1a in ImportModel C:\Users\aavenel\Dev\assimp\tools\assimp_cmd\Main.cpp:307 #7 0x7ff7dd8fdf9e in Assimp_Info C:\Users\aavenel\Dev\assimp\tools\assimp_cmd\Info.cpp:344 #8 0x7ff7dd8fc04f in main C:\Users\aavenel\Dev\assimp\tools\assimp_cmd\Main.cpp:222 #9 0x7ff7dd9030eb in __scrt_common_main_seh D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288 #10 0x7ffd39e57343 in BaseThreadInitThunk+0x13 (C:\WINDOWS\System32\KERNEL32.DLL+0x180017343) #11 0x7ffd3a2626b0 in RtlUserThreadStart+0x20 (C:\WINDOWS\SYSTEM32\ntdll.dll+0x1800526b0)
There are 7 commits in total.
0ed87cb fixes a mistake in c3dad6a which fixes requesting a single layer from an LWO file.
058be93 and 90427fd go together. This is the big commit on cleaning up the parenting code.
32cabd8 and 855e4bc are rotation order fixes.
0a317b9 is just a node naming tweak.
Next will be fixes on LWS import.