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

Java 更新顶点缓冲区后碰撞检测失败,java,3d,vertex-buffer,jmonkeyengine,Java,3d,Vertex Buffer,Jmonkeyengine,使用jMonkeyEngine,我通过修改vertexbuffer来更新网格的特定顶点。一切正常。但是,我注意到碰撞检测不再适用于“网格”(引用b/c中的网格,尽管我使用的是网格对象,但网格由几个四边形组成,所有四边形都使用它们自己的顶点-它们不接触) 更奇怪的是,当我点击四元结构曾经是监听器的地方时,监听器被激活了。就好像有什么东西没有在后台更新 下面是我用来更新vertexbuffer的代码-简化用于此测试用例: Mesh m = results.getCollision(i).getGeo

使用jMonkeyEngine,我通过修改vertexbuffer来更新网格的特定顶点。一切正常。但是,我注意到碰撞检测不再适用于“网格”(引用b/c中的网格,尽管我使用的是网格对象,但网格由几个四边形组成,所有四边形都使用它们自己的顶点-它们不接触)

更奇怪的是,当我点击四元结构曾经是监听器的地方时,监听器被激活了。就好像有什么东西没有在后台更新

下面是我用来更新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));

有人知道为什么侦听器没有检测到已移动网格位上的单击吗?

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

yourSpatial.updateModelBound();

原因是边界体积是检查碰撞的第一个对象(因为它更便宜)。如果检测到命中,它将继续检查网格。这就是为什么它会在网格以前所在的位置检测命中。

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

yourSpatial.updateModelBound();
原因是边界体积是检查碰撞的第一个对象(因为它更便宜)。如果检测到命中,它将继续检查网格。这就是为什么它会在网格以前所在的位置检测命中