120 lines
3.5 KiB
Plaintext
120 lines
3.5 KiB
Plaintext
'\" e
|
|
'\"! eqn | mmdoc
|
|
'\"macro stdmacro
|
|
.ds Vn Version 1.2
|
|
.ds Dt 24 September 1999
|
|
.ds Re Release 1.2.1
|
|
.ds Dp Jan 14 18:30
|
|
.ds Dm 01 multmatri
|
|
.ds Xs 32348 6 multmatrix.gl
|
|
.TH GLMULTMATRIX 3G
|
|
.SH NAME
|
|
.B "glMultMatrixd, glMultMatrixf
|
|
\- multiply the current matrix with the specified matrix
|
|
|
|
.SH C SPECIFICATION
|
|
void \f3glMultMatrixd\fP(
|
|
const GLdouble \fI*m\fP )
|
|
.nf
|
|
.fi
|
|
void \f3glMultMatrixf\fP(
|
|
const GLfloat \fI*m\fP )
|
|
.nf
|
|
.fi
|
|
|
|
.EQ
|
|
delim $$
|
|
.EN
|
|
.SH PARAMETERS
|
|
.TP \w'\f2m\fP\ \ 'u
|
|
\f2m\fP
|
|
Points to 16 consecutive values that are used as the elements of
|
|
a $4 ~times~ 4$ column-major matrix.
|
|
.SH DESCRIPTION
|
|
\%\f3glMultMatrix\fP multiplies the current matrix with the one specified using \f2m\fP, and
|
|
replaces the current matrix with the product.
|
|
.P
|
|
The current matrix is determined by the current matrix mode (see \%\f3glMatrixMode\fP). It is either the projection matrix,
|
|
modelview matrix,
|
|
or the texture matrix.
|
|
.SH EXAMPLES
|
|
If the current matrix is $C$, and the coordinates
|
|
to be transformed are, $v ~=~ (v[0], v[1], v[2], v[3])$.
|
|
Then the current transformation is $C ~times~ v$, or
|
|
.sp
|
|
.ce
|
|
.EQ
|
|
down 130
|
|
{{ left ( matrix {
|
|
ccol { c[0] above c[1] above c[2] above c[3] }
|
|
ccol { c[4] above c[5] above c[6] above c[7] }
|
|
ccol { c[8] above c[9] above c[10] above c[11] }
|
|
ccol { c[12]~ above c[13]~ above c[14]~ above c[15]~ }
|
|
} right ) } ~~ times ~~
|
|
{left ( matrix {
|
|
ccol { v[0]~ above v[1]~ above v[2]~ above v[3]~ }
|
|
} right )} }
|
|
.EN
|
|
.sp
|
|
.P
|
|
Calling \%\f3glMultMatrix\fP with an argument of $"m" ~=~ m[0], m[1], ..., m[15]$
|
|
replaces the current transformation with $(C ~times~ M) ~times~ v$,
|
|
or
|
|
.sp
|
|
.ce
|
|
.EQ
|
|
down 130
|
|
{{ left ( matrix {
|
|
ccol { c[0] above c[1] above c[2] above c[3] }
|
|
ccol { c[4] above c[5] above c[6] above c[7] }
|
|
ccol { c[8] above c[9] above c[10] above c[11] }
|
|
ccol { c[12]~ above c[13]~ above c[14]~ above c[15]~ }
|
|
} right ) } ~~ times ~~
|
|
{ left ( matrix {
|
|
ccol { m[0] above m[1] above m[2] above m[3] }
|
|
ccol { m[4] above m[5] above m[6] above m[7] }
|
|
ccol { m[8] above m[9] above m[10] above m[11] }
|
|
ccol { m[12]~ above m[13]~ above m[14]~ above m[15]~ }
|
|
} right ) } ~~ times ~~
|
|
{left ( matrix {
|
|
ccol { v[0]~ above v[1]~ above v[2]~ above v[3]~ }
|
|
} right )} }
|
|
.EN
|
|
.sp
|
|
.P
|
|
Where '$times$' denotes matrix multiplication, and
|
|
$v$ is represented as a $4 ~times~ 1$ matrix.
|
|
.br
|
|
.SH NOTES
|
|
While the elements of the matrix may be specified with
|
|
single or double precision, the GL may store or operate on these
|
|
values in less than single precision.
|
|
.P
|
|
In many computer languages $4 ~times~ 4$ arrays are represented
|
|
in row-major order. The transformations just described
|
|
represent these matrices in column-major order.
|
|
The order of the multiplication is important. For example, if the current
|
|
transformation is a rotation, and \%\f3glMultMatrix\fP is called with a translation matrix,
|
|
the translation is done directly on the coordinates to be transformed,
|
|
while the rotation is done on the results of that translation.
|
|
.SH ERRORS
|
|
\%\f3GL_INVALID_OPERATION\fP is generated if \%\f3glMultMatrix\fP
|
|
is executed between the execution of \%\f3glBegin\fP
|
|
and the corresponding execution of \%\f3glEnd\fP.
|
|
.SH ASSOCIATED GETS
|
|
\%\f3glGet\fP with argument \%\f3GL_MATRIX_MODE\fP
|
|
.br
|
|
\%\f3glGet\fP with argument \%\f3GL_COLOR_MATRIX\fP
|
|
.br
|
|
\%\f3glGet\fP with argument \%\f3GL_MODELVIEW_MATRIX\fP
|
|
.br
|
|
\%\f3glGet\fP with argument \%\f3GL_PROJECTION_MATRIX\fP
|
|
.br
|
|
\%\f3glGet\fP with argument \%\f3GL_TEXTURE_MATRIX\fP
|
|
.SH SEE ALSO
|
|
\%\f3glLoadIdentity(3G)\fP,
|
|
\%\f3glLoadMatrix(3G)\fP,
|
|
\%\f3glMatrixMode(3G)\fP,
|
|
\%\f3glPushMatrix(3G)\fP
|
|
|