3

私のプロジェクトでは雨をレンダリングしたいので、パーティクルを使用します。

私のレンダリング方法:

public void draw(Camera camera) {
    glBegin(GL_POINTS);     
    glPushMatrix();

    glTranslatef(camera.getX(), camera.getEyeLevel(), camera.getY());

    glColor4f(0, 0, 0.8f, 0.1f);

    for(int i = 0; i < _currentParticlesCount; i++)
    {
        _particles[i].draw();
    }

    glPopMatrix();
    glEnd();
}

雨粒子の初期化方法:

particle.setX(Utils.RANDOM.nextFloat() * RAIN_RADIUS * (Utils.RANDOM.nextBoolean() ? 1 : -1));
particle.setY(Utils.RANDOM.nextFloat() * RAIN_RADIUS);
particle.setZ(Utils.RANDOM.nextFloat() * RAIN_RADIUS * (Utils.RANDOM.nextBoolean() ? 1 : -1));

すべてのパーティクルをカメラの位置 (プレイヤーに相対的) に移動したいことがわかります。しかし、問題が 1 つあります。glTranslatef はまったく機能しません。したがって、すべての粒子が世界の座標系の最初に表示されます。

実際、同じ原理で星(粒子)を描いてみると、glTranslatefがちゃんと動く。

星のレンダリング方法:

glDisable(GL_DEPTH_TEST);

glPushMatrix();     
glTranslatef(camera.getX(), camera.getEyeLevel(), camera.getY());

glBegin(GL_POINTS);

glColor3f(1, 1, 1);

for(int i = 0; i < STARS_COUNT; i++) {
    _starsArray[i].draw();
}

glEnd();

glPopMatrix();
glEnable(GL_DEPTH_TEST);

私は何を間違っていますか?

PS私はOpenGL 1.1 LWJGL、Java OpenGLラッパー(lwjgl.org)を使用しています

4

1 に答える 1

6

glBeginと glEnd の間にあるため、glTranslatef は機能しません。

glGetError() () を使用すると、このようなバグを簡単に見つけることができます。

于 2013-08-16T13:13:16.450 に答える