Manejo de colisión en Bullet a través de los archivos .g3db

Estoy desarrollando una aplicación sencilla usando libgdx y la API Bullet. He completado el prototipo básico de esta aplicación usando formas, pero ahora quiero cargar los modelos reales en la aplicación. He utilizado el archivo .g3db para cargar los modelos a través de AssetManager

private void doneLoading() { // TODO Auto-generated method stub Model model = manager.get("ping1.g3db", Model.class); int index = 0; for (int i = 0; i < model.nodes.size; i++) { String id = model.nodes.get(i).id; ModelInstance instance = new ModelInstance(model, id); Node node = instance.getNode(id); instance.transform.set(node.globalTransform); //node.translation.set(0, 0, 0); //node.scale.set(1, 1, 1); //node.rotation.idt(); instance.calculateTransforms(); if (id.equals("ball4") || id.equals("bat")) { instance_array.add(instance); index += 1; } if (id.equals("ball4")) { ball = instance; Gdx.app.log("Ball Index", " " + index); instance_map.put("ball", new GameObject.Constructor(model, id, new btSphereShape(0.165f), 1.0f)); createBall(); //ball.transform.setToTranslation(0f, 10f, 0f); } else if (id.equals("bat")) { Gdx.app.log("Bat Index", " " + index); bat = instance; instance_map.put("bat",new GameObject.Constructor(model, id, new btSphereShape(1.897f), 0.0f)); createBat(); } } loading = false; } private void createBat() { // TODO Auto-generated method stub GameObject object=instance_map.get("bat").construct(); object.body.setCollisionFlags(object.body.getCollisionFlags()|btCollisionObject.CollisionFlags.CF_CUSTOM_MATERIAL_CALLBACK); instances_gameobject.add(object); dynamicWorld.addCollisionObject(object.body); } private void createBall() { // TODO Auto-generated method stub GameObject object=instance_map.get("ball").construct(); Gdx.app.log("Ball", "Ball created"); object.moving=true; object.body.setWorldTransform(object.transform); object.body.setCollisionFlags(object.body.getCollisionFlags()|btCollisionObject.CollisionFlags.CF_CUSTOM_MATERIAL_CALLBACK); instances_gameobject.add(object); dynamicWorld.addCollisionObject(object.body); } 

Por favor, dígame cómo podría usar los modelos personalizados para la detección de colisiones.

2 Solutions collect form web for “Manejo de colisión en Bullet a través de los archivos .g3db”

En el ConvexHullTest puede ver cómo puede crear una Shape para su CollisionObject desde una Mesh .

 public static btConvexHullShape createConvexHullShape (final Model model, boolean optimize) { final Mesh mesh = model.meshes.get(0); final btConvexHullShape shape = new btConvexHullShape(mesh.getVerticesBuffer(), mesh.getNumVertices(), mesh.getVertexSize()); if (!optimize) return shape; // now optimize the shape final btShapeHull hull = new btShapeHull(shape); hull.buildHull(shape.getMargin()); final btConvexHullShape result = new btConvexHullShape(hull); // delete the temporary shape shape.dispose(); hull.dispose(); return result; } 

Para mí, ayudó a "hornear" las básculas en licuadora por este post

Escala de una ModelInstance en libgdx 3D y motor Bullet

Después de hacer esto, colisión formas trabajado para mí con este método.

  • LibGdx: Sprite no se dibuja cuando hay una etapa
  • Fundamentos de Android, libgdx y box2d
  • LibGDX ScrollPane que muestra la pantalla negra
  • No se puede dibujar ningún tipo de botón en la pantalla de menú del juego libgdx (android)
  • LibGdx Object Pool para muchos objetos de la misma clase padre
  • ¿Hay alguna forma de notificaciones push en libGDX (proyectos Android e iOS)?
  • Libgdx dibujar caracteres chinos
  • Rotar TextButton con libgdx
  • Libgdx ClassNotFoundException al iniciar Desktop main - Mac, IntelliJ
  • Descripción de libgdx
  • @Named proveedores con los mismos tipos de retorno terminan dando java.lang.IllegalArgumentException: Duplicar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.