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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ускорение прорисовки в OpenGL, Много сложных объектов 
V
    Опции темы
Anyone
Дата 22.7.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

По поводу текста в OpenGL вообще нету встроенной поддержки, потому приходится извращаться разными способами, и они не позволяют выводить быстро изменяющийся текст в больших масштабах, что мне очень нужно. 

Поэтому советую по своим вопросам создавать отдельные темы - больше шансов что кто-нибудь ответит  smile 


Цитата(fomich0ff @  22.7.2009,  16:41 Найти цитируемый пост)
Я так понимаю, что с текстом точно так же?

Естессно
PM MAIL   Вверх
fomich0ff
Дата 22.7.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



в любом случае большое спасибо ;)
PM MAIL   Вверх
ShellRaiser
Дата 23.7.2009, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


еще чуть и закоммичу
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 20.7.2007
Где: Белaрусь, Гродно

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



Anyone, я конечно понимаю что тема уже закрыта, но добавлю что отрисовывая списками ты нехило теряешь производительность, лучше отрисовывай массивами а ещё если их отрисовывать через VBO (Vertex Buffer Object). Он даст сильный прирост производительности при отрисовке сложных моделей (в плане количества полигонов)
темболее если у тебя видиокарта начиная от mx440 то всё должно поддерживаться =)

Это сообщение отредактировал(а) ShellRaiser - 23.7.2009, 15:19
PM MAIL ICQ Skype   Вверх
Anyone
Дата 23.7.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ShellRaiser
Во-первых, от OpenGL я давно отказался в пользу WPF, потому я ничего не теряю в производительности  smile . 
Во-вторых, моя видяха/дрова не держат FBO и VBO.

Это сообщение отредактировал(а) Anyone - 23.7.2009, 15:26
PM MAIL   Вверх
ShellRaiser
Дата 23.7.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


еще чуть и закоммичу
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 20.7.2007
Где: Белaрусь, Гродно

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



Anyone, я просто видел что ктото советовал через списки выводить, и решил предложить пример по-лучше;)
а WPF на OpenGL основанна? или обёртка хорошая?smile
PM MAIL ICQ Skype   Вверх
Anyone
Дата 23.7.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(ShellRaiser @  23.7.2009,  15:46 Найти цитируемый пост)
а WPF на OpenGL основанна? или обёртка хорошая?

На DirectX. Это не обертка, это новая технология от Microsoft для создания интерфейса на основании языка xaml.
PM MAIL   Вверх
ShellRaiser
Дата 24.7.2009, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


еще чуть и закоммичу
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 20.7.2007
Где: Белaрусь, Гродно

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



Спасибо, буду знать;)
PM MAIL ICQ Skype   Вверх
VC15
Дата 6.8.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

 Как сделать так чтобы при масштабировании (glScaled) всей сцены все эти примитивы не изменяли видимых размеров


Ну я бы сделал так:
Код

glPushMatrix();
  glScaled(4, 4, 4);
  outputScene();
glPopMatrix();
outputPrimitives();


Команды glPushMatrix и glPopMatrix очень полезны для таких вещей, которые тебе нужны.

Цитата

есть ли быстрый способ проверить попадает ли рисуемый объект (точка, треугольник, полигон и т.д.) в видимую область или нет?

Что значит быстрый способ? "Быстрый" - понятие относительное. Сразу могу ответить вот что. Если ты выводишь 3D-сцену, то ты задаёшь видимый объём командой glFrustum (или glOrtho, или gluPerspective). Можешь у себя в проге при выводе каждого примитива проверять, попадает ли он в видидмый объём. Правда эту же проверку осуществляет OpenGL, так что не знаю, что быстрее. Вообще, есть разные способы сокращения числа выводимых примитивов, я их не очень хорошо знаю. Мне приходилось пользоваться только отсечением по расстоянию. То есть ты считаешь расстояние от точки взгляда до выводимого примитива, и если оно больше некоторой константы, то не выводишь этот примитив.
PM MAIL   Вверх
fomich0ff
Дата 6.8.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



VC15, спасибо.


Цитата(VC15 @  6.8.2009,  16:01 Найти цитируемый пост)
Что значит быстрый способ? "Быстрый" - понятие относительное. Сразу могу ответить вот что. Если ты выводишь 3D-сцену, то ты задаёшь видимый объём командой glFrustum (или glOrtho, или gluPerspective). Можешь у себя в проге при выводе каждого примитива проверять, попадает ли он в видидмый объём. Правда эту же проверку осуществляет OpenGL, так что не знаю, что быстрее.


У меня что-то типа векторного графического редактора. Назначение: проектирование схем трубопроводов. Там не надо 3D. Там все на плоскости. Так вот практически все графические объекты в течении своей жизни не меняются, а стало быть их удобно выводить в виде списка отображения (или дисплейного списка). Так вот я тестил производительность на 20000 полигонов. Если пробегать весь массив и тупо рисовать каждый полигон (независимо от того виден он или нет), то такой способ работает медленнее чем если выводить только те несколько сотен полигонов, которые видны. Так вот основная загвоздка заключается в том - как быстро выбрать из общего массива полигонов те, которые необходимо рисовать. Т.е. не тупым перебором, а спомощью какого-нить хитрого алгоритма. ;)
Эту проблему я пока не решил.  smile 

PM MAIL   Вверх
arilou
Дата 6.8.2009, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



fomich0ff, а какие условия выборки?


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


Новичок



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

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



arilou, я, если честно, не очень понял, что от меня требуется =)
Вобщем у меня есть массив примитивов (допустим это произвольные полигоны). У каждого примитива есть прямоугольная область (в мировых координатах), в которую он вписан. Естественно известны всякие параметры типа цвет примитива, цвет его границы, толщина границы и т.д. Так вот я так думаю, что выбирать примитивы надо используя именно эту прямоугольную область. Вот только как это сделать не используя прямой перебор? Не знаю. Буквально минут 20 назад нашел статью про octree. Думаю попробовать. Может есть еще подобные алгоритмы?
PM MAIL   Вверх
arilou
Дата 7.8.2009, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



fomich0ff, так тебе нужно определить, какие полигоны не попадают в экранную область? я бы держал список видимых объектов и обновлял его только когда меняется положение камеры.

а вообще, если полное 2Д -- зачем тогда OGL?


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


Новичок



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

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



Цитата(arilou @  7.8.2009,  11:22 Найти цитируемый пост)
fomich0ff, так тебе нужно определить, какие полигоны не попадают в экранную область? я бы держал список видимых объектов и обновлял его только когда меняется положение камеры.

Ну вобщем-то это я и пытаюсь сейчас реализовать с помощью octree.

Цитата(arilou @  7.8.2009,  11:22 Найти цитируемый пост)
а вообще, если полное 2Д -- зачем тогда OGL? 

GDI/GDI+ работают медленно. Особенно когда сложная сцена с большим количеством полигонов с большим количеством вершин. Уже испытано. После долгих поисков/экспериментов остановился на OGL 
PM MAIL   Вверх
arilou
Дата 7.8.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(fomich0ff @  7.8.2009,  11:30 Найти цитируемый пост)
Ну вобщем-то это я и пытаюсь сейчас реализовать с помощью octree.

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


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


Новичок



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

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



arilou, должен, но не канает - медленно =(
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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