Поделиться через


Смещение глубины (Direct3D 9)

Многоугольников, которые являются копланарными в трехмерном пространстве, можно сделать так, чтобы они выглядели как не копланарные, добавив z-смещение к каждому из них. Этот метод обычно используется для обеспечения правильного отображения теней в сцене. Например, тень на стене, скорее всего, будет иметь то же значение глубины, что и стена. При отрисовки сначала стены, а затем тени, тень может быть невидимой или артефакты глубины могут быть видны. Вы можете изменить порядок отрисовки копланарных объектов в надежде обратить вспять эффект, но артефакты глубины по-прежнему вероятны.

Приложение может помочь обеспечить правильную отрисовку копланарных многоугольников, добавив смещение к значениям z, которые система использует при отрисовке наборов копланарных многоугольников. Чтобы добавить z-смещение к набору многоугольников, вызовите метод IDirect3DDevice9::SetRenderState непосредственно перед их отображением, задав для параметра State значение D3DRS_DEPTHBIAS, а для параметра Value — подходящее значение с плавающей точкой (например, подходящее значение может быть от -1,0 до 1,0); Чтобы передать это значение в SetRenderState, необходимо также привести значение к DWORD. Более высокое значение z-смещения повышает вероятность того, что отрисовываемые многоугольник будут видны при отображении с другими копланарными многоугольниками.

Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS

где m — максимальный наклон глубины отображаемого треугольника.

m = max(abs(delta z / delta x), abs(delta z / delta y)) 

Единицы измерения для D3DRS_DEPTHBIAS и D3DRS_SLOPESCALEDEPTHBIAS состояний отрисовки зависят от того, включена ли z-буферизация или w-буферизация. Приложение должно предоставить подходящие значения.

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

// RenderStates
D3DRS_SLOPESCALEDEPTHBIAS, // Defaults to zero
D3DRS_DEPTHBIAS,           // Defaults to zero
// Caps
D3DPRASTERCAPS_DEPTHBIAS           
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS 

Конвейер пикселей