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

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

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

Всем привет! Учусь использовать OpenGL в Java. И у меня возникла небольшая проблемка, окно LWJGL запускается с гуи, и если уже запустился рендер (исполняется пока до тех пор пока не нажму Esc или пока не закрою окно), то никакие действия с ГУИ я больше не могу проводить(ведь цикл продолжается). Нужно как-небудь выйти из цикла рендера и при этом не потерять окна. Вот код:
Листинг программы
  1. public class LWJGL {
  2. private boolean boxselected = false;
  3. private List<Box> cubes = new ArrayList<Box>(16);
  4. public LWJGL() {
  5. try {
  6. Display.setDisplayMode(new DisplayMode(640, 480));
  7. Display.setTitle("Java OpenGL program");
  8. Display.create();
  9. } catch (LWJGLException e) {
  10. e.printStackTrace();
  11. }
  12. // Initialization OpenGL
  13. glMatrixMode(GL_PROJECTION);
  14. glLoadIdentity();
  15. glOrtho(0, 640, 0, 480, 1, -1);
  16. glMatrixMode(GL_MODELVIEW);
  17. float translate_x = 0;
  18. float translate_y = 0;
  19. while (!Display.isCloseRequested()) { // Менял на while (Display.isActive()) { не помогло
  20. // Render
  21. glClear(GL11.GL_COLOR_BUFFER_BIT);
  22. glPushMatrix();
  23. glTranslatef(translate_x, translate_y, 0);
  24.  
  25. if (Keyboard.isKeyDown(Keyboard.KEY_SPACE) && Mouse.getX() > 0
  26. && Mouse.getY() < 640 && Mouse.getY() > 0
  27. && Mouse.getY() < 480) {
  28. translate_x+=Mouse.getDX();
  29. translate_y+=Mouse.getDY();
  30. }
  31. int mouseX=(int)(Mouse.getX()-translate_x);
  32. int mouseY=(int)(Mouse.getY()-translate_y);
  33. while (Keyboard.next()) {
  34. if (Keyboard.isKeyDown(Keyboard.KEY_C)) {
  35. cubes.add(new Box(mouseX, mouseY));
  36. }
  37. if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
  38. glPushMatrix();
  39. }
  40. if (Keyboard.isKeyDown(Keyboard.KEY_L)) {
  41. glPopMatrix();
  42. }
  43. if (Keyboard.isKeyDown(Keyboard.KEY_R)) {
  44. glLoadIdentity();
  45. glClear(GL11.GL_COLOR_BUFFER_BIT);
  46. }
  47. }
  48. for (Box box : cubes) {
  49. if (Mouse.isButtonDown(0)
  50. && box.inbound(mouseX, mouseY)
  51. && !boxselected) {
  52. boxselected = true;
  53. box.selected = true;
  54. //System.out.println("You pressed boxXXX!");
  55. }
  56. if (!Mouse.isButtonDown(0)) {
  57. boxselected = false;
  58. box.selected = false;
  59. }
  60. if (box.selected) {
  61. box.update(Mouse.getDX(), Mouse.getDY());
  62. }
  63. box.draw();
  64. }
  65. glPopMatrix();
  66. Display.update();
  67. Display.sync(60);
  68.  
  69. if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
  70. Display.destroy();
  71. System.exit(0);
  72. }
  73.  
  74. }
  75. Display.destroy();
  76. System.exit(0);
  77. }
Спасибо за совет!

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут