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

# glRotate(3x)

multiply the current matrix by a rotation matrix

## NAME

**glRotated, glRotatef** - multiply the current matrix by a rotation matrix

## C SPECIFICATION

void **glRotated**( GLdouble *angle*,

```
	GLdouble x,
	GLdouble y,
	GLdouble z )
```

void **glRotatef**( GLfloat *angle*,

```
	GLfloat x,
	GLfloat y,
	GLfloat z )
```

delim $$

## PARAMETERS

- *angle*

  Specifies the angle of rotation, in degrees.

- *x*, *y*, *z*

  Specify the *x*, *y*, and *z* coordinates of a vector, respectively.

## DESCRIPTION

**glRotate** produces a rotation of *angle* degrees around  the vector $("x", "y", "z")$. The current matrix (see **glMatrixMode**) is multiplied by a rotation  matrix with the product replacing the current matrix, as if **glMultMatrix** were called with the following matrix as its argument:

left ( ~ down 20 matrix {\
  ccol { \
    "x" sup 2 (1 ^-^ c)~+~ c above\
    "y" "x" (1 ^-^ c)~+~ "z" s above\
    "x" "z" (1 ^-^ c)~-~"y" s above\
    \~0 \
  } \
  ccol {\
    \~~ "x" "y" (1 ^-^ c)~-~"z" s above\
    \~~ "y" sup 2 (1 ^-^ c)~+~ c above\
    \~~ "y" "z" (1 ^-^ c)~+~ "x" s above\
    \~~ ~0\
  } \
  ccol {\
    \~~ "x" "z" (1 ^-^ c)~+~ "y" s above\
    \~~ "y" "z" (1 ^-^ c)~-~ "x" s above\
    \~~ "z" sup 2 (1 ^-^ c) ~+~  c above\
    \~~ ~0\
  } \
  ccol { ~0 above ~0 above ~0 above ~1} } ~~ right )

Where $c ~=~ cos ("angle")$, $s ~=~ sin ("angle")$, and  $\|\|(~"x", "y", "z"~)\|\| ~=~ 1$ (if not, the GL  will normalize this vector).

If the matrix mode is either **GL\_MODELVIEW** or **GL\_PROJECTION**, all objects drawn after **glRotate** is called are rotated. Use **glPushMatrix** and **glPopMatrix** to save and restore the unrotated coordinate system.

## NOTES

This rotation follows the right-hand rule, so if the vector $("x", "y", "z")$ points toward the user, the rotation will be counterclockwise.

## ERRORS

**GL\_INVALID\_OPERATION** is generated if **glRotate** is executed between the execution of **glBegin** and the corresponding execution of **glEnd**.

## ASSOCIATED GETS

**glGet** with argument **GL\_MATRIX\_MODE**\
 **glGet** with argument **GL\_COLOR\_MATRIX**\
 **glGet** with argument **GL\_MODELVIEW\_MATRIX**\
 **glGet** with argument **GL\_PROJECTION\_MATRIX**\
 **glGet** with argument **GL\_TEXTURE\_MATRIX**

## SEE ALSO

**glMatrixMode(3G)**, **glMultMatrix(3G)**, **glPushMatrix(3G)**, **glScale(3G)**, **glTranslate(3G)**
