[BUG?] Assimp binding - node read error

Started by LockTheCaptain, December 04, 2016, 18:25:15

Previous topic - Next topic

LockTheCaptain

Hi everyone!

First of all as this is my first post, if this topic is in the wrong section I am sorry!

I am very happy to find Assimp bindings in the 3.1.1 nightly builds, works perfectly well, easily reads meshes and data in but I have a problem reading in the nodes to build the skeleton. Already read in the weights of bones, their names from the AIMesh.

However when trying to access the children of the root node I get some weird errors:

# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000002bec541, pid=1572, tid=0x0000000000001b18
#
# JRE version: Java(TM) SE Runtime Environment (8.0_112-b15) (build 1.8.0_112-b15)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.112-b15 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# J 507 C2 java.nio.DirectByteBuffer.get(I)B (16 bytes) @ 0x0000000002bec541 [0x0000000002bec500+0x41]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Users\LockTheCaptain\IdeaProjects\LWJGL_AWT_OpenGL\hs_err_pid1572.log
Compiled method (c1)    1532  800 %     3       org.lwjgl.system.MemoryTextUtil::decodeUTF8 @ 54 (464 bytes)
 total in heap  [0x0000000002c8c950,0x0000000002c8e250] = 6400
 relocation     [0x0000000002c8ca70,0x0000000002c8cb90] = 288
 main code      [0x0000000002c8cba0,0x0000000002c8da40] = 3744
 stub code      [0x0000000002c8da40,0x0000000002c8db68] = 296
 oops           [0x0000000002c8db68,0x0000000002c8db70] = 8
 metadata       [0x0000000002c8db70,0x0000000002c8db78] = 8
 scopes data    [0x0000000002c8db78,0x0000000002c8dfd0] = 1112
 scopes pcs     [0x0000000002c8dfd0,0x0000000002c8e1f0] = 544
 dependencies   [0x0000000002c8e1f0,0x0000000002c8e1f8] = 8
 nul chk table  [0x0000000002c8e1f8,0x0000000002c8e250] = 88
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

Process finished with exit code 1


This exception is caused by the following code:

        this.scene = Assimp.aiImportFile("models/fist_pump.fbx", aiProcess_FlipUVs | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices);
        if (this.scene == null) {
            System.err.println("Could not open model file");
            System.exit(-1);
        }

        this.texture = new Texture("models/Soldier_new-1_diffuse.png");

        AIMesh aiMesh = new AIMesh(this.scene.mMeshes().getByteBuffer(0, 1288));
        this.riggedMesh = new RiggedMesh(aiMesh);

        //NODES try to read them to build skeleton
        AINode rootNode = this.scene.mRootNode();
        for (int i = 0; i < rootNode.mNumChildren(); i++) {
            System.out.println(rootNode.mChildren().get(i).mName().dataString());
        }


With the meshes I have no problem to read in the ByteBuffer container which then is used in the constructor. But when reading from the nodes I can't query the node's data (such as name). If I am doing something wrong, I am sorry to have wasted your time.

I am developing in IntelliJ IDEA 2016.3 using JDK 8_112 x64, LWJGL 3.1.1 build 7, Windows 10 Pro x64

THANK YOU VERY MUCH for any help!


[RFE] - the original Assimp library's AINode class does contain a FindNode method. Will that be implemented in the LWJGL bindings?


spasi

Quote from: LockTheCaptain on December 04, 2016, 18:25:15However when trying to access the children of the root node I get some weird errors:
...
I am developing in IntelliJ IDEA 2016.3 using JDK 8_112 x64, LWJGL 3.1.1 build 7, Windows 10 Pro x64

I think it's the same bug fixed with this. Please try the latest nightly build.

Quote from: LockTheCaptain on December 04, 2016, 18:25:15[RFE] - the original Assimp library's AINode class does contain a FindNode method. Will that be implemented in the LWJGL bindings?

No, only the C API is supported. It should be trivial to implement on your own though.

LockTheCaptain

Using the new snapshot build fixed it, now I can read in the armature.

Thanks for the quick reply!

QuoteNo, only the C API is supported. It should be trivial to implement on your own though.
Understood, already done :) Thanks again!