ПрограммированиеFAQ

Некорректное отображение модели при рендеринге ее в текстуру.

Размер back buffer’а равен определенному значению (как правило 1024x768), а когда рисуем в текстуру, то скорее всего она имеет другое разрешение, а значит данный буфер глубины для нее не подходит. Можно использовать его только если размер буфера больше или равен размеру текстуры, в которую рисуем.

Нужно создать дополнительный буфер глубины и использовать его во время рисования в текстуру.
DirectX:
Создаем указатели на буферы глубины (в одном запомним используемый буфер, в другом создадим новый)

IDirect3DSurface9 *pSurfaceZBuffer;
IDirect3DSurface9 *pLastSurfaceZBuffer;

Создаем.

pDevice->CreateDepthStencilSurface(_разрешение_текстуры_,_разрешение_текстуры_,
                             _формат_(D3DFMT_D24S8),D3DMULTISAMPLE_NONE,0,TRUE,&pSurfaceZBuffer,NULL);

Берем поверхность back bufffer’а.

pDevice->GetRenderTarget( 0, &psBackBuffer );

Берем поверхность текстуры

tex_Reflect->GetSurfaceLevel(0, &psTextureReflect);

Ставим поверхность текстуры для рисования в нее

pDevice->SetRenderTarget(0, psTextureReflect);

Запоминает текущий буфер глубины

pDevice->GetDepthStencilSurface(&pLastSurfaceZBuffer);

Ставим наш, для текстуры

pDevice->SetDepthStencilSurface(pSurfaceZBuffer);

Рисуем все, что должно быть в текстуре
Возвращаем поверхность back buffer’а

pDevice->SetRenderTarget(0, psBackBuffer);

Возвращаем старый буфер глубины

pDevice->SetDepthStencilSurface(pLastSurfaceZBuffer);

15 августа 2007