варительной сортировки граней. Следующий оператор заставляет систему записывать в буфер цвета новую точку, если она ближе старой или находится на таком же расстоянии:

Devi ce->SetRenderState(D3DRS_ZFUNC.D3DCMP_LESSEQUAL)

Запросить интерфейс IDirect3DSurface9, позволяющий получить доступ к области памяти, в которой хранится Z-буфер, можно при помощи следующей конструкции:

IDirect3DSurfасе9 *pZStenci1 Surface: Device->GetDepthStencilSurface(&pZStencilSurface): Для получения указателя вызывается метод Lock() этого интерфейса.

Отсечение по видимому объему

Отсечение по видимому объему в пространстве включается и выключается операторами Device->SetRenderState(D3DRS_CLIPPING. TRUE) и Device->SetRen-derState(D3DRS_CLIPPING. FALSE).

Отсечение по границам области просмотра после проецирования выключить нельзя. Поэтому визуально можно обнаружить только выключение отсечения по ближней и дальней границам.

Если нужно проверить, управляется ли указанными операторами отсечение по боковым границам видимого объема, то можно измерить время рисования сцены. Сначала нужно построить сцену из 1000 треугольников, находящихся заведомо внутри видимого объема. Если операции отсечения выключаются, то при выключенном отсечении время рисования должно уменьшиться. Затем нужно построить сцену из 1000 треугольников, находящихся заведомо вне видимого объема. Если операции отсечения выключаются, то при выключенном отсечении время рисования должно увеличиться.

После рисования можно получить информацию об отсечении вызовом функции GetCl ipStatus(D3DCLIPSTATUS9 *pCl ipStatus). В соответствующих полях структуры взводится бит, если хоть одна вершина выходит за границу.

Указанная информация выдается после рисования и если отсечение включено. Но эти данные выдаются только при обработке вершин основным процессором, так как графический ускоритель их не возвращает и библиотеке нечем заполнить структуру D3DCLIPSTATUS9.

Настройка кадрирования Для переключения графической системы между режимами шторки и линзы можно создать невидимую страницу по размерам экрана. Тогда режим линзы можно имитировать, изменяя размеры области просмотра в соответствии с изменением окна. При этом ее копирование на экран будет выполняться без масштабирования. В режиме шторки вся невидимая страница назначается в качестве области просмотра, но после рисования методом Present () копируется на экран только та часть области, которая соответствует размеру окна. В листинге 23.7 приведен текст модуля проекта Линза_Шторка_0Х.


⇐ Предыдущая| |Следующая ⇒