Создание библиотеки для рисования 3D-объектов с помощью JOGL

Так что я столкнулся с чем-то вроде рассола. Я пишу библиотеку, используя JOGL для отображения 3D-моделей (и, следовательно, 2D-моделей) на GLCanvas. Что ж, все шло гладко, пока я не решил вызвать метод отрисовки отдельных полигонов Strixa3DElement в поток, чтобы немного ускорить его. Раньше все отлично рисовалось на экране, но ОЧЕНЬ медленно. Теперь, что касается скорости, она не может быть лучше. Но ничего не рисует. Игнорируя все, кроме того, с чем имеет дело метод рисования, есть ли какая-то причина, по которой

https://github.com/NicholasRoge/StrixaGL/blob/master/src/com/strixa/gl/Strixa3DElement.java

не должно работать?

Изменить: Кроме того, во избежание проблем с параллелизмом в потоке, скажем, любой данный элемент имеет не более 100000 полигонов.


person Nicholas Roge    schedule 10.10.2012    source источник


Ответы (1)


Лучше пока оставить задачи рендеринга в потоке gl.

  • Вы даже не используете списки отображения. Конечно, это будет очень медленно.
  • Даже после этого рендеринг не является проблемой скорости: вы можете подготовить данные для рендеринга в другом потоке, оставив цикл рендеринга чистым и быстрым. (удаление this._performGameLogic и т. д.)
  • Вы можете использовать VBO, шейдеры (перемещение данных и логику рендеринга с ЦП на ГП), внеэкранные буферы и т. д. для повышения производительности.

Если вы будете продолжать, вы должны

  • проверьте класс GLArrayDataServer для использования с VBO, модульными тестами и демонстрациями при написании кода.
  • не передавать GL2 в качестве аргумента: GLContext.getCurrentGL().getGL2();
  • следует попробовать GL2ES2: фиксированные функции устарели, можно использовать на мобильных платформах.
  • присоединиться к jabber-конференции

Некоторые ответы о JOGL&threads: Ресурсы: параллелизм в Java для приложений реального времени OpenGL

person olamedia    schedule 14.10.2012