Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / 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

2001—2017 © GameDev.ru — Разработка игр