パーティクル生成位置の設定の仕方
お世話になっております。
パーティクルをランダム生成しているのですが、このパーティクルが生成される位置をもっと左右に広げたいとおもっておりますが、どのようにするのが的確でしょうか?
画像ですと、四角で囲った部分からパーティクルが生成されますが、◯の位置からも生成したいです。
public class ParticleSystem {
private Particle[] mParticles;
//パーティクルの数
private int PARTICLECOUNT = 15;
// for use to draw the particle
private FloatBuffer mVertexBuffer;
private ShortBuffer mIndexBuffer;
public ParticleSystem() {
mParticles = new Particle[PARTICLECOUNT];
// setup the random number generator
Random gen = new Random(System.currentTimeMillis());
// loop through all the particles and create new instances of each one
for (int i=0; i < PARTICLECOUNT; i++) {
mParticles[i] = new Particle(gen.nextFloat(), gen.nextFloat(), gen.nextFloat());
}
//三角形のサイズを決定
// a simple triangle, kinda like this ^
float[] coords = {
-0.4f,0.0f,0.0f, //左
0.4f,0.0f,0.0f, //右
0.0f,0.0f,0.4f}; //上
short[] icoords = {0,1,2};
mVertexBuffer = makeFloatBuffer(coords);
mIndexBuffer = makeShortBuffer(icoords);
}
// used to make native order float buffers
private FloatBuffer makeFloatBuffer(float[] arr) {
ByteBuffer bb = ByteBuffer.allocateDirect(arr.length*4);
bb.order(ByteOrder.nativeOrder());
FloatBuffer fb = bb.asFloatBuffer();
fb.put(arr);
fb.position(0);
return fb;
}
// used to make native order short buffers
private ShortBuffer makeShortBuffer(short[] arr) {
ByteBuffer bb = ByteBuffer.allocateDirect(arr.length*4);
bb.order(ByteOrder.nativeOrder());
ShortBuffer ib = bb.asShortBuffer();
ib.put(arr);
ib.position(0);
return ib;
}
public void draw(GL10 gl) {
//頂点配列を定義。3は3次元。
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
//パーティクルの色の指定。背景ではない。
gl.glColor4f(1f, 1f, 1f, 1f);
for (int i = 0; i < PARTICLECOUNT; i++) {
gl.glPushMatrix();
gl.glTranslatef(mParticles[i].x, mParticles[i].y, mParticles[i].z);
//GL_TRIANGLES3角形と指定してる。??
gl.glDrawElements(GL10.GL_TRIANGLES, 3, GL10.GL_UNSIGNED_SHORT, mIndexBuffer);
gl.glPopMatrix();
}
}
// simply have the particles fall at a hard coded gravity rate
// and when they hit zero, bump them back up to a z of 1.0f
public void update() {
for (int i = 0; i < PARTICLECOUNT; i++) {
mParticles[i].z = mParticles[i].z - 0.01f; //落下速度
if (mParticles[i].z < -6.0f) { //落下位置。下位
mParticles[i].z = 1.5f; //落下の最初の位置
}
}
}