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

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

Вращение спрайта ... [Delphi]


Страницы:   1 2

Sp@wN ©   (2003-09-14 15:21:00) 

Есть ли в DirectDraw процедура для аппаратного вращения изображения на IDirectDrawSurface? А то я полазил и в самой бибилиотеке и по форумам различным, не нашёл :( Неужели все так плохо и надо софтверно это все делать?


Sapersky   (2003-09-16 10:24:00) [21]

Да тяжело бойцам невидимого фронта :-)

Вообще-то, я малость недоговорил для пущего драматического эффекта :) Писал с работы, а дома у меня GeForce2MX :)

Вобщем если уж писать что-то хорошее на 2Д, то ориентиром выбирать карты не ниже TNT-TNT2, а лучше GF2 и от этого плясать.

Ну ладно, не будем учитывать офисные компьютеры. Но существует довольно много ноутбуков со старыми видеокартами, например, Rage 3D. Это тоже ускоритель, хотя  и слабее TNT. WarCraft 3 на нём хоть со скрипом, но идёт (!!!). А тут - 2D-графика и GF2...
В общем, я считаю так: если вы заведомо уступаете по качеству лучшим образцам, надо иметь какую-то фичу, чтобы это скомпенсировать. Низкие системные требования, например.
Хотя, как выяснилось, бывают смешные случаи (злосчастные "колобки"), когда в результате ориентации на DDraw и софт производительность обратно пропорциональна мощности компа. Но там, видимо, алгоритмы сильно кривые (пусть автор не обижается, он сам напросился), куча блокировок поверхностей на кадр и т.д.


NailMan   (2003-09-15 18:26:00) [22]

Sapersky ©
Да тяжело бойцам невидимого фронта :-)
С трайдентом то.

Вобщем если уж писать что-то хорошее на 2Д, то ориентиром выбирать карты не ниже TNT-TNT2, а лучше GF2 и от этого плясать.

В общем случае для вижуал эффектов в 2Д можно и шейдеры прикрутить - типа супер-пупер 2Д получится.


Sapersky   (2003-09-15 17:36:00) [23]

Что касаемо совмесимости - х.з. вроде как да, но раз уж переписывать, то переписывать основательно и избавляться от DDraw-овских корней.

Вырвем с корнем этот злостный сорняк! :)
Круто, в общем. Но мне вот что-то от крутизны этой не радостно, потому как пишу это с Trident3D 4 mb (это самое "3D" работает с такой же скоростью, что и программная эмуляция, проверял :))
В общем, своё мнение я не раз уже излагал - DirectDraw + Direct3D7. Совместимость - самая что ни на есть. Минимальный кусок кода для добавления поддержки D3D в DDraw - 60 строк (получается аналог D3DXSprite из DX8). Хотя для того, чтобы работало более-менее быстро, нужно написать побольше, но в целом ничего нерешаемого.
Конечно, задействовать все возможности GeForceFX будет нельзя. Но оно вам надо в данном случае?


NailMan   (2003-09-15 13:55:00) [24]

Смирись и с тем что тебе все равно придется переписывать ядро и возможно не раз. Всегда будет новая идея, реализация которой потребует переписывания всего заново. Поэтому не мучайся и переписывай под Д3Д - будет проще.

Что касаемо совмесимости - х.з. вроде как да, но раз уж переписывать, то переписывать основательно и избавляться от DDraw-овских корней.


pasha_676   (2003-09-15 12:02:00) [25]


> А они совместимы DirectDraw и Direct3D

ЭЭЭЭЭ.... Как то вопрос некоректно поставлен.

Решение проблеммы под 2D - самое поверхостное, уже предложили. При загружке программы расчитываешь повернутые спрайты (их поворачиваешь по матрице поворота) и помещаешь в буферные ресурсы.
Или же в любом соответствующем граф редакторе поворачиваещь сразу и помещаещь в доступные ресурсы в игре (как угодно хоть в bmp файло). Потом их выводишь в нужном порядке. Т.к. тебе в игре врядли потребуется больше 16 вариантов поворота (а то и 8), то способ вполне имеет право на жизнь (например применяется в Диабло1 и 2).


Sp@wN   (2003-09-15 11:16:00) [26]

Тогда вопрос вдогонку ;)
А они совместимы DirectDraw и Direct3D? Если у меня спрайт на поверхности DDraw, то я смогу его развернуть средствами D3D? И, если да, хорошо ли будет, что у меня в программе присутствуют объекты и DD и D3D?
А то не хотелось бы мне переписывать все под D3D, хотя я и не далеко ушел, но все же.


MeF88   (2003-09-15 10:52:00) [27]

Дык ты себе представляешь 3д мир, где поворачиваться можно тока на 90 градусов. А вообще DirectDraw тока переносит пиксели от-туда сюда, а Direct3D поворачивает не само изображение, а лишь поворачивает полигон с ним. Так что получается, что D3D - продвинутый вариант DirectDraw.


Sp@wN   (2003-09-15 10:44:00) [28]

Если заранее все вертеть, то будет долго программа загружатся, но это ладно, главное, что надо очень много памяти, чтобы хранить каждый спрайт повернутый. Скажем на каждые 90 градусов надо 10 фрэймов с разворотом (для плавности), тогда в 40 раз надо больше памяти на каждый спрайт ...

Ех ... спасибо что ламеру отвечали, посмотрю Direct3D. Хотя непонимаю такой фишки: если вращение не поддерживается в ДиректДроу моей видеокартой, с какой стати оно будет поддерживатся в Direct3D?


NailMan   (2003-09-15 09:49:00) [29]

Было не раз сказано что для полноценны 2Д игр/приложений следует юзать не DirectDraw, а Direct3D с его аппаратными возможностями поворота всего чего угодно, альфа блендинга и т.д. и т.п.

Если все таки ты хочешь писать именно на DDRaw, то придется писать софтварные функции поворота изображений.

Смирись. DDraw - умер уже давно.


cyborg   (2003-09-14 21:46:00) [30]

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


Sp@wN   (2003-09-14 21:20:00) [31]

Ну что могу сказать ... вот что выдает blt с флагом DDBLT_ROTATIONANGLE:
Operation could not be carried out because there is no rotation hardware present or available.

И как же быть, все таки софтверно делать? Но это же нереально по скорости, например, 30 спрайтов на экране и каждый надо повернуть ... ууужас! Лююююди, которые уже давно написали свою первую игру, вы как делали??


cyborg   (2003-09-14 19:58:00) [32]

Процедурка называется Blt.
В модуле DirectDraw найди DIRECTDRAWSURFACE BLT FX FLAGS, там флаги вывода.


Sp@wN   (2003-09-14 17:19:00) [33]

Видеокарта у меня ГыФорс2МХ. А начиная с какой поддерживается вращение? А то напишешь с такой аппаратной поддержкой, а работать будет только на Радеон 9800 про :)) И как называется процедурка?


cyborg   (2003-09-14 16:55:00) [34]

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


Страницы:   1 2

Наверх

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