Я написал программу CAD в JOGL, которая прекрасно работает, пока я не вставлю глю квадрик, тогда освещение не горит - PullRequest
0 голосов
/ 30 ноября 2011

Я написал программное обеспечение САПР (Protocase Designer), и оно работало великолепно.За исключением карт ATI, где он постоянно падает.Исходя из теории, что списки отображения устарели и, возможно, карты ATI не поддерживают их полностью, я решил заменить списки отображения объектами Vertex Buffer.У меня это в основном работает, но когда я вставляю следующий код, освещение почему-то испортилось.Кто-нибудь знает почему?Не имеет значения, поместил ли я код до или после рендеринга объектов буфера вершин.

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

Есть идеи почему?Это не мешало с версией списка отображения.То, что я представляю, - это корпус с отверстиями с использованием тесселлятора глю.

Спасибо!

1 Ответ

0 голосов
/ 30 ноября 2011

Я знал, что это будет глупой отдельной проблемой.Я включил массивы вершин, но не цвет или обычные массивы:

            gl.glEnableClientState(GL.GL_VERTEX_ARRAY);

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

Я сделал это, потому что нормали и цвета чередовались в том же массиве, что и вершины, поэтому я подумал, что мне нужна только одна активация, котораяконечно был совершенно неправ.

...