Name IBM_cull_vertex Name Strings GL_IBM_cull_vertex Version IBM Id: cull_vertex.spec,v 1.4 2000/02/11 15:11:46 brokensh Exp Number 199 Dependencies EXT_cull_vertex affects the definition of this extension Overview IBM_cull_vertex provides a subset of the vertex culling functionality found in EXT_cull_vertex without providing a guarantee that faces will be culled because of it. EXT_cull_vertex is a technically superior solution, but the vertex culling aspect of IBM_cull_vertex provides generally useful function cheaply (without imposing the mandated culling found in EXT_cull_vertex). Issues * Should the application be allowed to specify eye direction explicitly, as is the case in EXT_cull_vertex? Not in this specification; addressed by the full EXT_cull_vertex extension. * Should a control be provided to reverse the eye direction, which would be necessary to cull correctly if DepthRange is specified with near > far? Or if the normals specified were reversed? FrontFace could be used in combination with two sided lighting to produce realistic lighting effects if the normals were consistenly reversed. Neither is addressed in the current specification. Both are addressed by EXT_cull_vertex. * Should a control be provided to perform vertex culling with a local eye position? Not in this specification; addressed by EXT_cull_vertex. * Should forward compatibility between IBM_cull_vertex and EXT_cull_vertex be provided (i.e., applications must change if/when we fully implement EXT_cull_vertex)? Probably not. New Procedures and Functions None New Tokens Accepted by the parameter of Enable, Disable, and IsEnabled, and by the parameter of GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev: CULL_VERTEX_IBM 103050 Additions to Chapter 2 of the GL Specification (OpenGL Operation) Before the discussion of Clipping, add a description of vertex culling similar to that found in the EXT_cull_vertex extension: Vertex Culling When vertex culling is enabled, vertices are classified as front or back facing according to the sign of the dot product between the normal at the vertex and an eye direction vector from the vertex toward the eye position. When (normal dot eye_direction) <= 0 the vertex is classified as back facing. When (normal dot eye_direction) > 0 the vertex is classified as front facing. Vertices are culled when the face orientation determined by the dot product is the same as the face specified by CullFace. When all of the vertices of a polygon are culled, then the polygon may be culled. Unlike EXT_cull_vertex, vertex culling using IBM_cull_vertex does not necessarily result in polygons being culled even if all of the vertices of the polygon are culled. The eye direction is determined by transforming the column vector (0, 0, 1) by the upper leftmost 3x3 matrix taken from the inverse of the modelview matrix. The eye direction is undefined if the modelview matrix is singular or nearly singular. This operation in effect projects the z axis in eye coordinates back into object space. If the projection matrix or DepthRange settings cause the z axis in window coordinates to be misaligned with the z axis in eye coordinates, this extension should not be used. Vertex culling is performed independently of face culling. Polygons on the silhouettes of objects may have both front and back facing vertices. Since polygons are culled only if all of their vertices are culled and are not necessarily culled by IBM_cull_vertex even in that case, face culling may have to be used in addition to vertex culling in order to correctly cull silhouette polygons. Additions to Chapter 3 of the GL Specification (Rasterization) None Additions to Chapter 4 of the GL Specification (Per-Fragment Operations and the Framebuffer) None Additions to Chapter 5 of the GL Specification (Special Functions) None Additions to Chapter 6 of the GL Specification (State and State Requests) None Additions to the GLX Specification None GLX Protocol None. Errors None New State Get Value Type Get Command Value Sec Attrib ----------------------------- ---- ----------- ----- ---- ------- CULL_VERTEX_IBM B IsEnabled FALSE -- transform/ enable New Implementation Dependent State None