![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Использую С#+OpenTK.
С помощью OpenGL нужно нарисовать наперед не известное множество относительно сложных объектов и они отличаются), которые можно перемещать по форме. Объекты состоят из линий, закрашенных областей (причем с полу прозрачностью), текста, при их прорисовки используются циклы. В общем пока их не много - меня скорость работы графики устраивает, но если их больше чем штук 30, то при перемещении объекта(ов) (при этом рисую его как полупрозрачный прямоугольник) заметны тормоза. Я так понимаю что это из-за загрузки процессора (грузится наполовину где-то). Можно как нибудь ускорить процесс прорисовки? На ум приходит только одно: все объекты, которые не нужно перемещать сохранить как один фоновый рисунок, а поверх него уже прорисовывать перемещаемые. Или есть другие варианты? Гугл особо не помог, пушо в какую сторону гуглить - я не знаю. ЗЫ Что примерно рисую можно посмотреть здесь |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Гуглить "списки отображения opengl" ("opengl display list"). В уроках NeHe - урок 12, в OpenGL "Red Book" - глава 7. -------------------- |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
kemiisto,
Спасибо, буду разбираться. У меня возник другой вопрос, немного не по теме, но спрошу. Я хотел бы в своем приложении использовать несколько слоев для прорисовки (к примеру фоновый, статические элементы, динамические элементы). Для этих целей можно использовать списки отображения, или есть более подходящие решения? |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Проблемка возникла.
Вот моя функция создания списков отображения:
То что она долго выполняется при запуске программы - стерпеть еще можно. Но вот вызов 3го списка - это уже не допустимо: GL.CallList(_genList+2); Вызываю все списки при перемещении мыши. Использование первых 2х - дают большой прирост производительности, но вот третий приводит к сильной загрузке процессора и неимоверным тормозам. Количество объектов - 50, но даже один дает большие тормоза. BuildLists() вызывается всего лишь 1 раз. Что я делаю не так? Это сообщение отредактировал(а) Anyone - 21.5.2009, 15:59 |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
С причиною тормозов разобрался - много текста прорисовываю. Но это мне очень нужно. Какой наилучший способ быстрого вывода текста с возможностью масштабирования, желательно с заданным шрифтом? При этом для меня важна кроссплатформенность.
Это сообщение отредактировал(а) Anyone - 24.5.2009, 22:13 |
|||
|
||||
Nofate |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 13.10.2008 Репутация: нет Всего: 8 |
-------------------- The future is not set, there is no fate but what we make for ourselves. Нофейтово пространство и смежные области |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
_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. На форме может быть много объектов, которые, в свою очередь, содержат в себе несколько текстовых блоков, котрые выводятся в цикле. |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Предлагаю вывод всего текста врапить в один Begin/End (или группировать в несколько по используемым стилям). Проблема стопудово в том, что ты для каждого блока отдельный цикл делаешь. Это ведет к переключению render states, а это напрямую влияет на производительность. |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Если бы это было возможным, я бы так и сделал.
Это не проблема, а всего лишь не значительная потеря производительности. Сам проверял и это я обсудил на форуме офф сайта враппера. Думаю текстурные шрифты намного бы улучшили производительность, но насколько я понял (опять же из того форума), обертка не позволяет этого сделать, по крайней мере так, как это обычно делается. Есть ли какие-нибудь способы создания текстурных шрифтов без привязки к платформе? Ну или накрайняк загрузить текстуры в списки отображения? Я только начал изучение OpenGL, так что не судите меня строго ![]() |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Anyone, м.б. имеет смысл попробовать CEGUI# для GUI? там вроде как реализованы текстурные шрифты.
|
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
||||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
||||
|
||||
Nofate |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 13.10.2008 Репутация: нет Всего: 8 |
arilou, видимо имелось ввиду, что чем меньше в библиотеке "обвеса" и наворотов, тем шустрее все будет в конечном счете работать.
-------------------- The future is not set, there is no fate but what we make for ourselves. Нофейтово пространство и смежные области |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Nofate, разработчики middleware врядли согласятся
![]() |
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 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() отпал, потому запостил в этой теме. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |