ПрограммированиеФорумГрафика

Рендер в текстуру, Directx 9 (2 стр)

Страницы: 1 2
#15
17:28, 15 апр 2016

Ramm
вот это можешь покопать в сторону софтверного рендера после получения depthbuffer
http://www.gamedev.ru/code/articles/coverage_buffer_uno

#16
18:51, 15 апр 2016

Ramm
> Я все правильно сделал?
Нет.

1. После рендера в текстуру DeviceDX.Present не нужен.

2.
> после инициализации  до очистки заднего буфера и установки камеры вызываю:
Это делается не просто до очистки заднего буфера, а до начала цикла рендера.

3. Зачем каждый кадр сохранять в файл? Для чтения RENDERTARGET данных есть GetRenderTargetData, но это в любом случае делается после восстановления рендера в бэкбуфер.

4. Не уверен, что формат D3DFMT_R8G8B8 будет поддерживаться на любом железе и в любой ОС, лучше задействовать D3DFMT_A8R8G8B8.

#17
7:19, 16 апр 2016

1. Исправил. Получается, что вместо заднего буфера - текстура, а текстура автоматом все сохраняет в себе?
2. Т.е. однократно. Так и сделал.
3.
> Зачем каждый кадр сохранять в файл?
Отслеживать поведение текстуры.

Mikle
> Для чтения RENDERTARGET данных есть GetRenderTargetData,
Можно подробнее? Зачем эта функция? Я не могу просто восстановить рендер в бекбуфер, а затем использовать текстуру? И что подразумевается под RENDERTARGET.

#18
9:13, 16 апр 2016

Ramm
> Можно подробнее? Зачем эта функция? Я не могу просто восстановить рендер в
> бекбуфер, а затем использовать текстуру? И что подразумевается под
> RENDERTARGET.
RENDERTARGET дословно - цель для рендера, то есть то, куда мы рендерим, по умолчанию это бэкбуфер, но мы временно подменяем его на текстуру.
После восстановления бэкбуфера в качестве RENDERTARGET мы можем использовать текстуру для текстурирования, но не можем её читать просто так с помощью Lock(). Ты для чтения задействовал сохранение в файл, это очень медленно, GetRenderTargetData() - это функция, которая читает непосредственно из RENDERTARGET текстуры в память, например, в заранее созданный массив с соответствующим размером. Далее тебе останется просто взять из массива по координатам курсора значение - и ты опросил RENDERTARGET текстуру.

#19
12:07, 16 апр 2016

Спасибо, но вот как GetRenderTargetData пользоваться?
Текстура получена, я думал сделать как-то так:

LockedRect: D3DLOCKED_RECT;
RenderTexture.LockRect( 0, @LockedRect, nil, nil);//залочим текстуру

Затем ищем текстуре в виде строки. Координаты курсора есть, пытаемся найти этот элемент в строке примерно так:

Color :=LockedRect.pBits[(координата Y-1) * texture.width + координата Х];

Затем разлочиваем:

RenderTexture.UnlockRect( 0 );

Вот и все... Пишут, что бывают проблемы и не всегда можно получить нужный пиксель из-за выравнивания и чего-то еще...
Можно проще сделать?

#20
13:37, 16 апр 2016

Ramm
GetRenderTargetData копирует данные из RENDERTARGET сюрфейса в обычный, который можно локать.

#21
17:09, 16 апр 2016

Ramm
> Пишут, что бывают проблемы и не всегда можно получить нужный пиксель из-за
> выравнивания и чего-то еще...
> texture.width
Вместо этого надо использовать LockedRect.Pitch, и всё будет в шоколаде.

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.