Jogl推/弹矩阵和颜色

时间:2014-12-30 02:16:22

标签: colors jogl

我正在使用2-3周前下载的Jogl的10月10日版本。我不能轻易找到实际的版本号,所以我希望这足以引导答案。

我的问题是我似乎找不到推送和弹出颜色的方法。一个小代码来指导这个问题。

我有一个小方法来画一个正方形;

protected   void            linear  (GL2    gl
                                    ,double ax,double ay,double az
                                    ,double bx,double by,double bz
                                    )
{
    gl.glBegin(GL.GL_LINES);
    gl.glVertex3d(ax,ay,az);
    gl.glVertex3d(bx,by,bz);
    gl.glEnd();
}

这是从像这样的渲染方法中调用的

protected   void                render(GL2 gl)
{
    /*
     * glPushMatrix not for color
     * glPushattrib(GL2.GL_COLOR) not for color
     * gl.glPushAttrib(GL2.GL_COLOR_BUFFER_BIT) not for color
     */
    //      gl.glPushMatrix();
    //      gl.glPushAttrib(GL2.GL_COLOR_BUFFER_BIT);
    //      gl.glPushAttrib(GL2.GL_COLOR);
    gl.glColor3d(0.0,0.0,1.0);
    linear(gl,0,0,0, 1, 1,0);
    //      gl.glPopAttrib();
    //      gl.glPopMatrix();

    // force reset of color because either it is not part of the matrix or the matrix is buggy
    gl.glColor3d(1.0,1.0,1.0);
    linear(gl,0,0,0, 1,-1,0);

}

最后,从正常显示方法调用此渲染方法。

public      void            display(GLAutoDrawable drawable)
{
    GL2 gl = drawable.getGL().getGL2();

    // Clear screen.
    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

    // Make sure the correct matrix is loaded prior to rendering
    //      gl.glMatrixMode(GL2.GL_MODELVIEW);
    gl.glLoadIdentity();

    render(gl);

    // ensure all gl command are executed and the display updated nothing left in the pipeline
    gl.glFlush();
}

问题在于用于尝试推送和弹出颜色的三种替代方案中的任何一种都不起作用。如果我在弹出操作(Matrix或Attrib)后没有手动重置颜色,则颜色与最后使用的颜色保持一致。

push / pop适用于变换,所以我认为我正确使用它们但颜色没有。我还尝试过任何其他属性,这是我在学习Jogl时的第一次尝试。到目前为止,地雷多于散兵坑。

我复制了许多代码片段并尝试使用具有相同效果的代码片段。所以现在我很难过。

线索,提示或伴随的欢笑赞赏。

1 个答案:

答案 0 :(得分:0)

将GL2ES1.GL_CURRENT_COLOR与glGetFloat和GL_CURRENT_BIT与glPushAttrib一起使用。在此处询问有关OpenGL的任何问题之前,请先阅读手册:

https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml