Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

IDirectDrawSurface.Blt (Подскажите флаги) [D7, WinXP]


h8394E ©   (2006-06-01 17:02:00) 

Доброго времени суток!
Решил вчера изучить DirectDraw. У меня заголовки от JEDI (к стате, а почему все указавают там на страницу /DelphiGraphics - её давно нет).

Так вот, мне надо из спрайтовой поверхности ( var SpriteSurface:IDirectDrawSurface; ) во вторичную поверхность ( var SecondarySurface:IDirectDrawSurface; ) скопировать спрайт, уложенный в прямоугольник ( var Rect: TRect; ). При этом повернуть спайт на любой угол ( var Angle:integer; ) и не копировать $ffffff цвет ( ColorKey у SpriteSurface я установил нормально,  так как BltFast копирует всё отлично! )...

Всё это я  делал так:
new(bltfx); // Var BltFx:PDDBltFx;
bltfx^.dwSize:=sizeof(bltfx);
bltfx^.dwRotationAngle:=Angle*100; //Насколько слышалб здесь углы в 1\100 градусов измеряются
SecondarySurface.Blt(@Rect, SpriteSurface, @Rect, DDBLT_KEYSRC or DDBLT_ROTATIONANGLE, bltfx);
dispose(bltfx);


h8394E   (2006-06-01 19:07:00) [1]

Чёрт....

Ну, всё равно - спасибо!


a22   (2006-06-01 18:39:00) [2]

аппаратный поворот есть, Direct3D/OpenGL. не надо использовать DirectDraw, он умер


h8394E   (2006-06-01 18:11:00) [3]

Вот, посчитал: для снимков одного спрайта на 360 градусов мне понадобится поле 768х480 пикселей (графика 8-битная, индексная) так вот, что лучше - поворчивать в каждом кадре, или просчитаьт вначале???
И, всё-таки  есть ли аппаратнай поворот???


h8394E   (2006-06-01 17:46:00) [4]

Странно, а почему тогда такие константы (поворота) есть???
И в статье королевства было написано, что Blt (в отличае от BltFast) поддерживает то что ты сказал + повороты на 90\180\270 + на любой угол...
А Если програмно поворот делать, это ничего, если на одну плоскость я 360*4 спрайта загоню, и потом просто уже нужный спрайт по нужным углом копировать буду. Это будет нормально, или лучше каждый кадр поворачивать N'е число спрайтов (на экране - копии моих начальных 4х, но многие - под разными углами)...


Sapersky   (2006-06-01 17:26:00) [5]

Не повернётся.
DD фактически поддерживает только блиттинг с цветовым ключом, на большинстве современных карт - растяжение (Stretch) с фильтрацией, и, вроде, отражение (вывод "кверху ногами"). Ну ещё заполнение цветом.
Поворачивать надо или софтверно, или (рекомендуется) через OGL/D3D.

З.Ы. New/Dispose для bltfx - не обязательно, можно объявить её как TDDBltFX и передавать в Blt как @bltfx.


Наверх

Титульная страница Поиск, карта сайта Написать письмо