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();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д