在我的项目中,我想渲染下雨,所以我使用粒子。
我的渲染方法:
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));
您会看到我想将所有粒子转换到相机的位置-相对于播放器。
但是有一个问题,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);
我究竟做错了什么?
P.S.我使用OpenGL 1.1 LWJGL,Java OpenGL包装器(lwjgl.org)
最佳答案
glTranslatef无法工作,因为它在glBegin / glEnd之间。
您可以使用glGetError()(eg)使查找此类错误变得更加容易。