Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl glTranslatef不工作_Opengl_Lwjgl - Fatal编程技术网

Opengl glTranslatef不工作

Opengl glTranslatef不工作,opengl,lwjgl,Opengl,Lwjgl,在我的项目中,我想渲染雨,所以我使用粒子 我的渲染方法: 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 < _curre

在我的项目中,我想渲染雨,所以我使用粒子

我的渲染方法:

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();
}
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);
您可以看到,我想将所有粒子平移到相机的位置-相对于播放器。 但有一个问题,glTranslatef根本不起作用。 所以我看到了世界坐标系开始处的所有粒子

事实上,当我使用相同的原理绘制恒星(粒子)时,GLTRANSTEF工作正常

星星渲染方法:

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();
}
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);
glDisable(GL\u深度\u测试);
glPushMatrix();
glTranslatef(camera.getX(),camera.geteylevel(),camera.getY());
glBegin(总分);
gl3f(1,1,1);
对于(int i=0;i
我做错了什么


另外,我使用OpenGL 1.1 LWJGL,Java OpenGL包装器(LWJGL.org)

glTranslatef将无法工作,因为它位于/glEnd之间


您可以使用glGetError()()使查找此类错误变得更容易。

谢谢,我已解决了我的问题。但事实上,在我程序的另一个地方,我使用GLTRANSAREF在glBegin/glEnd之间绘制多边形,GLTRANSTAREF可以正常工作。绘图点和绘图多边形之间有什么区别吗?在什么情况下我应该在glBegin之前使用GLTRANSTEF?GLTRANSTEF不应该在begin/end之间工作(虽然驱动程序可能允许,但在中不支持)。调用glBegin告诉opengl您将开始绘制一些东西,在glEnd之前,您通常只应设置顶点属性并调用glVertex*。这允许opengl实现更好地并行化渲染,因为它知道不会发生状态更新,例如modelview矩阵,并且会中断顶点流(这是我的猜测)。我建议尽快调查VBO。