| | | | |
DirectX для начинающих. Часть четвёртая. Полупрозрачные спрайты в DirectDraw | Полный текст материала
Другие публикации автора: Виктор Кода
Цитата или краткий комментарий: «... В этот раз речь пойдёт о реализации прозрачности в DirectDraw, причём это будет не проблема вывода нерегулярных спрайтов (об этом уже шла речь в предыдущих уроках), а проблема вывода спрайтов с переменной прозрачностью.
...» |
Важно:- Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
- Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
- При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
- Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.
Добавить свое мнение.
| | Содержит полезные и(или) интересные сведения | [1] | 4 | 50% | | | | Ничего особенно нового и интересного | [2] | 3 | 37.5% | | | | Написано неверно (обязательно укажите почему) | [3] | 1 | 12.5% | | Всего проголосовали: 8 | | | Все понятно, материал читается легко | [1] | 3 | 60% | | | | Есть неясности в изложении | [2] | 2 | 40% | | | | Непонятно написано, трудно читается | [3] | 0 | 0% | | Всего проголосовали: 5 |
[DirectX, DirectShow etc.]
Отслеживать это обсуждение
Всего сообщений: 1011-04-2009 12:57
21-05-2005 19:58Виктор Кода пишет (Часть четвёртая), что “Так вот, если кто-то будет говорить вам, что пользуясь методами IDirectDrawSurface7.Lock() и IDirectDrawSurface7.Unlock() вы получаете прямой доступ к видеопамяти, не верьте этому. ”
Это легко проверить! Возьмите и наберите в SoftIce’e команду “page” и виртуальный адрес, который можете взять из DDSURFACEDESC->lpSurface и увидите, что без проблем можно выводить прямо в память. Далее без комментарий.
|
|
04-05-2003 14:14Эх, дела давно минувших дней...
Хорошо, что в здесь работает рассылка, а то я бы сюда и не заглянул.
Давненько писал я эти примеры. Уже и не упомню, что да как. Помню шаг поверхности, помню формат 5-6-5...
С DirectDraw, господа, я уже очень давно завязал. К тому же, тут есть моя статья по использованию Direct3D 8 для думерного отображения.
Делать в DirectDraw прозрачность - гиблое дело, а + поворот - это вообще 5-6 fps (я ведь и поворот спрайтов вручную когда-то сделал, работало чудненько). В общем, занимайтесь OpenGL или Direct3D и забудьте про DD & GDI+
Ещё хочу заметить, что когда пишешь сюда, обращайте внимание на дату выхода статьи - может, она уже пять лет как лежит, а кто-то высказывает автору огрехи только сейчас...Сообщение не подписано |
|
04-05-2003 00:00Когда я добавил еще одну поверхность как задний фон, только созданную в системной памяти, т.е. создал два фона : в видео и обычной памяти, и прозрачность делал только в системной памяти скорость FPS выросла до 150 :))
очень дельный совет
"Очевидно, если есть память, нужно хранить 2 копии - и там, и там." |
|
03-05-2003 22:36при отключенной синхронизации FPS = 300 (demo 4), при включении прозрачности FPS = 37
В примере 31 FPS = 160 и 115 соответственно
карта GeForce 4 MX440 |
|
18-09-2002 12:56 Дополнение: вместе с альфа-каналом мне надо использовать вращение и прочие прибабахи. |
|
18-09-2002 12:54>Во всяком случае, если понадобятся прозрачные спрайты, DelphiX уже не является абсолютно необходимым.
Он станет ненужным, когда понадобятся вещи типа Alpha-канала и т.п. Мне понадобилось и DelphiX ушел в корзину.
Теперь пользуюсь http://www.g32.org/graphics32/index.html#Downloads
P.S. Вот такие тараканы. |
|
21-08-2002 13:051) Больше всего впечатлило то, что автор проводит измерения FPS, включив вертикальную синхронизацию. Нет, конечно, 5 FPS от 100 так отличить можно, но ни о какой точности (необходимой для выводов) не может быть и речи - меряем мы в основном частоту регенерации монитора.
В результате получаем, что в 4-м примере скорость с блендингом равна скорости без блендинга - на самом деле она в 5 (зависит от конфигурации) раз меньше.
2) Вообще же помещение поверхности спрайта в сист. память в моём случае затормозило обычный блиттинг примерно в 8 раз (но ускорило альфа-блендинг в 3). Очевидно, если есть память, нужно хранить 2 копии - и там, и там.
3) В Красновской книге есть лучший вариант формулы блендинга:
Result = (Alpha * (SrcColor - DestColor)) shr 8 + DestColor,
Alpha = 0..255.
4) Процедура на ассемблере с MMX (из библиотеки FastLIB) работает при прочих равных в 2.5 раза быстрее.
5) Если уж мы рассчитываем на GeForce, почему бы не использовать Direct3D? |
|
12-08-2002 19:59единственное не понял операции в 4-м примере, и почему там приходится читать из видеопамяти? еще раз что куда копируется?
еще наверно можно избавится от выражения (1-v) в трех строчках программы, а сделать это только один раз! не полагаясь на компилятор. |
|
12-08-2002 14:49
|
|