Форум программистов, компьютерный форум, киберфорум
DirectX
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Figga
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72

Нормально ли это?

14.01.2014, 05:38. Показов 1569. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю свою игру. 2D графика. жанр РПГ. Карта состоит из квадратов 44х44 пикселя

Рисую при попощи sprite.Draw(Textures, vector3, vector3, Color);
текстуры для игры лежат в двух массивах битмапов
в одном лежит 1000 битмапов
в другом около 10000 битмапов

общий размер битмапов 70мб (или 20 мб если использовать PNG формат)

Проблемав том что при отрисовке на экране 1500-2000 таких битмапов размером 44х44 FPS падает до 20

Нормально ли такая скорость или уменя гдето проблемы в коде???
как можно ускорить прогу? какой формат лучше использовать для текстур??
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.01.2014, 05:38
Ответы с готовыми решениями:

2048 отдельных квадрата (меши, сетка) - частота кадров падает до 7 к/с - это нормально?
Чтоб проверить сколько могу разместить моделей, я сделал в 3д максе 1 квадрат и скопировал чтоб получилось 2048 штук. Когда загружаю в игру...

Это нормально?
Мать - p5kpl-am se оператива - DDR2 4Гб Проц - Intel Core 2 Duo E6300 Видео - NVIDIA GeForce GTS 450 (1024MB GDDR5) FPS в...

Это нормально?
Решил все таки заглянуть в папку Release, и увидел кучу dll. Подскажите это нормально?

8
 Аватар для Figga
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
16.01.2014, 22:29  [ТС]
ПОмогите Нубу!!!!!!!!
Писал игру с нуля без движков.
Сделал даже редактор карты, осталось только дописать пару класов для предметов . а там уже заняться ИИ.
Короче как я считаю половина работы уже сделано НО тут ОКАЗАЛОСЬ что FPS недопустимо мало =((

Помогите ПЛИЗЗ!!!!! советом, литературой, добрим словом, хоть чемнибуть.
Потратил очень много времени и теперь жалко вот так это все забросить.

КАк пожно увеличит FPS?? (любые советы хорошы ибо я нуб и с директов на ВЫ)
читал тут про сокращение DIP'ов но я чесно говоря непредстваляю как в 2D с изометрией можно их сократить.
Все квадраты отрисовываются в строгой очереди - от дальних к ближнему. Так что это уже 1500 Dip'ов
0
 Аватар для BeginerMan
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
17.01.2014, 07:46
А ты кол-во текстур отрисовывай относительно расстояния . к примеру ты находишься в начале Уровня, зачем тебе отрисовывать те что по середине и те что вконце?
К примеру можно так:
C++
1
if(PosHero.x < posTexture.х + widthScreen)
Т.е., если текстура находится на расстоянии больше чем ширина экрана + х коор текстуры, то НЕ надо отрисовывать.
Если подкоректировать условия, то моно ещё по y сделать проверки, если у тебя ещё она и в высь сделана.

Это мой вариант, сам делаю 2D игру, я делаю так.
0
61 / 54 / 21
Регистрация: 19.10.2013
Сообщений: 117
17.01.2014, 20:43
Немного уточним термины(MDX).
Microsoft.DirectX.Direct3D.Texture - текстура - это то, что уже лежит в ОЗУ 3D ускорителя.
Microsoft.DirectX.Direct3D.Sprite - фрагмент текстуры который будет отрисован в задний буфер.
System.Drawing.Bitmap - растровое изображение, которое лежит в основном ОЗУ.
Скорость отрисовки спрайтов, из уже загруженных текстур в задний буфер огромна. Ваши 2000 * 44х44 для любого ускорителя - ничто.
Однако, судя по:
Цитата Сообщение от Figga Посмотреть сообщение
Проблемав том что при отрисовке на экране 1500-2000 таких битмапов размером 44х44 FPS падает до 20
Возможно Вы при каждой отрисовке спрайта грузите текстуру из битмапа или из файла - это самый плохой сценарий из вожможных.
Рекомендации:
Загружать все текстуры один раз при старте приложения, смене уровня или локации.
Объединять мелкие растровые изображения в большие(64х64 * 1024 = 2048х2048) и, сответственно, хранить на диске меньше файлов, создавать и грузить меньше текстур. У метода sprite.Draw() есть перегрузка для вывода небольшого прямоугольного фрагмента текстуры.
Sprite.Draw(Texture,Rectangle,Vector3,Ve ctor3,Color)
0
 Аватар для Figga
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
19.01.2014, 00:47  [ТС]
Цитата Сообщение от BeginerMan Посмотреть сообщение
А ты кол-во текстур отрисовывай относительно расстояния . к примеру ты находишься в начале Уровня, зачем тебе отрисовывать те что по середине и те что вконце?
К примеру можно так:
C++
1
if(PosHero.x < posTexture.х + widthScreen)
Т.е., если текстура находится на расстоянии больше чем ширина экрана + х коор текстуры, то НЕ надо отрисовывать.
Если подкоректировать условия, то моно ещё по y сделать проверки, если у тебя ещё она и в высь сделана.

Это мой вариант, сам делаю 2D игру, я делаю так.

У меня с эти мпроблем нет, колега =))) Отрисовываю только клетки которые вокруг персонажа, причем умудрился даже несмотря на изометрию рисовать ровно по границам экрана через хитрый цыкл. вобщем ни одной лишней клетки не рисую.

Добавлено через 51 минуту
Цитата Сообщение от KolDub Посмотреть сообщение
Немного уточним термины(MDX).
Microsoft.DirectX.Direct3D.Texture - текстура - это то, что уже лежит в ОЗУ 3D ускорителя.
Microsoft.DirectX.Direct3D.Sprite - фрагмент текстуры который будет отрисован в задний буфер.
System.Drawing.Bitmap - растровое изображение, которое лежит в основном ОЗУ.
Скорость отрисовки спрайтов, из уже загруженных текстур в задний буфер огромна. Ваши 2000 * 44х44 для любого ускорителя - ничто.
Однако, судя по:
Да все рисунки из Ресурсов проекта при старте грузятся в массив текстур Microsoft.DirectX.Direct3D.Texture
про атласы я узнал совсем недавно, поэтому все текстуры были по одному. в итоге получилось что-то вроде 12000 текстур восновном размером 44х44 .
ХЗ может ли быть что это все непоместилось в видеопамять с учетом дикого количества текстур или их размера???


Насчет атласов есть идея сделать динамический сборщик атласовю Чтобы все что отрисовывается на экран хранилось в одном атласе. При удалении или добавлении новых обектов в поле зрения в атласе просто добовляется или удаляется текстура в соответствующих координатах. или на худой случай создается новый атлас.
Поидее персонах ходит со скоростью около 2-4 клеток в секунду. так что при беге атлас придется коректировать несколько раз в секунду
Имеет ли это смысл??? Шустро ли происходит создание и перерисовка новой текстуры/Атласа.
Особено если это будет большой атлас на 1024х1024 или 2048х2048. Тоесть лучше использовать одну большую текстуру или несколько поменьше????

А также Имеет ли смысл пихать в текстуру вместо PNG DDS?????
Я вычитал это нетолько сократит объем памяти но и немного увеличет FPS. Но я все еще сомневаюсь. проверил несколько рисунков цвета вроде не сильно попортятся но разница есть.
0
 Аватар для BeginerMan
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
19.01.2014, 09:41
Конечно Лучше одну большую.
Вот к примеру моя текстура.
http://puu.sh/6q4Sd.jpg
Я просто вырезаю нужные мне фрагменты из неё. Она размером 3878х2220 вроде.
И с этого рисунка я отрисовываю не одну бочку а 30 на уровне. Не буду же я , загружать 30 раз я эту бочку.
+ к этому, у меня там около 20 юнитов бегают, у которых текстуры с анимациями то же по 1200х1000 и вырезаю для анимации каждый фрагмент.
У меня фпс 60 СТАБИЛЬНО.
0
61 / 54 / 21
Регистрация: 19.10.2013
Сообщений: 117
19.01.2014, 14:17
SpriteBatch в XNA примерно тоже самое что Spritе в MDX.
Здесь маленькая статья по-русски про оптимизацию SpriteBatch.
http://www.xnadev.ru/articles.php?article_id=108
Еще попробуйте:
C#
1
2
3
sp.Begin(SpriteFlags.SortTexture | SpriteFlags.AlphaBlend);
...
sp.End();
0
 Аватар для Figga
0 / 0 / 1
Регистрация: 09.11.2013
Сообщений: 72
19.01.2014, 19:50  [ТС]
Цитата Сообщение от BeginerMan Посмотреть сообщение
Конечно Лучше одну большую.
Вот к примеру моя текстура.
http://puu.sh/6q4Sd.jpg
Я просто вырезаю нужные мне фрагменты из неё. Она размером 3878х2220 вроде.
И с этого рисунка я отрисовываю не одну бочку а 30 на уровне. Не буду же я , загружать 30 раз я эту бочку.
+ к этому, у меня там около 20 юнитов бегают, у которых текстуры с анимациями то же по 1200х1000 и вырезаю для анимации каждый фрагмент.
У меня фпс 60 СТАБИЛЬНО.

К сожалению у меня отрисовать сразу все бочки за раз невозможно=(( у меня строгая последовательность рисования по клеткам от верхего правого угла и диагональными полосами вниз

Мне нужно полностью отрисовать всю первую клетку с землей деревьями и мобами , потом вторую итд
иначе получится бардак.

А вот насчет атласов. какой максимальный размер атласа ??
У меня все в один атлас запихать явно неполучится. 1 атлас для всякой там статической фигни ( 12000 текстур средним размеров +- 44/44 я могу запихать в атлас 2200х2200)

Плюс анимация мобов 5 действий по 10 кадров на каждое в восьми направлениях = около 400 картинок размером размером около 50х140 получается что на анимацию моба еще один атлас размеров примерно 1800х1800

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

Ну возможноли управлять этими атласами непосредственно в видеопамяти (например что нибуть типа Bitmap.LockBits() и переписать в атласе небольшой ректангл а не пересоздавать его заного, )
0
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 538
09.02.2014, 11:42
откуда взялось число текстур 12000?
Такое ощущение, что подавляющее большинство дублируется.
Почему размер текстур 44х44? Размер по каждому измерению должен быть кратен степени двойки. 2, 4, 8, 16, 32, 64...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2014, 11:42
Помогаю со студенческими работами здесь

Это нормально?
Система Windows 7 64-х разрядная, вопрос в названии темы, на скрине обведено, к чему он относится.

Нормально ли это?
Всем доброго времени суток.Сегодня решил проверить хорошо ли работает блок питания.Сделал анализ в программе SpeedFan.Там я нашел некие...

Это нормально?
не знаю здесь что ли спросить.просматривая сейчас ветку windows7 вижу это. это нормально?

Это нормально?
&quot;Хакеры&quot;. Сложнейшие роботы, переставляющие кассеты вместо простой электронной коммутации, либо дискового накопителя.

43°С в простое это нормально?
Всем привет, у меня проц i7-4770 и стоит охлаждение Titan TTC-NK35TZ (там 3 медные трубки), в простое он около 42-43°С, в простое это не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru