-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Closed
Labels
defectSomething that is supposed to work, but doesn't. Less severe than a "bug"Something that is supposed to work, but doesn't. Less severe than a "bug"
Milestone
Description
Trying to render a model imported from https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/RecursiveSkeletons/glTF using MonkeyWrench:
Sep 30, 2023 11:58:32 AM com.jme3.app.LegacyApplication handleError
SEVERE: Uncaught exception thrown in Thread[jME3 Main,5,main]
java.lang.NullPointerException
at com.jme3.anim.SkinningControl.resetToBind(SkinningControl.java:332)
at com.jme3.anim.SkinningControl.controlRenderSoftware(SkinningControl.java:255)
at com.jme3.anim.SkinningControl.controlRender(SkinningControl.java:304)
at com.jme3.scene.control.AbstractControl.render(AbstractControl.java:126)
at com.jme3.scene.Spatial.runControlRender(Spatial.java:763)
at com.jme3.renderer.RenderManager.renderSubScene(RenderManager.java:796)
at com.jme3.renderer.RenderManager.renderSubScene(RenderManager.java:806)
at com.jme3.renderer.RenderManager.renderScene(RenderManager.java:780)
at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1205)
at com.jme3.renderer.RenderManager.render(RenderManager.java:1287)
at com.jme3.app.SimpleApplication.update(SimpleApplication.java:278)
at com.jme3.system.lwjgl.LwjglWindow.runLoop(LwjglWindow.java:628)
at com.jme3.system.lwjgl.LwjglWindow.run(LwjglWindow.java:717)
at java.base/java.lang.Thread.run(Thread.java:829)One of the many quirks of the RecursiveSkeletons model is that its mesh doesn't include vertex normals. I believe SkinningControl should be able to handle that, just like it handles meshes without tangents. Looking at the code, it's clear this possibility wasn't considered:
jmonkeyengine/jme3-core/src/main/java/com/jme3/anim/SkinningControl.java
Lines 320 to 334 in 4de10c3
| Mesh mesh = geometry.getMesh(); | |
| if (mesh != null && mesh.isAnimated()) { | |
| Buffer bwBuff = mesh.getBuffer(Type.BoneWeight).getData(); | |
| Buffer biBuff = mesh.getBuffer(Type.BoneIndex).getData(); | |
| if (!biBuff.hasArray() || !bwBuff.hasArray()) { | |
| mesh.prepareForAnim(true); // prepare for software animation | |
| } | |
| VertexBuffer bindPos = mesh.getBuffer(Type.BindPosePosition); | |
| VertexBuffer bindNorm = mesh.getBuffer(Type.BindPoseNormal); | |
| VertexBuffer pos = mesh.getBuffer(Type.Position); | |
| VertexBuffer norm = mesh.getBuffer(Type.Normal); | |
| FloatBuffer pb = (FloatBuffer) pos.getData(); | |
| FloatBuffer nb = (FloatBuffer) norm.getData(); | |
| FloatBuffer bpb = (FloatBuffer) bindPos.getData(); | |
| FloatBuffer bnb = (FloatBuffer) bindNorm.getData(); |
In case you're wondering, the model doesn't include vertex tangents either.
Metadata
Metadata
Assignees
Labels
defectSomething that is supposed to work, but doesn't. Less severe than a "bug"Something that is supposed to work, but doesn't. Less severe than a "bug"