Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обсуждение статьи об OpenGL и Java 
:(
    Опции темы
$tatic
Дата 27.6.2007, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



Если у вас есть вопросы или замечания по данной статье, пишите их здесь.

Это сообщение отредактировал(а) $tatic - 30.6.2007, 19:52
PM MAIL   Вверх
arilou
Дата 28.6.2007, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



$tatic, спасибо за статью. Продолжение будет?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
$tatic
Дата 30.6.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



Конечно. Вот сейчас я написал и отправил на форум вторую часть статьи. Прошу ее также обсудить.
Следует отметить, что для корректной работы необходимо исправить код файла Renderer.java, а именно строку
Код

gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, new float[]{0f, 0f, 1f}, 0);

на
Код

gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, new float[]{0f, 0f, 1f, 0f}, 0);

В противном случае у программы будет неопределенное поведение.
Предлагайте свои идеи будущих статей.
PM MAIL   Вверх
WTF4XZ
Дата 1.7.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 16.4.2007
Где: 63 Самара

Репутация: нет
Всего: 5



Статья прикольная, была бы возможность кинул плюс.
Мона ещё написать что нить про OGL3 там привьювка.... вообщем пособирать и изложить, было бы интерестно ;)
--------------------
Я создание эмоций, создание способные чувствовать не только эмоции людей но и машин.Я EMO_CODER != FALSE;Никто не знает о нас, но мы есть, мы живём, мы кодим и мы... чувствуем, ипспытываем такие эмоции.. сильнее любого бинарника, мощнее любого ассемблера.
PM MAIL ICQ GTalk Jabber   Вверх
Mazzi
Дата 2.7.2007, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 4
Всего: 21



За статью респект!



--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
Hidrag
Дата 2.7.2007, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: нет
Всего: 25



Все сделал как в статье.

Теперь замечания и придирки.
В общем все отлично и все мои замечания и придирки это мелочи.

1. У тебя в примере в классе глфрэйм обьявлена  GLCanvas canvas; а потом в конструкторе снова GLCanvas canvas = new GLCanvas(); нада оставить что то одно, получается два конвала один создается второй так и висит не созданный smile хотя ошибки и нет.

2. В первой статье когда предлагается впервые запустить приложение у тя написанно, что должен быть пустой черный экран - это не тру ))) видимо у всех по разному, у меня было что то похожее на шахматную доску ))) из пыльных белых и серых прямоугольников )))

все.

Теперь вопрос: картинка у нас статичная  - чайник, тогда почему каждый раз разные показания счетчика кадров, от чего они зависят?

Еще такую особенность сейчас заметил, пока писал это у меня был запущен чайник со счетчиком, и комп подвисал немного, закрыл прогу, тормоза пропали, смею предположить что это связанно с тем что идет постоянный опрос системного времени.

А вообще $tatic, респект и уважуха smile такую тему поднял и развил, модераторам JAVA раздела будет теперь куда отправлять новичков с вопросами о 3D в Java.

Ждем продолжения, ты главное не останавливайся! smile 

Да и еще, в статье предлагается использовать джаву 1.6, но могу сказать что и на 1.5 данные примеры работаю на ура smile а вот с 1.4 не пошло...)))

Это сообщение отредактировал(а) Hidrag - 2.7.2007, 09:35


--------------------
user posted image
PM WWW ICQ   Вверх
$tatic
Дата 2.7.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



Большое спасибо за отклики!
Теперь рассмотрим ваши вопросы и предложения ;)

Цитата(WTF4XZ @  1.7.2007,  23:41 Найти цитируемый пост)
Мона ещё написать что нить про OGL3 там привьювка.... вообщем пособирать и изложить, было бы интерестно ;)

К сожалению по OpenGL 2.x Longs Peak и OpenGL 3.0 Mount Evans конкретной информации довольно мало даже на opengl.org. Дело в том, что ARB все еще работает над интерфейсом и пересматривает все еще раз (можно их только похвалить за это, не стремятся выпустить недоделанную спецификацию). Но даже та информация, которая уже доступна, думаю достойна скорее отдельной статьи, правда все же лучше читать это в оригинале, нежели в переводе. Тем более, к тому времени как будет готов перевод, думаю уже выйдет релиз smile

Цитата(Hidrag @  2.7.2007,  10:27 Найти цитируемый пост)
1. У тебя в примере в классе глфрэйм обьявлена  GLCanvas canvas; а потом в конструкторе снова GLCanvas canvas = new GLCanvas(); нада оставить что то одно, получается два конвала один создается второй так и висит не созданный smile хотя ошибки и нет.

Исправил (удалил объявление локальной переменной).

Цитата(Hidrag @  2.7.2007,  10:27 Найти цитируемый пост)
2. В первой статье когда предлагается впервые запустить приложение у тя написанно, что должен быть пустой черный экран - это не тру ))) видимо у всех по разному, у меня было что то похожее на шахматную доску ))) из пыльных белых и серых прямоугольников )))

Довольно оригинально smile К сожалению, точную причину этого эффекта назвать не могу. Вероятно, что в буфере видеокарты была какая-то случайная информация.

Цитата(Hidrag @  2.7.2007,  10:27 Найти цитируемый пост)
Теперь вопрос: картинка у нас статичная  - чайник, тогда почему каждый раз разные показания счетчика кадров, от чего они зависят?

Не следует забывать, что данное приложение работает на платформе Java, которая использует автоматическое управление памятью. Таким образом, во время работы программы периодически происходит отработка сборщика мусора. Вот график использования памяти за первые 30 секунд работы приложения (получен при помощи NetBeans Profiler 5.5).
user posted image
Розовым цветом показана выделенная JVM куча памяти, фиолетовым - используемая память в данный момент времени.
Как видно, виртуальная машина выделяет приложению память из кучи системы с запасом (а выделение системной памяти происходит достаточно медленно, использование заранее выделенной памяти намного эффективнее, этим и объясняется выигрыш Java перед C++ в некторых тестах). Примерно это 5 Мб.
Периодически происходит постоянное создание объектов (в частности, объекта GLUT), и когда общий объем использованной памяти доходит до ~1.8 Мб, происходит срабатывание Garbage Collector'а. Объем использованной памяти при этом падает до 1.5 Мб. Таким образом, во время периодического срабатывания GC происходит некторое снижение FPS. Однако, с течением времени текущий FPS приложения постепенно увеличивается до некоторого предела. Предположительно, это связано с работой JIT-компилятора и runtime-оптимизации приложения. Однако, это лишь мои предположения.


Цитата(Hidrag @  2.7.2007,  10:27 Найти цитируемый пост)
Еще такую особенность сейчас заметил, пока писал это у меня был запущен чайник со счетчиком, и комп подвисал немного, закрыл прогу, тормоза пропали, смею предположить что это связанно с тем что идет постоянный опрос системного времени.

Ну, определение системного времени занимает ничтожное время в работе приложения. Основные ресурсоемкие методы - это (за исключением процесса создания окна) естественно методы display классов Renderer и FPSMeter (соответственно 86% и 12% полного времени работы приложения). Причем основное время затрачивается в них на вычисление и отрисовку чайника (com.sun.opengl.util.GLUT.evaluateTeapotMesh) и отрисовку строки FPS. Все эти сведения можно легко узнать, выполнив профайлинг (это очень полезно, особенно в таких ресурсоемких приложениях).

Цитата(Hidrag @  2.7.2007,  10:27 Найти цитируемый пост)
Да и еще, в статье предлагается использовать джаву 1.6, но могу сказать что и на 1.5 данные примеры работаю на ура smile а вот с 1.4 не пошло...)))

Интересно то, что в файлах jogl.jar и gluegen-rt.jar в манифестах указано:
Код

Created-By: 1.4.2_11-b04 (Sun Microsystems Inc.)

Однако, поскольку Java 1.4 уже морально устарела, думаю, что это не слишком критично, тем более, что теперь есть такие удобные вещи как generics (1.5) и поддержка скриптов (1.6). Последнее очень удобно было бы использовать в играх...

На данный момент я обдумываю тему следующей статьи, но могу заверить, что она будет настолько же практична, насколько и предыдущие. Спасибо за внимание smile

Это сообщение отредактировал(а) $tatic - 2.7.2007, 19:15
PM MAIL   Вверх
Hidrag
Дата 3.7.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: нет
Всего: 25



Цитата(WTF4XZ @  1.7.2007,  22:41 Найти цитируемый пост)
Статья прикольная, была бы возможность кинул плюс.

user posted image resolved


$tatic, спасибо за исчерпывающий ответ!  smile 


--------------------
user posted image
PM WWW ICQ   Вверх
Goganchic
Дата 3.7.2008, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



$tatic, а что насчет продолжения? Может сделать цикл статей по OpenGL в жаве? Может быть что-то вроде создания простенького 3D движка? Я конечно понимаю, что OpenGL будет везде похож, т.к. сама Java вызывает нативные функции OpenGL, реализованные на данной платформе, но сам Java-way может внести в программу что-то особенное (например какие-то паттерны проектирования), и вот об этом и хотелось бы почитать, о том, что получится, если применить Java-way к OpenGL и играм.

P.s. статья - крутЪ
PM Jabber   Вверх
$tatic
Дата 6.7.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



Goganchic, мне бы тоже этого хотелось smile В общем я теперь свободен, так что может и придумаю что-нибудь...
PM MAIL   Вверх
TXC
Дата 23.9.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 6.5.2007

Репутация: нет
Всего: нет



$tatic
Цитата($tatic @  2.7.2007,  19:12 Найти цитируемый пост)

Цитата(Hidrag @  2.7.2007,  09:27 Найти цитируемый пост)
2. В первой статье когда предлагается впервые запустить приложение у тя написанно, что должен быть пустой черный экран - это не тру ))) видимо у всех по разному, у меня было что то похожее на шахматную доску ))) из пыльных белых и серых прямоугольников )))


Довольно оригинально smile К сожалению, точную причину этого эффекта назвать не могу. Вероятно, что в буфере видеокарты была какая-то случайная информация.


Так и есть, это буфер. Потому как на том этапе в Renderer.display() мы еще не имеем:
Код

        GL gl = drawable.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);



З.Ы.: Статья замечательная, автору респект.

Это сообщение отредактировал(а) TXC - 23.9.2008, 21:42
PM MAIL WWW   Вверх
Still
Дата 13.10.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PHP-программист
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.5.2007

Репутация: нет
Всего: нет



Статья интересная, это факт. Однако один момент мне не понятен по причине обычной неопытности.
$tatic, мог бы ты чуть детальнее описать следующий абзац:
Цитата
Поскольку JOGL использует JNI для вызова функций OpenGL, то виртуальной машине, в общем случае, необходимо будет указать путь к нативным библиотекам. Для этого при запуске приложения необходимо установить параметр java.library.path с помощью ключа -D виртуальной машины. Так, если нативные библиотеки для Windows находятся в папке C:\jogl\win, то ключ будет -Djava.library.path=C:\jogl\win\. Аналогично путь указывается и на других платформах. При этом, что самое важное, при использовании командных файлов для запуска приложения, путь может быть относителен. В NetBeans, для удобства запуска и отладки проекта встроенными средствами, данный ключ задается в свойствах проекта (Project Properties) в категории Run (поле VM Options).

В частности, что такое нативные библиотеки?..

В принципе отображение чайника получилось, однако предыдущий вопрос меня вводит в заблуждение из-за незнания smile. Не особо хочется сразу со старта, что-то неправильно усвоить.

Спасибо.

PS Литературу листаю, однако не все так просто...
PM MAIL WWW   Вверх
arilou
Дата 14.10.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Still
Цитата

В частности, что такое нативные библиотеки?..


это обычные виндовые DLL или линуксовые so, написанные на С++ и других языках, которые компилируют напрямую в native code. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Still
Дата 15.10.2008, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PHP-программист
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 27.5.2007

Репутация: нет
Всего: нет



arilou, спасибо, ясно.
Ну и соответственно для Java это библиотеки jar, в частности jogl'а для данного примера.
PM MAIL WWW   Вверх
Vitaly333
Дата 23.3.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

Репутация: нет
Всего: 2



$tatic, А как быть с кросплатформеностью того приложения, которое использует Jogl? Как я понял Jogl поставляется в виде двух платформонезависимых jar-ов + для каждой платформы свои нативные библиотеки. Если я хочу чтобы моё приложение работало везде мне нужно просто скачать полный комплект нативных библиотек для всех платформ с сайта, далее всех их подключить  к своему проекту. В ходе выполнения программы код из jogl.jar каким -то образом сам будет определять на какой платформе запущено приложение и дергать соответствующие функции из соответствующей нативной библиотеки для этой платформы. Правильно думаю или нет?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.1762 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.