更新顶点缓冲区后,碰撞检测失败

时间:2018-02-05 05:08:57

标签: java 3d vertex-buffer jmonkeyengine

使用jMonkeyEngine,我通过修改vertexbuffer来更新网格的特定顶点。一切正常。然而,我注意到碰撞检测不再适用于'网格'的移动位(引号b / c中的网格虽然我使用的是Mesh对象,但网格由几个四边形组成,都使用它们自己的顶点 - 它们不是触摸)。

更奇怪的是,当我点击曾经作为听众激活的四边形的地方时。好像在后台没有更新的东西。

以下是我用来更新vertexbuffer的代码 - 为此测试用例进行了简化:

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));

有谁知道为什么侦听器没有检测到已经移动的网格点的点击?

1 个答案:

答案 0 :(得分:2)

更改几何体的网格后需要调用

yourSpatial.updateModelBound();

原因是边界体积是第一次检查碰撞(因为它更便宜)。如果它检测到命中,它将继续检查网格。这就是为什么它会检测网格过去的命中。