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);

これを行ったのは、法線と色が頂点と同じ配列にインターリーブされていたため、有効にする必要があるのは1つだけだと思ったからです。もちろん、これはまったく間違っていました。

于 2011-11-30T17:59:41.647 に答える