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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2012, 22:20   #1201
Alexan-Dwer
Форумчанин
 
Аватар для Alexan-Dwer
 
Регистрация: 20.04.2009
Сообщений: 136
По умолчанию

Beermonza, большое спасибо! Не знаю, почему надо задавать отрицательную высоту, но главное что код работает.

К сожалению, форум не дает повысить репутацию:
Цитата:
Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его Beermonza
Поэтому я лично желаю Вам больших успехов, счастья и крепкого здоровья в Новом году.
Alexan-Dwer вне форума Ответить с цитированием
Старый 01.01.2013, 02:50   #1202
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Alexan-Dwer Посмотреть сообщение
Не знаю, почему надо задавать отрицательную высоту, но главное что код работает.
В оперативной памяти данные могут располагаться в разном направлении для облегчения и ускорения операций вычисления. В данном случае они расположены задом наперед. Некоторые структуры читают данные с реверсом, а некоторые читают как есть. Ты задаешь направление чтения в структуре самостоятельно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 16.03.2013, 22:37   #1203
Alexan-Dwer
Форумчанин
 
Аватар для Alexan-Dwer
 
Регистрация: 20.04.2009
Сообщений: 136
По умолчанию

Здравствуйте.

Загружаю кадры анимации персонажа в массив PByteArray, но почему-то некоторые кадры не загружаются.
Сделал упрощенную версию процедуры загрузки, однако это-то тоже не помогло.

Прошу более опытных программистов сказать, что я делаю не так.

1) Пример упрощенного кода:
Код:
...

var
  Frames: array of PByteArray;

...

procedure LoadFrames;
var
bmp: TBitmap; Info: TBitmapInfo; i: Byte;
begin

bmp:=TBitmap.Create;

with Info.bmiHeader do
  begin
biWidth:=96;
biHeight:=-96;
biSize:=SizeOf(TBITMAPINFOHEADER);
biCompression:=BI_RGB;
biBitCount:=24;
biPlanes:=1;
biSizeImage:=((biWidth * biBitCount+31) div 32) * biHeight * 4;
  end;

SetLength(Frames, 80);

for i:=0 to 79 do
  begin
GetMem(Frames[i], 96*96*3);

bmp.LoadFromFile('LoadImg.bmp');

GetDIBits(bmp.Canvas.Handle, bmp.Handle, 0, 96,
Frames[i], Info, DIB_RGB_COLORS);
  end;
end;
2) Что бы проверить правильность загрузки, я отрисовываю все кадры, через процедуру вывода в цикле от 0 до 79:

Код:
...

procedure DrawFrame(k: Byte);
var
i, j: Byte; R, G, B: Byte;
begin
for i:=0 to 95 do
for j:=0 to 95 do
  begin
R:=Frames[k]^[i*96*3+j*3+2];
G:=Frames[k]^[i*96*3+j*3+1];
B:=Frames[k]^[i*96*3+j*3  ];

Form1.Image1.Canvas.Pixels[j, i]:=RGB(R, G, B);
  end;
end;
Почему-то у меня, на 74-ом кадре выводится черный фон, с какими-то разноцветными пикселями, хотя сам загружаемый кадр – белый.

Для пояснения, прикрепляю загружаемое изображение и результат вывода 74-го кадра.
Изображения
Тип файла: bmp LoadImg.bmp (36.1 Кб, 156 просмотров)
Тип файла: bmp Result.bmp (95.9 Кб, 154 просмотров)
Alexan-Dwer вне форума Ответить с цитированием
Старый 17.03.2013, 19:06   #1204
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

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

Код:
R := GetRValue(bmp.Canvas.Pixels[x, y]);
G := GetGValue(bmp.Canvas.Pixels[x, y]);
B := GetBValue(bmp.Canvas.Pixels[x, y]);
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.03.2013, 20:42   #1205
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Немного непонятно, почему Вы задействуете такие хитрые методы для простого выведения изображений на экран (хотя полагаю, в простой версии этого нет, но в "сложной" есть).
Несколько непонятно при этом ещё использование canvas.pixels (ну, опять же, предположу, что для теста).
Я бы всё же посоветовал использовать более надёжный TBitmap.ScanLine. Ну или почитать эту тему со страницы 40 где-то, там тотальные исследования скорости работы всего, чего можно поюзать на процессоре.

Вообще , немного внушают непоняток расчёты -96 используется как множитель, например (я бы abs брал ), в целом бы под отладкой прошёлся и сопоставил с пачкой примеров из сети. Сделал бы на сканлайне и сравнил - есть ли различия.

И вообще неплохо бы проектик архивчиком пощупать. Авось, глаз замылился, тоже не исключается ведь.
phomm вне форума Ответить с цитированием
Старый 17.03.2013, 22:00   #1206
Alexan-Dwer
Форумчанин
 
Аватар для Alexan-Dwer
 
Регистрация: 20.04.2009
Сообщений: 136
По умолчанию

Beermonza, phomm, спасибо за ответы. Извините, что оставил столько вопросов.

И так, код, который я хочу отладить, используется в игре.
Раньше я пользовался Canvas, но потом перешел на массив пикселей. В результате скорость повысилась где-то в два раза.
Сейчас у меня процессор загружается под 40%, а в некоторых местах под 70, причем это с отсечением объектов, если они вне зоны видимости.
Для меня очень много, так как на уровне практически только 5 объектов.

Основная нагрузка, как показали тесты, это вывод графики, который работает так:
  1. Загрузка всех объектов в индивидуальные PByteArray массивы при старте
  2. Перебор объектов, которые в зоне видимости
  3. Отрисовка (с учетом прозрачности) объектов, которые прошли тест, в буфер TRGBTriple
  4. Вывод буфера в Bitmap через SetDIBits
  5. Вывод Bitmap на форму через BitBlt

В основном коде, разумеется, ни каких Canvas и GetRValue нет.

Процедура отрисовки идет через два цикла (высота, ширина), путем присваивания пикселя массиву TRGBTriple соответствующего пикселя из PByteArray, взятому через формулу [i*h*3+j*3] со смещением по компоненту цвета и прозрачности (если она присутствует).

Понижение нагрузки в два раза очень радует, однако то, что некоторые картинки не загружаются, заставляют еще тщательнее отлаживать код, и искать ошибки.

В общем, проблема с непонятным черным квадратом и пикселями, которые как-то интересно располагаются, заставила меня упростить код. Но, это не помогло. Иногда этот черный квадрат появляется, чаще на 74-ом кадре, а иногда нет.

Вот только, почему такое происходит, я пока не смог понять

Цитата:
Сообщение от phomm
Вообще , немного внушают непоняток расчёты -96 используется как множитель, например (я бы abs брал ), в целом бы под отладкой прошёлся и сопоставил с пачкой примеров из сети
Плохо понял суть сообщения, не могли бы уточнить, что за -96? Если, это касается кода из прошлого моего сообщения, то он упрощен, поэтому там и GetDIBits и GetRValue перемешаны.
Если не трудно прошу скомпилировать и написать результат, так как есть вероятность, что черный квадрат только на моем компьютере выводится.

Цитата:
Сообщение от phomm
И вообще неплохо бы проектик архивчиком пощупать. Авось, глаз замылился, тоже не исключается ведь.
Проект очень объемный, поэтому если заливать сюда, то нужно резать. Я стараюсь вычленять сами участки, чтобы не вводить в заблуждение.
Alexan-Dwer вне форума Ответить с цитированием
Старый 18.03.2013, 01:18   #1207
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Alexan-Dwer Посмотреть сообщение
Понижение нагрузки в два раза очень радует, однако то, что некоторые картинки не загружаются, заставляют еще тщательнее отлаживать код, и искать ошибки.
Ошибки ты найдешь, но BMP-формат - это тупик. Альфа-канал понадобится очень скоро. Целесообразно уже сейчас перейти на PNG.

Вот тут забери библиотеку для работы с PNG: http://programmersforum.ru/showpost....&postcount=824

Во вложении пример вывода изображений, разберись с ним и примени для своего проекта.
Вложения
Тип файла: zip Смена фото.zip (947.7 Кб, 27 просмотров)
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 13.04.2013, 00:12   #1208
stalker1995s
Gamedeveloper
Форумчанин
 
Аватар для stalker1995s
 
Регистрация: 11.07.2012
Сообщений: 149
По умолчанию

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

- Будут вопросы, обращайтесь.
stalker1995s вне форума Ответить с цитированием
Старый 13.04.2013, 08:42   #1209
intmain
Играюсь с Python
Форумчанин
 
Аватар для intmain
 
Регистрация: 12.12.2012
Сообщений: 340
По умолчанию

Цитата:
Будут вопросы, обращайтесь.
Как сделать кризис3 на турбо паскале ?
Что ел то - в долг, что жил то - зря.
Для избранных. ))
Секретные разработки
intmain вне форума Ответить с цитированием
Старый 13.04.2013, 20:10   #1210
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от intmain Посмотреть сообщение
Как сделать кризис3 на турбо паскале ?
Ну какой турбо паскаль? ...ты подумал прежде чем написать эту глупость?
Изучаешь Си, ну и изучай, только хомяком безбашенным не становись, ...промыли уже содержимое головы видать.

Delphi - Object Pascal, мощнейшая среда на ряду с Сями, так же можно использовать и OpenGL и DirectX, и под любые ОС. Глупый народ просто ищет готовое, а оно на С++ готовое, ничего знать не нужно. Кто на чем привык, на том и пишет. А если понятий о Delphi нет, то и занижать его возможности не следует.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уроки по созданию игр для новичков... -=DeS=- Gamedev - cоздание игр: Unity, OpenGL, DirectX 750 14.11.2017 20:26
Музыка программистов - как вы относитесь к АРИИ? Весёлый Жека Свободное общение 46 10.10.2008 22:32
Конкурсы по созданию игр на Delphi mutabor Свободное общение 0 15.06.2007 12:40
Работа по созданию ПО remix Фриланс 3 22.04.2007 11:00