先还是大体说一下这个程序的原理吧(正方体与球体之间)。
(1)建立相关对象:正方体,3个球体以及为它们铺上纹理
(2)分别为每个对象设定碰撞模式,方法为setCollisionMode(int mode),3个球体为COLLISION_CHECK_OTHERS,cube为COLLISION_CHECK_SELF
(3)将其添加到world对象中,及处理必要的Camera参数
(4)在onDrawFrame函数中进行碰撞处理工作,因为是球体与正方体之间的碰撞,所以采用了相近的椭圆碰撞检测checkForCollisionEllipsoid(如果要用球体检测checkForCollisionSpherical,也能很好工作,这在代码处有相应注释)
下面附上源代码
(1)Activity类
package sim.feel;
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
/**
* Activity类
*
* @author Administrator
*
*/
public class Basic_collision extends Activity {
private GLSurfaceView glView;
private MyRenderer mr = new MyRenderer();
// onCreate
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 传入Resources方法
LoadBitmap.loadb(getResources());
glView = new GLSurfaceView(this);
glView.setRenderer(mr);
setContentView(glView);
}
}
// 载入位图文件
class LoadBitmap {
public static Bitmap bitmap;
// 载入位图方法
public static void loadb(Resources res) {
bitmap = BitmapFactory.decodeResource(res, R.drawable.icon);
}
}