

お世話になっております。  
パーティクルをランダム生成しているのですが、このパーティクルが生成される位置をもっと左右に広げたいとおもっておりますが、どのようにするのが的確でしょうか？  
画像ですと、四角で囲った部分からパーティクルが生成されますが、◯の位置からも生成したいです。

![画像の説明をここに入力](https://i.stack.imgur.com/8fT2a.png)

[code]

    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; //落下の最初の位置
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2015-04-10T06:17:39.537
8994
2015-08-21T00:38:27.650
8765
question
android opengl-es
パーティクル生成位置の設定の仕方


Particle初期化時、Particleの座標を変化させましょう。

`mParticles[i] = new Particle(gen.nextFloat(), gen.nextFloat(),
gen.nextFloat());`

このあたりを弄ってみて、どのように変化するか、確認すると良いと思いますよ。

余談ですが、このレベルでOpenGL
ESを叩くのは無謀です。3Dである必要がないのでしたら、Androidが用意してる高レベルAPI（Canvas）をまず使ってみましょう。


CC BY-SA 3.0
2015-04-10T12:23:08.430
9014
2015-04-10T12:23:08.430
9191
8994
answer