$ brew install glm
----------------------------
glm test code.
----------------------------
Each row and column in glm::mat4 is zero-based:
glm::mat4 m4( 1.0f ); // construct identity matrix
m4[ 0 ] // column zero
m4[ 0 ].x // same as m4[ 0 ][ 0 ]
m4[ 0 ].y // same as m4[ 0 ][ 1 ]
m4[ 0 ].z // same as m4[ 0 ][ 2 ]
m4[ 0 ].w // same as m4[ 0 ][ 3 ]
Each column of matrix glm::mat4 is a vec4.
To set the entire column, e.g. for translation,
glm::mat4 m4( 1.0f ); // construct identity matrix
m4[ 3 ] = glm::vec4( vec3( x, y, z ), 1.0f );
1: #include <iostream>
2: using namespace std;
3: // Include GLM
4: #include <glm/glm.hpp>
5: #include <glm/gtc/matrix_transform.hpp>
6: #include <glm/gtc/type_ptr.hpp>
7: #include <glm/gtx/transform.hpp>
8: #include <glm/gtx/string_cast.hpp>
9: #include <math.h>
10: float deg2rad(float deg) { return deg*M_PI/180.; }
11: void print (glm::mat3 r, string s)
12: {
13: cout << s << endl;
14: for (int i=0; i<3; i++) {
15: for (int j=0; j<3; j++) {
16: cout << " " << r[i][j] ;
17: }
18: cout << endl;
19: }
20: }
21: void print (const glm::mat4 &r, string s)
22: {
23: cout << s << endl;
24: for (int i=0; i<4; i++) {
25: for (int j=0; j<4; j++) {
26: cout << " " << r[i][j] ;
27: }
28: cout << endl;
29: }
30: }
31: void print(const glm::vec3& v, string s)
32: {
33: cout << s << endl;
34: for (int i=0; i<3; i++) {
35: cout << " " << v[i] ;
36: }
37: cout << endl;
38: }
39: int main()
40: {
41: float degree = 45.;
42: glm::vec3 zAxis(0.f, 0.f, 1.f);
43: glm::mat3 R3 = glm::mat3(glm::rotate (deg2rad(degree),zAxis));
44: glm::mat4 R4 = glm::rotate (deg2rad(degree),zAxis);
45: cout << "Note that glm matrices are stored in column major order!" << endl;
46: cout << "----" << endl;
47: print(R3, "R3");
48: printf("----\n");
49: cout << "The following will show you column vectors enclosed by parantheses." << endl;
50: cout << "R3: " << glm::to_string(R3) << endl;
51: printf("----\n");
52: print(R4, "R4");
53: printf("----\n");
54: glm::vec2 p(1,0), q(0,1);
55: glm::vec3 u(1,1,1);
56: glm::vec3 ru = R3 * u,
57: rp = R3 * glm::vec3(p,1),
58: rq = R3 * glm::vec3(q,1);
59: printf("This is the 1st column of R3.\n");
60: print(rp, "rp:");
61: printf("----\n");
62: printf("This is the 2nd column of R3.\n");
63: print(rq, "rq:");
64: printf("----\n");
65: printf("This is the 45 degrees rotation result of (1,1,1) about the z-axis.\n");
66: print(ru, "ru:");
67: printf("----\n");
68: glm::mat3 H(1.0); // identity matrix
69: H[2].x = 1.0; // (0,2)-element of H
70: cout << "H: " << glm::to_string(H) << endl;
71: H[2] = glm::vec3(2.0f, 3.0f, 1.0f); // 2d translation
72: cout << "H: " << glm::to_string(H) << endl;
73: glm::mat3 T = H * R3;
74: cout << "H*R: " << glm::to_string(T) << endl;
75: return 0;
76: }
77: // EOF //