1 <?xml version=
"1.0" encoding=
"UTF-8"?>
2 <!DOCTYPE book PUBLIC
"-//OASIS//DTD DocBook MathML Module V1.1b1//EN"
3 "http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd">
4 <refentry id=
"gluUnProject4">
9 <holder>Silicon Graphics, Inc.
</holder>
12 <refentrytitle>gluUnProject4
</refentrytitle>
13 <manvolnum>3G
</manvolnum>
16 <refname>gluUnProject4
</refname>
17 <refpurpose>map window and clip coordinates to object coordinates
</refpurpose>
19 <refsynopsisdiv><title>C Specification
</title>
22 <funcdef>GLint
<function>gluUnProject4
</function></funcdef>
23 <paramdef>GLdouble
<parameter>winX
</parameter></paramdef>
24 <paramdef>GLdouble
<parameter>winY
</parameter></paramdef>
25 <paramdef>GLdouble
<parameter>winZ
</parameter></paramdef>
26 <paramdef>GLdouble
<parameter>clipW
</parameter></paramdef>
27 <paramdef>const GLdouble *
<parameter>model
</parameter></paramdef>
28 <paramdef>const GLdouble *
<parameter>proj
</parameter></paramdef>
29 <paramdef>const GLint *
<parameter>view
</parameter></paramdef>
30 <paramdef>GLdouble
<parameter>nearVal
</parameter></paramdef>
31 <paramdef>GLdouble
<parameter>farVal
</parameter></paramdef>
32 <paramdef>GLdouble*
<parameter>objX
</parameter></paramdef>
33 <paramdef>GLdouble*
<parameter>objY
</parameter></paramdef>
34 <paramdef>GLdouble*
<parameter>objZ
</parameter></paramdef>
35 <paramdef>GLdouble*
<parameter>objW
</parameter></paramdef>
39 <!-- eqn: ignoring delim $$ -->
40 <refsect1 id=
"parameters"><title>Parameters
</title>
43 <term><parameter>winX
</parameter></term>
44 <term><parameter>winY
</parameter></term>
45 <term><parameter>winZ
</parameter></term>
48 Specify the window coordinates to be mapped.
53 <term><parameter>clipW
</parameter></term>
56 Specify the clip w coordinate to be mapped.
61 <term><parameter>model
</parameter></term>
64 Specifies the modelview matrix (as from a
<citerefentry><refentrytitle>glGetDoublev
</refentrytitle></citerefentry> call).
69 <term><parameter>proj
</parameter></term>
72 Specifies the projection matrix (as from a
<citerefentry><refentrytitle>glGetDoublev
</refentrytitle></citerefentry> call).
77 <term><parameter>view
</parameter></term>
80 Specifies the viewport (as from a
<citerefentry><refentrytitle>glGetIntegerv
</refentrytitle></citerefentry> call).
85 <term><parameter>nearVal
</parameter></term>
86 <term><parameter>farVal
</parameter></term>
89 Specifies the near and far planes (as from a
<citerefentry><refentrytitle>glGetDoublev
</refentrytitle></citerefentry> call).
94 <term><parameter>objX
</parameter></term>
95 <term><parameter>objY
</parameter></term>
96 <term><parameter>objZ
</parameter></term>
97 <term><parameter>objW
</parameter></term>
100 Returns the computed object coordinates.
106 <refsect1 id=
"description"><title>Description
</title>
108 <function>gluUnProject4
</function> maps the specified window coordinatesi:
<parameter>winX
</parameter>,
<parameter>winY
</parameter>, and
<parameter>winZ
</parameter>
109 and its clip w coordinate
<parameter>clipW
</parameter>
112 <inlineequation><mml:math>
113 <!-- eqn: (objX, objY, objZ, objW):-->
114 <mml:mfenced open=
"(" close=
")">
115 <mml:mi mathvariant=
"italic">objX
</mml:mi>
116 <mml:mi mathvariant=
"italic">objY
</mml:mi>
117 <mml:mi mathvariant=
"italic">objZ
</mml:mi>
118 <mml:mi mathvariant=
"italic">objW
</mml:mi>
120 </mml:math></inlineequation>
121 using
<parameter>model
</parameter>,
<parameter>proj
</parameter>, and
<parameter>view
</parameter>.
<parameter>clipW
</parameter> can be other than
122 1 as for vertices in
<citerefentry><refentrytitle>glFeedbackBuffer
</refentrytitle></citerefentry> when data type
123 <constant>GLU_4D_COLOR_TEXTURE
</constant> is returned.
124 This also handles the case
125 where the
<parameter>nearVal
</parameter> and
<parameter>farVal
</parameter> planes are different from the default,
126 0 and
1, respectively.
128 value of
<constant>GLU_TRUE
</constant> indicates success; a return value of
<constant>GLU_FALSE
</constant>
132 To compute the coordinates
133 <inlineequation><mml:math>
134 <!-- eqn: (objX, objY, objZ, objW):-->
135 <mml:mfenced open=
"(" close=
")">
136 <mml:mi mathvariant=
"italic">objX
</mml:mi>
137 <mml:mi mathvariant=
"italic">objY
</mml:mi>
138 <mml:mi mathvariant=
"italic">objZ
</mml:mi>
139 <mml:mi mathvariant=
"italic">objW
</mml:mi>
141 </mml:math></inlineequation>,
142 <function>gluUnProject4
</function> multiplies the normalized device coordinates by the inverse of
143 <parameter>model
</parameter> *
<parameter>proj
</parameter> as follows:
146 <informalequation><mml:math>
147 <!-- eqn: left ( cpile { objX above objY above objZ above objW} right ) = INV(P M) left ( cpile { {2(winX - view[0])} over {view[2]} - 1 above {2(winY - view[1])} over {view[3]} - 1 above {2(winZ - nearVal)} over {(farVal - nearVal)} - 1 above clipW} right ):-->
149 <mml:mfenced open=
"(" close=
")">
152 <mml:mi mathvariant=
"italic">objX
</mml:mi>
155 <mml:mi mathvariant=
"italic">objY
</mml:mi>
158 <mml:mi mathvariant=
"italic">objZ
</mml:mi>
161 <mml:mi mathvariant=
"italic">objW
</mml:mi>
168 <mml:mi mathvariant=
"italic">INV
</mml:mi>
169 <mml:mo>⁡</mml:mo>
170 <mml:mfenced open=
"(" close=
")">
172 <mml:mi mathvariant=
"italic">P
</mml:mi>
173 <mml:mo>⁢</mml:mo>
174 <mml:mi mathvariant=
"italic">M
</mml:mi>
178 <mml:mo>⁢</mml:mo>
179 <mml:mfenced open=
"(" close=
")">
184 <mml:mfenced open=
"" close=
"">
187 <mml:mo>⁡</mml:mo>
188 <mml:mfenced open=
"(" close=
")">
190 <mml:mi mathvariant=
"italic">winX
</mml:mi>
193 <mml:mi mathvariant=
"italic">view
</mml:mi>
194 <mml:mo>⁡</mml:mo>
195 <mml:mfenced open=
"[" close=
"]">
203 <mml:mfenced open=
"" close=
"">
205 <mml:mi mathvariant=
"italic">view
</mml:mi>
206 <mml:mo>⁡</mml:mo>
207 <mml:mfenced open=
"[" close=
"]">
220 <mml:mfenced open=
"" close=
"">
223 <mml:mo>⁡</mml:mo>
224 <mml:mfenced open=
"(" close=
")">
226 <mml:mi mathvariant=
"italic">winY
</mml:mi>
229 <mml:mi mathvariant=
"italic">view
</mml:mi>
230 <mml:mo>⁡</mml:mo>
231 <mml:mfenced open=
"[" close=
"]">
239 <mml:mfenced open=
"" close=
"">
241 <mml:mi mathvariant=
"italic">view
</mml:mi>
242 <mml:mo>⁡</mml:mo>
243 <mml:mfenced open=
"[" close=
"]">
256 <mml:mfenced open=
"" close=
"">
259 <mml:mo>⁡</mml:mo>
260 <mml:mfenced open=
"(" close=
")">
262 <mml:mi mathvariant=
"italic">winZ
</mml:mi>
264 <mml:mi mathvariant=
"italic">nearVal
</mml:mi>
269 <mml:mfenced open=
"" close=
"">
270 <mml:mfenced open=
"(" close=
")">
272 <mml:mi mathvariant=
"italic">farVal
</mml:mi>
274 <mml:mi mathvariant=
"italic">nearVal
</mml:mi>
284 <mml:mi mathvariant=
"italic">clipW
</mml:mi>
290 </mml:math></informalequation>
293 <inlineequation><mml:math><mml:mi mathvariant=
"italic">INV
</mml:mi></mml:math></inlineequation>
294 denotes matrix inversion.
297 <function>gluUnProject4
</function> is equivalent to
<citerefentry><refentrytitle>gluUnProject
</refentrytitle></citerefentry> when
<parameter>clipW
</parameter> is
1,
<parameter>nearVal
</parameter> is
0, and
298 <parameter>farVal
</parameter> is
1.
301 <refsect1 id=
"notes"><title>Notes
</title>
303 <function>gluUnProject4
</function> is available only if the GLU version is
1.3 or greater.
306 <refsect1 id=
"seealso"><title>See Also
</title>
308 <citerefentry><refentrytitle>gluProject
</refentrytitle></citerefentry>,
309 <citerefentry><refentrytitle>gluUnProject
</refentrytitle></citerefentry>,
310 <citerefentry><refentrytitle>glFeedbackBuffer
</refentrytitle></citerefentry>,
311 <citerefentry><refentrytitle>glGet
</refentrytitle></citerefentry>
314 <refsect1 id=
"Copyright"><title>Copyright
</title>
316 Copyright
<trademark class=
"copyright"></trademark> 1991-
2006
317 Silicon Graphics, Inc. This document is licensed under the SGI
318 Free Software B License. For details, see
319 <ulink url=
"http://oss.sgi.com/projects/FreeB/">http://oss.sgi.com/projects/FreeB/
</ulink>.