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.

  • Cómo obtener la versión de la aplicación utilizando libgdx / robovm
  • Libgdx - cómo agregar la imagen de fondo en la etapa?
  • Libgdx Etiqueta de texto de varias líneas de altura
  • Error al migrar el proyecto Libgdx de Eclipse a Android Studio
  • Cómo dibujar LibGDX Sprite de Constructor en blanco
  • Libgdx-android: Interceptar la tecla de retroceso y confirmar la salida
  • libgdx y TWL: la aplicación Android se cierra en cualquier menú de TWL, funciona bien en el escritorio
  • LibGDX - Camera.update () llamada no hace nada
  • Servicios de juegos de Google Play: Bienvenido <Name> Popup Inconsistent
  • Uso de scene2d.ui con libgdx: ¿De dónde proviene la piel?
  • Múltiples montajes en un cuerpo o múltiples cuerpos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.