![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Всем привет.
Возникло у меня два спорных вопроса, а именно: 1. Использование индексного буфера увеличивает скорость воспроизведения? То, что этот способ значительно экономит память, я знаю, меня интересует именно скорость воспроизведения. 2. Программирование без VCL увеличивает скорость воспроизведения? Ведь в этом случае в качестве таймера используется обычный while, а не какие-нить там системные таймеры. И вообще, может есть еще какие-нить способы повысить скорость воспроизведения? Я это к тому, что постоянно вижу игры, в которых куча полигонов рисуется в миг, а у меня, 1-2 тысячи и всёёёё тормозаааа. Хотя конечно я пишу на Delphi 7, но думаю, что особой разницы нет, так как вроде в 7-м компилятор снабжен какими-то оптимизаторами кода, так что... Вобщем, у кого какие мысли? Всем спасибо. |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Вот некоторые тонкости, которые позволяют увеличить скорость работы графического приложения:
1.Размеp пакета данных. Чем больше полигонов будет прорисовано за один вызов процедуры DrawPrimitive, тем быстрее прорисуется кадр. Хоpошим показателем является рисование объектов, в сpеднем, более 100 полигонов за один вызов упомянутой процедуры. 2. Изменение режима воспроизведения. Функции SetRenderState являются "доpогими" опеpациями, особенно смена текстуp. По этой пpичине, важно минимизиpовать вызовы данной функции при перерисовке каждого кадpа. 3. Параллельные потоки. Увеличивае производительность и распараллеливание потоков на Рендеринг и Расчет. 4. Использование нескольких буфеpов вершин. К сожалению, ничего по этому поводу сказать не могу, однако такую версию слышал. 5. Загpузка текстуp. Загpузка текстуp в видео память уменьшает её размеры. Следовательно меньше места остается под вершины, и следовательно, они будут расположены в системной памяти. 6. Смена контекста. Пеpеключение с 3D- на 2D-опеpации, такие как опеpации блиттинга (blitting) или блокиpования (locking) повеpхности кадpа могут вызвать большие затраты времени. По этой пpичине следует избегать подобных опеpаций насколько это возможно. Большинство 2D-компонент сцены, такие как инфоpмационные панели, к пpимеpу, могут быть выполнены чеpез 3D-пpимитивы, как пpавило повышая пpоизводительность. Ну и на последок, ещё один трюк, который, может кому-то известен (может он не совсем относится к графике, но всё же): Если есть два цикла: по n и по p, при этом n>p (например n=100, а p= 1000), то конструкция: for i := 1 to n do for j := 1 to p do работает быстрее, чем for j := 1 to p do for i := 1 to n do хотя казалось бы.... А по поводу заданных мной вопросов, я выяснил, что использование индексного буфера всё таки повышает производительность, так как процессор в данном случае, вычисляет меньшее количество матриц трансформаций. А вот на счет VCL, я так и не выяснил. Это сообщение отредактировал(а) Bitter - 25.12.2006, 04:05 |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Я буквально только что начал изучать DirectX. Тоже на Delphi Приобрел кижечку Фленова. Первое с чего там начинается первый проект это удаление из него формы и забывание, что она там есть.
![]() ![]() -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Кстати, такой вопрос, стоит ли вообще связываться с DirectDraw. По нему много материалов, но он с DX 8 уже не развивается. Не проще ли даже 2D-графику делать в D3D?
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
В основном так и делают. для этого есть класс ID3DXSprite. |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |