更新顶点缓冲区后碰撞检测失败
Collision detection fails after updating vertex buffer
使用 jMonkeyEngine,我通过修改顶点缓冲区来更新网格的特定顶点。一切正常。但是,我注意到碰撞检测不再适用于 'mesh' 的移动位(引号 b/c 中的网格,尽管我使用的是 Mesh 对象,但网格由几个四边形组成,它们都使用自己的顶点- 他们不碰)。
仍然是陌生人,当我单击四边形曾经是听众的位置时,它会激活。好像后台有什么东西没有更新。
这是我用来更新顶点缓冲区的代码 - 针对此测试用例进行了简化:
Mesh m = results.getCollision(i).getGeometry().getMesh();
VertexBuffer vb = m.getBuffer(Type.Position);
float[] vert = BufferUtils.getFloatArray((FloatBuffer) vb.getData());
vert[2]-=1; //move the first quad down with each click ...
vert[5]-=1;
vert[8]-=1;
vert[11]-=1;
vb.updateData(BufferUtils.createFloatBuffer(vert));
有谁知道为什么监听器没有检测到对已移动的网格的点击?
改变几何体的网格后需要调用
yourSpatial.updateModelBound();
原因是边界体积是检查碰撞的第一件事(因为它更便宜)。如果它检测到命中,它将继续检查网格。这就是为什么它会检测到网格曾经所在的位置。
使用 jMonkeyEngine,我通过修改顶点缓冲区来更新网格的特定顶点。一切正常。但是,我注意到碰撞检测不再适用于 'mesh' 的移动位(引号 b/c 中的网格,尽管我使用的是 Mesh 对象,但网格由几个四边形组成,它们都使用自己的顶点- 他们不碰)。
仍然是陌生人,当我单击四边形曾经是听众的位置时,它会激活。好像后台有什么东西没有更新。
这是我用来更新顶点缓冲区的代码 - 针对此测试用例进行了简化:
Mesh m = results.getCollision(i).getGeometry().getMesh();
VertexBuffer vb = m.getBuffer(Type.Position);
float[] vert = BufferUtils.getFloatArray((FloatBuffer) vb.getData());
vert[2]-=1; //move the first quad down with each click ...
vert[5]-=1;
vert[8]-=1;
vert[11]-=1;
vb.updateData(BufferUtils.createFloatBuffer(vert));
有谁知道为什么监听器没有检测到对已移动的网格的点击?
改变几何体的网格后需要调用
yourSpatial.updateModelBound();
原因是边界体积是检查碰撞的第一件事(因为它更便宜)。如果它检测到命中,它将继续检查网格。这就是为什么它会检测到网格曾经所在的位置。