Java LWJGL: Когда я вызываю GL11.glEnd, полигон исчезает?

Когда я вызываю "GL11.glEnd", полигон исчезает. Если я оставлю эту строку «GL11.glEnd», она останется на экране, но когда я ее вставлю, многоугольник, который я рисовал, исчезнет.

package package01;

import org.lwjgl.opengl.GL11;

public class Graph {

    ...


void initGraph(){
    GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    GL11.glClearDepth(1.0); 
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
    GL11.glOrtho(-500, 500, -281, 281, -1, 1);
    GL11.glColor3f(0.8f, 0.8f, 1.0f);
    GL11.glBegin(GL11.GL_POLYGON);
        GL11.glVertex3f(-60, 110, 0);   
        GL11.glVertex3f(60, 110, 0);
        GL11.glVertex3f(120, 0, 0);
        GL11.glVertex3f(60, -110, 0);
        GL11.glVertex3f(-60, -110, 0);
        GL11.glVertex3f(-120, 0, 0);
    GL11.glEnd();
    GL11.glFlush();
}
}

И вот второй класс, если это поможет.

package package01;

...

public class DisplayScreen {
Graph g = new Graph();


void start(){
    try {
        Display.setDisplayMode(new DisplayMode(1000,562));
        Display.create();
        GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);

    } catch(LWJGLException e) {
        e.printStackTrace();

    }
    while(!Display.isCloseRequested()){

        Display.update();
        g.initGraph();
    }
    Display.destroy();
}


public static void main(String[] args){

    DisplayScreen ds = new DisplayScreen();
    ds.start();

    }
}

person GlassZee    schedule 21.01.2012    source источник
comment
Попробуйте поменять порядок вызовов Display.update() и g.initGraph().   -  person Mārtiņš Možeiko    schedule 21.01.2012
comment
Попробуйте переместить Display.update() ниже g.initGraph();. - Черт бы тебя побрал быстрый Можейко :)   -  person xikkub    schedule 21.01.2012


Ответы (1)


удалить GL11.glOrtho(-500, 500, -281, 281, -1, 1); из метода initGraph().

Добавить

glMatrixMode(GL11.GL_PROJECTION);
glLoadIdentity();
GL11.glOrtho(-500, 500, -281, 281, -1, 1);
glMatrixMode(GL11.GL_MODELVIEW);

перед игровым циклом.

update необходимо вызывать после initGraph g.initGraph(); Дисплей.обновление();

person Andrew    schedule 09.04.2012