先改正在"位图子体"中关于坐标的说法
正确的画法应如下图所示
哦哦,粒子系统的实现与星星实现有相似之处,大体上就是先创建一个类,这个类中包含了要创建原型的各类属性,然后再在Renderer中将其各类属性赋予相应的值。粒子系统呢,先用一个循环初始化所有的particles,然后在onDrawFrame中循环出每一个particle,NEHE把他们叫三角地带,最后判断运行一段时间的particle是否还为激活状态,若为false,则再初始化一次。大体思路就是这样,下面把今天代码粘上来。
(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类ParticleActivity
*
* @author Sim
*/
public class ParticleActivity extends Activity {
private GLSurfaceView glSurfaceView;
private MyRenderer myRenderer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LoadImage.load(getResources());
myRenderer = new MyRenderer();
glSurfaceView = new GLSurfaceView(this);
glSurfaceView.setRenderer(myRenderer);
setContentView(glSurfaceView);
}
}
/**
* 载入图片类LoadImage
*/
class LoadImage {
public static Bitmap bitmap;
public static void load(Resources res) {
bitmap = BitmapFactory.decodeResource(res, R.drawable.particle);
}
}
(2)Particle
package sim.feel;
/**
* 粒子类
*
* @author Sim
*/
public class Particle {
boolean active; // 是否激活
float life; // 粒子生命
float fade; // 衰减速度
float r; // 红色值
float g; // 绿色值
float b; // 蓝色值
float x; // X位置
float y; // Y位置
float z; // Z位置
float xi; // X方向
float yi; // Y方向
float zi; // Z方向
float xg; // X 方向重力加速度
float yg; // Y 方向重力加速度
float zg; // Z 方向重力加速度
}
(3)Renderer类
package sim.feel;
import java.nio