1Name 2 3 SGIX_reference_plane 4 5Name String 6 7 GL_SGIX_reference_plane 8 9Version 10 11 $Date: 1996/03/08 00:11:51 $ $Revision: 1.5 $ 12 13Number 14 15 60 16 17Dependencies 18 19 None 20 21Overview 22 23 This extension allows a group of coplanar primitives to be rendered 24 without depth-buffering artifacts. This is accomplished by generating 25 the depth values for all the primitives from a single ``reference plane'' 26 rather than from the primitives themselves. This ensures that all the 27 primitives in the group have exactly the same depth value at any given 28 sample point, no matter what imprecision may exist in the original 29 specifications of the primitives or in the GL's coordinate transformation 30 process. 31 32 The reference plane is defined by a four-component plane equation. 33 When glReferencePlaneSGIX is called, equation is transformed by the 34 transpose-adjoint of a matrix that is the complete object-coordinate 35 to clip-coordinate transformation. The resulting clip-coordinate 36 coefficients are transformed by the current viewport when the reference 37 plane is enabled. 38 39 The reference plane is enabled and disabled with glEnable and glDisable. 40 41 If the reference plane is enabled, a fragment (xf,yf,zf) will have a 42 new z coordinate generated from (xf,yf) by giving it the same z value 43 that the reference plane would have at (xf,yf). 44 45Issues 46 47 * What should the default reference plane be? 48 - (0,0,1,0) in window coords seems good 49 50 * What happens if the reference plane does not intersect the view frustum? 51 - can disallow enabling of the plane, or substitute the default plane. 52 53 * Should it be possible to query the validity of the reference plane just 54 like RasterPos? 55 - could be useful 56 57New Procedures and Functions 58 59 void glReferencePlaneSGIX(const GLdouble *equation); 60 61New Tokens 62 63 Accepted by the <pname> parameter of glGet, and the <cap> parameter 64 of glEnable, glDisable, and glIsEnabled: 65 66 REFERENCE_PLANE_SGIX 67 68 Accepted by the <pname> parameter of glGet: 69 70 REFERENCE_PLANE_EQUATION_SGIX 71 72Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation) 73 74 None 75 76additions to Chapter 3 of the 1.0 Specification (Rasterization) 77 78 If enabled, the reference plane is used to calculate the fragment's z 79 value based on the fragment's x and y values and the reference plane 80 itself. 81 82 Let the reference plane be defined by a four-component plane equation 83 in window coordinates. 84 85 a*x + b*y + c*z + d = 0.0 86 87 then if the incoming fragment has an x value of xf and a y value of yf, 88 the fragment's z value zf will be: 89 90 zf = -(d + a*xf + b*yf) / c; 91 92 The generated zf is undefined if it falls outside the valid zbuffer range. 93 (That is what KONA does). 94 95Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations 96and the Frame Buffer) 97 98 None 99 100Additions to Chapter 5 of the 1.0 Specification (Special Functions) 101 102 None 103 104Additions to Chapter 6 of the 1.0 Specification (State and State Requests) 105 106 None 107 108Additions to the GLX Specification 109 110 A new GL rendering command is needed to support 111 ReferencePlaneSGIX(). The following command is sent to the 112 server as part of a glXRender request: 113 114 ReferencePlaneSGIX 115 2 20 rendering command length 116 2 TBD rendering command opcode 117 4 FLOAT32 a (x coefficient) of plane equation 118 4 FLOAT32 b (y coefficient) of plane equation 119 4 FLOAT32 c (z coefficient) of plane equation 120 4 FLOAT32 d (constant term) of plane equation 121 122 No new protocol is required to handle state retrieval. 123 124Errors 125 126 INVALID_OPERATION is generated if ReferencePlaneSGIX is called between 127 execution of Begin and the corresponding execution of End. 128 129New State 130 131 Get Value Get Command Type Initial Value Attrib 132 --------- ----------- ---- ------------- ------ 133 REFERENCE_PLANE_SGIX IsEnabled B FALSE transform/enable 134 REFERENCE_PLANE_EQUATION_SGIX GetFloatv V ??? transform 135 136 The plane coefficiants returned by Get() are in clip coordinates. 137 138