# Shader Depth Offset [Polygon Offset]

Offset Factor, Units  factor

Specifies a scale factor that is used to create a variable depth offset for each polygon. The initial value is 0.

units

Is multiplied by an implementation-specific value to create a constant depth offset. The initial value is 0.

When  GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE , or  GL_POLYGON_OFFSET_POINT  is enabled, each fragment's  depth  value will be offset after it is interpolated from the  depth  values of the appropriate vertices. The value of the offset is  factor×DZ+r×units factor×DZ+r×units , where  DZ DZ  is a measurement of the change in depth relative to the screen area of the polygon, and  r r  is the smallest value that is guaranteed to produce a resolvable offset for a given implementation. The offset is added before the depth test is performed and before the value is written into the depth buffer.

offset = (m * factor) + (r * units)

m是多边形的深度的斜率（在光栅化阶段计算得出）中的最大值。这句话难以理解，你只需知道，一个多边形越是与近裁剪面（near clipping plan）平行，m就越接近0。

r是能产生在窗口坐标系的深度值中可分辨的差异的最小值，r是由具体实现OpenGL的平台指定的一个常量。

1. a= zFar/( zFar- zNear)
2. b= zFar* zNear/( zNear- zFar)
3. z= distancefrom the eye to theobject
4. z_buffer_value= a+ b/ z

https://docs.unity3d.com/Manual/SL-CullAndDepth.html

https://www.opengl.org/archives/resources/faq/technical/polygonoffset.htm

https://www.opengl.org/sdk/docs/man/html/glPolygonOffset.xhtml

http://www.cnblogs.com/bitzhuwei/p/polygon-offset-for-stitching-andz-fighting.html

09-07 2089
05-10 6790
11-25 9114
09-20 6221
01-29 577
11-25 1022
07-13 909
12-15 5880