0

我编写了 CAD 软件(Protocase Designer),它运行良好。除了在 ATI 卡上它一直崩溃的地方。理论上,显示列表已被弃用,也许 ATI 卡不完全支持它们,我决定用顶点缓冲区对象替换显示列表。我大部分时间都在工作,但是当我输入以下代码时,由于某种原因,照明变得一团糟。有谁知道为什么?我将代码放在顶点缓冲区对象的渲染之前还是之后都没有关系。

        gl.glPushMatrix();
        gl.glTranslated(sX, sY, sZ);
        // -- sphere --
        GLU glu = new GLU();
        GLUquadric quad = glu.gluNewQuadric();
        glu.gluQuadricDrawStyle(quad, GLU.GLU_FILL);
        glu.gluQuadricNormals(quad, GLU.GLU_FLAT);
        glu.gluQuadricOrientation(quad, GLU.GLU_OUTSIDE);
        glu.gluSphere(quad, .1, 16, 16);

        glu.gluCylinder(quad, .05, .05, .5, 16, 2);

        glu.gluDeleteQuadric(quad);
        gl.glPopMatrix();

任何想法为什么?这并没有弄乱显示列表版本。我正在渲染的是一个使用 glu 镶嵌器的带有孔的外壳。

谢谢!

4

1 回答 1

0

我知道这将是一个愚蠢的单独问题。我启用了顶点数组,但没有启用颜色或普通数组:

            gl.glEnableClientState(GL.GL_VERTEX_ARRAY);

            //-- forgot these --
            gl.glEnableClientState(GL.GL_NORMAL_ARRAY);
            gl.glEnableClientState(GL.GL_COLOR_ARRAY);

我这样做是因为法线和颜色与顶点交错在同一个数组中,所以我认为我只需要一个启用,这当然是完全错误的。

于 2011-11-30T17:59:41.647 回答