Подскажите как на С++ в DirectDraw повернуть изображение на определённый угол,поворачивая каждый пиксель отдельно
Re: Поворот изображения
От:
Аноним
Дата:
27.02.04 15:24
Оценка:
Здравствуйте, Karnak-Moruruk, Вы писали:
KM>Подскажите как на С++ в DirectDraw повернуть изображение на определённый угол,поворачивая каждый пиксель отдельно
1. Аппаратно DD поворачивает только на 90 градусов.
2. Если надо вращать — то DD — не самый лучший выбор
Здравствуйте, Karnak-Moruruk, Вы писали:
KM>Подскажите как на С++ в DirectDraw повернуть изображение на определённый угол,поворачивая каждый пиксель отдельно
Хватаешь пиксель и изо всех сил как тащищь его по прямой к месту назначения. Ни в коем случае не крути его , а то развалиться.
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, Karnak-Moruruk, Вы писали:
KM>>Подскажите как на С++ в DirectDraw повернуть изображение на определённый угол,поворачивая каждый пиксель отдельно
А>1. Аппаратно DD поворачивает только на 90 градусов.
а не аппаратно?
... << RSDN@Home 1.1.2 beta 1 >>
Re[3]: Поворот изображения
От:
Аноним
Дата:
28.02.04 11:03
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:
А>>1. Аппаратно DD поворачивает только на 90 градусов.
DH>а не аппаратно?
Как правило, не аппаратно он тоже не поворачивает, так как в библиотеке программной реализации нет.
Может какие — то совсем новые директы и крутят, но вряд — ли.
ДД — уже не актуален.
Здравствуйте, Karnak-Moruruk, Вы писали:
KM>Подскажите как на С++ в DirectDraw повернуть изображение на определённый угол,поворачивая каждый пиксель отдельно
Спрашивается, нафига?
Берешь полигон, натягиваешь на него изображение в качестве текстуры и ходь обвращайся. А DirectDraw уже давно умер.
Здравствуйте, Karnak-Moruruk, Вы писали:
KM>Подскажите как на С++ в DirectDraw повернуть изображение на определённый угол,поворачивая каждый пиксель отдельно
Если тебе ОЧЕНЬ нужно, то так (пример без отсечения, фильтров, блендинга и пр.):
struct pixel_t;
struct texel_t;
extern pixel_t* screen_buffer_pixel_t_ptr;
extern int screen_buffer_width;
void scanline_texture
(
int x, int y, int length, //где на экране вывести текстурированную горизонтальную линию (скэн-линию)int u1, int v1, //дробное с фиксированной точкой 16:16int u2, int v2, //дробное с фиксированной точкой 16:16
texel_t* texture, //указатель на текстуруint texture_width_shift, //сдвиг (ширина текстуры должна быть степенью двойки)int texture_width_mask, //маска, 16:16 (чтобы u-координата не выходила за размер текстуры)int texture_height_mask //маска, 16:16 (чтобы v-координата не выходила за размер текстуры)
)
{
//проверяем отрицательную длинуif(length < 0) { x+=length; length=-length; int t=u1;u1=u2;u2=t; t=v1;v1=v2;v2=t; }
//вычисляем количество пикселей и шаги по текстуре
++length;
int du = (u2-u1)/length;
int dv = (v2-v1)/length;
//подготавливаем указатель на буфер экрана
pixel_t *dest = screen_buffer_pixel_t_ptr + y * screen_buffer_width + x;
//выводим length пикселейdo{
//переносим тексель текстуры в пиксель буфера экрана
*dest++ = your_conversion_from_texel_to_pixel( texture[(u1>>16)+((v1>>16)<<texture_width_shift)] );
//делаем шаг по текстуре
u1+=du; u1&=texture_width_mask;
v1+=dv; v1&=texture_height_mask;
}while(--length);
}
Чтобы нарисовать спрайт — выводи полигоны этим или другим нужным scanline.
И вообще почитай об этом в нете.
... << RSDN@Home 1.1 beta 2 >>
^__^
Re: Поворот изображения
От:
Аноним
Дата:
14.03.04 10:54
Оценка:
Здравствуйте, Karnak-Moruruk, Вы писали:
KM>Подскажите как на С++ в DirectDraw повернуть изображение на определённый угол,поворачивая каждый пиксель отдельно
Мудрите вы всё... На самом деле в MSDN есть статья на эту тему — прямой доступ к поверхности, есть прямо готовая функция. Копируешь и наслаждаешься. Правда, лучше воспользоваться чем-нибудь другим, я согласен...