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

Поиск:

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


Бывалый
*


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

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



Использую С#+OpenTK.
С помощью OpenGL нужно нарисовать наперед не известное множество относительно сложных объектов и они отличаются), которые можно перемещать по форме. Объекты состоят из линий, закрашенных областей (причем с полу прозрачностью), текста, при их прорисовки используются циклы. В общем пока их не много - меня скорость работы графики устраивает, но если их больше чем штук 30, то при перемещении объекта(ов) (при этом рисую его как полупрозрачный прямоугольник) заметны тормоза. Я так понимаю что это из-за загрузки процессора (грузится наполовину где-то). Можно как нибудь ускорить процесс прорисовки? На ум приходит только одно: все объекты, которые не нужно перемещать сохранить как один фоновый рисунок, а поверх него уже прорисовывать перемещаемые. Или есть другие варианты? Гугл особо не помог, пушо в какую сторону гуглить - я не знаю. 

ЗЫ Что примерно рисую можно посмотреть здесь
PM MAIL   Вверх
kemiisto
  Дата 21.5.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(Anyone @  21.5.2009,  11:35 Найти цитируемый пост)
в какую сторону гуглить - я не знаю

Гуглить "списки отображения opengl" ("opengl display list"). В уроках NeHe - урок 12, в OpenGL "Red Book" - глава 7.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Anyone
Дата 21.5.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



kemiisto
Спасибо, буду разбираться.
У меня возник другой вопрос, немного не по теме, но спрошу.
Я хотел бы в своем приложении использовать несколько слоев для прорисовки (к примеру фоновый, статические элементы, динамические элементы). Для этих целей можно использовать списки отображения, или есть более подходящие решения?
PM MAIL   Вверх
Anyone
Дата 21.5.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Проблемка возникла.
Вот моя функция создания списков отображения:
Код

        void BuildLists()
        {
            _genList = GL.GenLists(3);
            GL.NewList(_genList, ListMode.Compile);
            DrawGradientBackGround(Color.DarkSeaGreen, Color.DarkGreen, 4);
            GL.EndList();
            
            GL.NewList(_genList + 1, ListMode.Compile);
            DrawGrid(20.0f, 20.0f, Color.White);
            GL.EndList();
            
            GL.NewList(_genList + 2, ListMode.Compile);
            for (int i = 0; i < blockPointsHelper.Length; i++)
                blockPointsHelper[i].Draw();
            GL.EndList();
        }


То что она долго выполняется при запуске программы - стерпеть еще можно. Но вот вызов 3го списка - это уже не допустимо:
            GL.CallList(_genList+2);
Вызываю все списки при перемещении мыши. Использование первых 2х - дают большой прирост производительности, но вот третий приводит к сильной загрузке процессора и неимоверным тормозам. Количество объектов - 50, но даже один дает большие тормоза. BuildLists() вызывается всего лишь 1 раз. Что я делаю не так?

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


Бывалый
*


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

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



С причиною тормозов разобрался - много текста прорисовываю. Но это мне очень нужно. Какой наилучший способ быстрого вывода текста с возможностью масштабирования, желательно с заданным шрифтом? При этом для меня важна кроссплатформенность.

Это сообщение отредактировал(а) Anyone - 24.5.2009, 22:13
PM MAIL   Вверх
Nofate
Дата 27.5.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Freetype http://www.freetype.org
GLTT http://gltt.sourceforge.net

а чем сейчас текст рисуется?


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
Anyone
Дата 27.5.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Nofate @  27.5.2009,  12:10 Найти цитируемый пост)
а чем сейчас текст рисуется? 


          _printer.Begin();
            _printer.Print("Block", _font, Color.Black,
                _rectTitle, TextPrinterOptions.Default, TextAlignment.Center);
            _printer.Print(Left.ToString() + ";" + Top.ToString(), _font, Color.Black,
                _rectFooter, TextPrinterOptions.Default, TextAlignment.Center);
          _printer.End();

Использую библиотеку OpenTK.
На форме может быть много объектов, которые, в свою очередь, содержат в себе несколько текстовых блоков, котрые выводятся в цикле.
PM MAIL   Вверх
arilou
Дата 29.5.2009, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Anyone @  27.5.2009,  12:18 Найти цитируемый пост)
    _printer.Begin();
            _printer.Print("Block", _font, Color.Black,
                _rectTitle, TextPrinterOptions.Default, TextAlignment.Center);
            _printer.Print(Left.ToString() + ";" + Top.ToString(), _font, Color.Black,
                _rectFooter, TextPrinterOptions.Default, TextAlignment.Center);
          _printer.End();


Предлагаю вывод всего текста врапить в один Begin/End (или группировать в несколько по используемым стилям). Проблема стопудово в том, что ты для каждого блока отдельный цикл делаешь. Это ведет к переключению render states, а это напрямую влияет на производительность.


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


Бывалый
*


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

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



Цитата(arilou @  29.5.2009,  01:26 Найти цитируемый пост)
Предлагаю вывод всего текста врапить в один Begin/End 

Если бы это было возможным, я бы так и сделал.

Цитата(arilou @  29.5.2009,  01:26 Найти цитируемый пост)
Проблема стопудово в том, что ты для каждого блока отдельный цикл делаешь. 

Это не проблема, а всего лишь не значительная потеря производительности.
Сам проверял и это я обсудил на форуме офф сайта враппера.

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

Есть ли какие-нибудь способы создания текстурных шрифтов без привязки к платформе?
Ну или накрайняк загрузить текстуры в списки отображения?

Я только начал изучение OpenGL, так что не судите меня строго  smile 
PM MAIL   Вверх
arilou
Дата 29.5.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Anyone, м.б. имеет смысл попробовать CEGUI# для GUI? там вроде как реализованы текстурные шрифты. 


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


Бывалый
*


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

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



Цитата(arilou @  29.5.2009,  20:27 Найти цитируемый пост)
м.б. имеет смысл попробовать CEGUI# для GUI?

Мне нужна максимальная производительность, так как мне придется перерисовывать окно при перемещении мыши, чем тупее либа - тем лучше, потому не хочу еще что-либо дополнительно ставить
PM MAIL   Вверх
arilou
Дата 30.5.2009, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Anyone, ну тогда засучивай рукава -- тебя ждет много интересного при реализации всего этого самостоятельно  smile 


Цитата(Anyone @  29.5.2009,  22:26 Найти цитируемый пост)
, чем тупее либа - тем лучше, потому не хочу еще что-либо дополнительно ставить 

перечитал 2 раза, ничего не понял


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


Опытный
**


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

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



arilou, видимо имелось ввиду, что чем меньше в библиотеке "обвеса" и наворотов, тем шустрее все будет в конечном счете работать.


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
arilou
Дата 1.6.2009, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Nofate, разработчики middleware врядли согласятся  smile 


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


Бывалый
*


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

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



Попробывал все тоже самое реализовать с Tao.Framework и Tao.FreeType. Скачал враппер для работы с шрифтами 
отсюда FTclass.cs и меня, в принципе, все устраивает, кроме одного - не могу загрузить шрифт, используется стандартный я так понял, потому что даже если задать не правильное имя - шрифт такой же. При этом некоторые буквы вообще выглядят странно.
Вот как я использую:
ftFont = new FTFont(@"D:\WINDOWS\Fonts\TAHOMA.TTF", out Success);
ftFont.ftRenderToTexture(10, 300);

Есть идеи?

ЗЫ. Писал в саппорт ОпенТК по поводу скорости работы текста. Добавили кеширование с помощью списков отображения при использовании TextPrinter, работает заметно быстрее, гдето так же, как и в Tao.Framework + Tao.FreeType, но последняя связка мне больше нравится, потому что текст хорошо масштабируется и работает все таки быстрее (особенно при загрузке формы и изменении ее размеров).

ЗЫ2. Мой вопрос по поводу FTFont.Write() отпал, потому запостил в этой теме.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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