public void processNode(int nodeSubPart, int nodeTriangleIndex) { meshInterface.getLockedReadOnlyVertexIndexBase(data, nodeSubPart); // int* gfxbase = (int*)(indexbase+nodeTriangleIndex*indexstride); ByteBuffer gfxbase_ptr = data.indexbase; int gfxbase_index = (nodeTriangleIndex * data.indexstride); assert (data.indicestype == ScalarType.PHY_INTEGER || data.indicestype == ScalarType.PHY_SHORT); Vector3f meshScaling = meshInterface.getScaling(); for (int j = 2; j >= 0; j--) { int graphicsindex; if (data.indicestype == ScalarType.PHY_SHORT) { graphicsindex = gfxbase_ptr.getShort(gfxbase_index + j * 2) & 0xFFFF; } else { graphicsindex = gfxbase_ptr.getInt(gfxbase_index + j * 4); } // float* graphicsbase = (float*)(vertexbase+graphicsindex*stride); ByteBuffer graphicsbase_ptr = data.vertexbase; int graphicsbase_index = graphicsindex * data.stride; triangle[j].set( graphicsbase_ptr.getFloat(graphicsbase_index + 4 * 0) * meshScaling.x, graphicsbase_ptr.getFloat(graphicsbase_index + 4 * 1) * meshScaling.y, graphicsbase_ptr.getFloat(graphicsbase_index + 4 * 2) * meshScaling.z); } /* Perform ray vs. triangle collision here */ callback.processTriangle(triangle, nodeSubPart, nodeTriangleIndex); meshInterface.unLockReadOnlyVertexBase(nodeSubPart); data.unref(); }
public void processNode(int nodeSubPart, int nodeTriangleIndex) { VertexData data = meshInterface.getLockedReadOnlyVertexIndexBase(nodeSubPart); Vector3f meshScaling = meshInterface.getScaling(new Vector3f()); data.getTriangle(nodeTriangleIndex * 3, meshScaling, triangle); /* Perform ray vs. triangle collision here */ callback.processTriangle(triangle, nodeSubPart, nodeTriangleIndex); meshInterface.unLockReadOnlyVertexBase(nodeSubPart); }
public BvhTriangleMeshShape( StridingMeshInterface meshInterface, boolean useQuantizedAabbCompression, boolean buildBvh) { super(meshInterface); this.bvh = null; this.useQuantizedAabbCompression = useQuantizedAabbCompression; this.ownsBvh = false; // construct bvh from meshInterface // #ifndef DISABLE_BVH Vector3f bvhAabbMin = new Vector3f(), bvhAabbMax = new Vector3f(); meshInterface.calculateAabbBruteForce(bvhAabbMin, bvhAabbMax); if (buildBvh) { bvh = new OptimizedBvh(); bvh.build(meshInterface, useQuantizedAabbCompression, bvhAabbMin, bvhAabbMax); ownsBvh = true; } // JAVA NOTE: moved from TriangleMeshShape recalcLocalAabb(); // #endif //DISABLE_BVH }