LWJGL+ GUI - Выход из рендерного цикла для работы в GUI без потери окна - Java

Узнай цену своей работы

Формулировка задачи:

Всем привет! Учусь использовать OpenGL в Java. И у меня возникла небольшая проблемка, окно LWJGL запускается с гуи, и если уже запустился рендер (исполняется пока до тех пор пока не нажму Esc или пока не закрою окно), то никакие действия с ГУИ я больше не могу проводить(ведь цикл продолжается). Нужно как-небудь выйти из цикла рендера и при этом не потерять окна. Вот код:
public class LWJGL {
    private boolean boxselected = false;
    private List<Box> cubes = new ArrayList<Box>(16);
 
    public LWJGL() {
        try {
            Display.setDisplayMode(new DisplayMode(640, 480));
            Display.setTitle("Java OpenGL program");
            Display.create();
        } catch (LWJGLException e) {
            e.printStackTrace();
        }
 
        // Initialization OpenGL
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, 640, 0, 480, 1, -1);
        glMatrixMode(GL_MODELVIEW);
 
        float translate_x = 0;
        float translate_y = 0;
        
        while (!Display.isCloseRequested()) {       // Менял на while (Display.isActive()) { не помогло
            // Render
            glClear(GL11.GL_COLOR_BUFFER_BIT);
            
            glPushMatrix();
 
            glTranslatef(translate_x, translate_y, 0);

            if (Keyboard.isKeyDown(Keyboard.KEY_SPACE) && Mouse.getX() > 0
                    && Mouse.getY() < 640 && Mouse.getY() > 0
                    && Mouse.getY() < 480) {
                translate_x+=Mouse.getDX();
                translate_y+=Mouse.getDY();
            }
            
            int mouseX=(int)(Mouse.getX()-translate_x);
            int mouseY=(int)(Mouse.getY()-translate_y);
            
            while (Keyboard.next()) {
                if (Keyboard.isKeyDown(Keyboard.KEY_C)) {
                    cubes.add(new Box(mouseX, mouseY));
                }
                if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
                    glPushMatrix();
                }
                if (Keyboard.isKeyDown(Keyboard.KEY_L)) {
                    glPopMatrix();
                }
                if (Keyboard.isKeyDown(Keyboard.KEY_R)) {
                    glLoadIdentity();
                    glClear(GL11.GL_COLOR_BUFFER_BIT);
                }           
            }
 
            for (Box box : cubes) {
                if (Mouse.isButtonDown(0)
                        && box.inbound(mouseX, mouseY)
                        && !boxselected) {
                    boxselected = true;
                    box.selected = true;
                    //System.out.println("You pressed boxXXX!");
                }
                if (!Mouse.isButtonDown(0)) {
                    boxselected = false;
                    box.selected = false;
                }
 
                if (box.selected) {
                    box.update(Mouse.getDX(), Mouse.getDY());
                }
 
                box.draw();
            }
            
            glPopMatrix();
            
            Display.update();
            Display.sync(60);

            if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
                Display.destroy();
                System.exit(0);
            }

        }
 
            Display.destroy();
            System.exit(0);
    }
Спасибо за совет!

Решение задачи: «LWJGL+ GUI - Выход из рендерного цикла для работы в GUI без потери окна»

textual
Листинг программы
public void actionPerformed(ActionEvent e) {
            try{
            if(e.getSource()==b1){ 
                Thread paint = new Thread(new LWJGL());
                paint.start();
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5