OpenGL Matrix Column-Major

OpenGL Matrix Column-Major_第1张图片

 

OpenGL Matrix Column-Major_第2张图片



如下是 msdn的相关函数的说明,又进一步说明和验证 color-major 概念


glLoadMatrixd function

Applies to: desktop apps only

The glLoadMatrixd and glLoadMatrixf functions replace the current matrix with an arbitrary matrix.

Syntax

Copy
void WINAPI glLoadMatrixd(
  const GLdouble *m
);

Parameters

m

A pointer to a 4x4 matrix stored in column-major order as 16 consecutive values.

Return value

This function does not return a value.

Error codes

The following error code can be retrieved by the glGetError function.

Name Meaning
GL_INVALID_OPERATION

                                The function was called between a call to glBegin and the corresponding call to glEnd.

Remarks

The glLoadMatrix function replaces the current matrix with the one specified in m. The current matrix is the projection matrix, modelview matrix, or texture matrix, determined by the current matrix mode (see glMatrixMode).

The m parameter points to a 4x4 matrix of single-precision or double-precision floating-point values stored in column-major order. That is, the matrix is stored as shown in the following image.

// 4 x 4 array will be organized into a0, a4, a8, a12 (from first colum of 16 consecutive values),

// then a1, a5, a9, a13 (from second column), etc

// Therefore it is regarded as column-major order.

OpenGL Matrix Column-Major_第3张图片

The following functions retrieve information related to glLoadMatrix:

glGet with argument GL_MATRIX_MODE

glGet with argument GL_MODELVIEW_MATRIX

glGet with argument GL_PROJECTION_MATRIX

glGet with argument GL_TEXTURE_MATRIX

 

// for example

 const GLdouble bias[16] = { 
  0.5, 0.0, 0.0, 0.0,
  0.0, 0.5, 0.0, 0.0,
  0.0, 0.0, 0.5, 0.0,
 0.5, 0.5, 0.5, 1.0};

 glLoadIdentity(); 
 glLoadMatrixd(bias);

This will cause current matrix is like thus.

  0.5, 0.0, 0.0, 0.5,  (a0, a4, a8,  a12)
  0.0, 0.5, 0.0, 0.5,  (a1, a5, a9,  a13)
  0.0, 0.0, 0.5, 0.5,  (a2, a6, a10, a14)
 0.0, 0.0, 0.0, 1.0    (a3, a7, a11, a15)



你可能感兴趣的:(OpenGL Matrix Column-Major)