---
name: "gluUnProject"
section: "3x"
platform: "linux"
package: "xlibmesa-glu-dev"
version: "4.3.0.dfsg.1-14sarge7"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/gluUnProject"
---

# gluUnProject(3x)

map window coordinates to object coordinates

## NAME

**gluUnProject** - map window coordinates to object coordinates

## C SPECIFICATION

GLint **gluUnProject**( GLdouble *winX*,

```
	GLdouble winY,
	GLdouble winZ,
	const GLdouble *model,
	const GLdouble *proj,
	const GLint *view,
	GLdouble* objX,
	GLdouble* objY,
	GLdouble* objZ )
```

delim $$

## PARAMETERS

- *winX*, *winY*, *winZ*

  Specify the window coordinates to be mapped.

- *model*

  Specifies the modelview matrix (as from a **glGetDoublev** call).

- *proj*

  Specifies the projection matrix (as from a **glGetDoublev** call).

- *view*

  Specifies the viewport (as from a **glGetIntegerv** call).

- *objX*, *objY*, *objZ*

  Returns the computed object coordinates.

## DESCRIPTION

**gluUnProject** maps the specified window coordinates into object  coordinates using *model*, *proj*, and *view*. The result is stored in *objX*, *objY*, and *objZ*. A return value of  **GL\_TRUE** indicates success; a return value of **GL\_FALSE** indicates failure.

To compute the coordinates (*objX*, *objY*, and *objZ*), **gluUnProject** multiplies the normalized device coordinates by the inverse of *model*\**proj* as follows:

left ( down 70 {cpile { ~"objX" above ~"objY" above ~"objZ" above ~W}} ~~ right ) ~=~ INV(P M)  left ( down 140 {cpile {  { {2("winX" ~-~ "view"\[0\])} over {"view" \[2\]} ~-~ 1 } above  { {2("winY" ~-~ "view"\[1\])} over {"view"\[3\]} ~-~ 1 } above  { 2("winZ") ~-~ 1 } above  1}} ~~ right ) $INV()$ denotes matrix inversion.  W is an unused variable, included for consistent matrix notation.

## SEE ALSO

**glGet(3G)**, **gluProject(3G)**
