Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2013, 21:17   #1
Shkolota
Пользователь
 
Регистрация: 02.04.2013
Сообщений: 51
Восклицание OpenGL, экранные списки

Здравствуйте. Возникли некоторые вопросы, связанные с использованием экранных списков в OpenGL. Одни говорят, что они значительно ускоряют вывод графики, потому что 'Нарисовать 10 раз один объект медленнее, чем один раз нарисовать 10 объектов', другие же - что 'На глаз ускорение от использования экранных списков заметить практически невозможно'. Кому верить? Ускоряет ли использование экранных списков вывод графики?

И второй вопрос: как быть, если в программе есть множество однотипных объектов, которые все время меняют свое положение? К примеру, двигающийся по экрану текст. Насколько я знаю, экранные списки не работают с переменными. То есть, нельзя один раз нарисовать весь текст в начале работы программы (даже если сам текст меняться не будет) и затем вызывать этот список, меняя лишь позицию каждой буквы.

Вообще, каков алгоритм работы с экранными списками?
Shkolota вне форума Ответить с цитированием
Старый 04.05.2013, 21:26   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)экранные списки точно не медленнее обычных вызовов, а обычно быстрее(ток не применяйте их ради трех точек), см красную книгу OpenGL(OPenGL Red Book)

2)смещение матрицами никто не отменял
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.05.2013, 21:52   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Shkolota Посмотреть сообщение
И второй вопрос: как быть, если в программе есть множество однотипных объектов, которые все время меняют свое положение? К примеру, двигающийся по экрану текст. Насколько я знаю, экранные списки не работают с переменными. То есть, нельзя один раз нарисовать весь текст в начале работы программы (даже если сам текст меняться не будет) и затем вызывать этот список, меняя лишь позицию каждой буквы.
Отчего же нельзя?
Если один из самых распространенных вариантов использования дисплейных списков - именно вывод текста, то почему его нельзя сделать дисплейным списком.
Только если Вам нужен вывод неизменного фрагмента текста, может, лучше заготовить его сразу в виде единой текстуры и выводить как один квад, а не как кучу квадов-символов?
s-andriano вне форума Ответить с цитированием
Старый 04.05.2013, 22:25   #4
Shkolota
Пользователь
 
Регистрация: 02.04.2013
Сообщений: 51
По умолчанию

s-andriano, дело даже не в тексте, просто думаю, как и зачем используются эти самые экранные списки. Неужели, ради пары команд между 'glBegin();' и 'glEnd();', где указываются координаты рисуемой текстуры?

К примеру, если есть простая 2D-стратегия со множеством боевых единиц на экране, то, как я понимаю, для рисования их лучше использовать экранный список? У каждой боевой единицы есть номер графической модели (набора кадров анимации), используемой для ее отображения. У каждой графической модели - множество кадров. То есть, даже простой объект уже представлен различными графическими образами. Даже один и тот же объект каждую секунду на экране выглядит по-своему. Таким образом, и 'glBindTexture();' в этот список не внесешь.

Тогда что же, создавать по списку на каждую текстуру, используемую в игре? Или я все не так понял?
Shkolota вне форума Ответить с цитированием
Старый 04.05.2013, 22:57   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

прямоугольник это слишком банально для списка, шестиугольник итого мало.

тут речь о 3Д фигурах в основном(или сложные двухмерные контуры), например возьмем модель танка, вот её целиком можно внести в список.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.05.2013, 12:10   #6
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
тут речь о 3Д фигурах в основном(или сложные двухмерные контуры), например возьмем модель танка, вот её целиком можно внести в список.
Сюда же можно отнести поверхности Безье, которые очень дорого пересчитывать каждый раз.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экранные заставки Mels Помощь студентам 0 09.03.2012 23:05
Дисплейные списки OpenGL и видеокарта. Я_и Мультимедиа в Delphi 1 24.10.2010 22:21
Перевод "пространственных" координат в "экранные" , смена перспективы , вращение. vedro-compota Общие вопросы Delphi 6 08.06.2010 21:59
Экранные формы Delphi Artesmann Помощь студентам 0 05.06.2008 17:33