• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1XXX - Not complete yet!!!
2
3Name
4
5    EXT_cull_vertex
6
7Name Strings
8
9    GL_EXT_cull_vertex
10
11Version
12
13    $Date: 1996/11/21 00:52:20 $ $Revision: 1.3 $
14
15Number
16
17    98
18
19Dependencies
20
21    None
22
23Overview
24
25    This extension introduces a method for culling vertexes in object
26    space based on the value of the dot product between the normal at
27    the vertex and a culling eye direction.
28
29    Culling a polygon by examining its vertexes in object space can be
30    more efficient than screen space polygon culling since the transformation
31    to screen space (which may include a division by w) can be avoided for
32    culled vertexes.  Also, vertex culling can be computed before vertexes
33    are assembled into primitives.  This is a useful property when drawing
34    meshes with shared vertexes, since a vertex can be culled once, and the
35    resulting state can be used for all primitives which share the vertex.
36
37Issues
38
39    * Should FrontFace affect the comparison of the dot product?
40      It may be useful.  For non-local eye positions it is easy for
41      the application to flip the eye direction in order to cull
42      either front or back faces.  This doesn't work as well for
43      local eye positions.  We'll defer this for now; it is easy
44      to add as an extension later.
45
46    * Could determine the eye position/direction in object space
47      by transforming the vector (0, 0, 1, 0) by the inverse of
48      the composite of the modelview and projection transformations.
49      Seems better to have the application provide the eye position/direction
50      than to have OpenGL pick one arbitrarily.
51
52New Procedures and Functions
53
54    void CullParameterfvEXT (enum pname, float *params)
55    void CullParameterdvEXT (enum pname, double *params)
56
57New Tokens
58
59   Accepted by the <cap> parameter of Enable, Disable, and
60   IsEnabled, and by the <pname> parameter of GetBooleanv,
61   GetIntegerv, GetFloatv, and GetDoublev:
62
63       CULL_VERTEX_EXT                     0x81AA
64
65   Accepted by the <pname> parameter of CullParameterfvEXT,
66   CullParameterdvEXT, GetBooleanv, GetIntegerv, GetFloatv, and
67   GetDoublev:
68
69       CULL_VERTEX_EYE_POSITION_EXT        0x81AB
70       CULL_VERTEX_OBJECT_POSITION_EXT     0x81AC
71
72Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation)
73
74   Before the discussion of Clipping, add a description of
75   vertex culling.
76
77   Vertex Culling
78
79   Vertex culling may be used to eliminate vertexes which are
80   part of back facing primitives.  Vertex culling is enabled
81   or disabled by using the Enable or Disable commands with
82   the symbolic constant CULL_VERTEX_EXT.
83
84   When vertex culling is enabled, vertexes are classified as
85   front or back facing according to the sign of the dot
86   product between the normal at the vertex and an eye direction
87   vector from the vertex toward the eye position.  When
88   (normal dot eye_direction) <= 0 the vertex is classified as
89   back facing.  When (normal dot eye_direction) > 0 the vertex
90   is classified as front facing.  Vertexes are culled when the
91   face orientation determined by the dot product is the same
92   as the face specified by CullFace.  When all of the vertexes
93   of a polygon are culled, then the polygon is culled.
94
95   The eye direction used for vertex culling is determined
96   by the culling eye position.  The culling eye position
97   is homogeneous (like a light position).  When the w component
98   of the position is non-zero, the position is local and the
99   eye direction at each vertex is computed by subtracting
100   the vertex position from the eye position.  When the w
101   component of the position is zero, the position is non-local
102   and the is used as the eye direction for all vertexes.
103
104   The culling eye position is specified by the CullParameter
105   command.  Positions specified when <pname> is
106   CULL_VERTEX_EYE_POSITION_EXT are in eye space and are
107   transformed by the inverse of the current MODELVIEW
108   transformation.  Positions specified when <pname> is
109   CULL_VERTEX_OBJECT_POSITION_EXT are in object space and are
110   used directly.
111
112   Vertex culling is performed independently of face culling.
113   Polygons on the silhouettes of objects may have both front
114   and back facing vertexes.  Since polygons are culled only
115   when all of their vertexes are culled, face culling may have
116   to be used in addition to vertex culling in order to correctly
117   cull silhouette polygons.
118
119Additions to Chapter 3 of the 1.1 Specification (Rasterization)
120
121    None
122
123Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations
124and the Frame Buffer)
125
126    None
127
128Additions to Chapter 5 of the 1.1 Specification (Special Functions)
129
130    None
131
132Additions to Chapter 6 of the 1.1 Specification (State and State Requests)
133
134    None
135
136Additions to the GLX Specification
137
138    XXX - Not complete yet!!!
139
140GLX Protocol
141
142    XXX - Not complete yet!!!
143
144Errors
145
146    INVALID_ENUM if <pname> parameter to CullParameterfvEXT or
147    CullParameterdvEXT is not CULL_VERTEX_EYE_POSITION_EXT, or
148    CULL_VERTEX_OBJECT_POSITION_EXT.
149
150    INVALID_OPERATION if CullParameterfvEXT or CullParameterdvEXT called
151    between execution of Begin and the corresponding execution of End.
152
153New State
154
155                                                                Initial
156    Get Value                           Get Command     Type    Value           Attrib
157    ---------                           -----------     ----    -------         ------
158
159    CULL_VERTEX_EXT                     IsEnabled       B       False           transform/enable
160    CULL_VERTEX_OBJECT_POSITION_EXT     GetFloatv       P       (0,0,1,0)       transform
161    CULL_VERTEX_EYE_POSITION_EXT        GetFloatv       P       (0,0,1,0)       transform
162
163New Implementation Dependent State
164
165    None
166