glm

glm.png

GLMはヘッダだけで構成されていて、GLSLと似た文法のライブラリ。

採用実績

ダウンロード

GLM…OpenGL Mathematics このページの右端で上の方にある「downloads」をクリックする。
↓GLM作者の書いた本

github

欠点

  • 行列の出力がちょっとイケてない。4要素ごとに改行してくれない。
  • 2Dの外積関数が無い

GLMの使い方

GLMはヘッダだけのライブラリ
なのでビルドは必要ありません。
使うには

#include <glm/glm.hpp>
int foo()
{
glm::vec4 Position = glm::vec4(glm::vec3(0.0), 1.0);
glm::mat4 Model = glm::mat4(1.0);
Model[3] = glm::vec4(1.0, 1.0, 0.0, 1.0);
glm::vec4 Transformed = Model * Position;
return 0;
}

こんな風にするだけ。
つまり、ダウンロードしたら、glm.バージョン名みたいなフォルダができるけど、その中のglmというフォルダの中にglm.hppが入っている。
それをインクルードすればいい。

printするには

glm::to_string()関数を使用する

#include <glm/glm.hpp>
#include <glm/gtx/string_cast.hpp>
 
glm::vec4 pos= glm::vec4(glm::vec3(0.0), 1.0);
cout <<"Position:"<< glm::to_string(pos) << endl;

glmのベクトル

長さを調べる

glm::length(glm::vec3);

glm::vec3().length()3と返ってきます。vec31個につき3成分(x,y,z)あるという意味です。
これと間違えないように要注意!

長さを1にする

rotate_axis=glm::normalize(rotate_axis);

glmの行列

#include <glm/mat4x4.hpp>
glm::mat4 mat;//float 成分の行列
glm::dmat4 dmat;//double成分の行列

行列の中身(先頭ポインタ)を得るには

#include <glm/gtc/type_ptr.hpp>
glm::value_ptr(m)

glLoadIdentity

glLoadIdentity:
glm::mat4(1.0) or glm::mat4();
glm::dmat4(1.0) or glm::dmat4();
glm::mat4 mat;
mat[i][j];

行列の掛け算

glMultMatrix{f, d}:
glm::mat4() * glm::mat4();
glm::dmat4() * glm::dmat4();

doubleかfloatか?

glm::mat4ならばfloat
glm::dmat4ならばdouble

gluLookatに相当するものを使う

#include <glm/gtc/matrix_transform.hpp>
m_view_matrix=glm::lookAt(m_world_eye_pos,glm::dvec3(0,0,0),glm::dvec3(0,1,0));

クォータニオン

#include <glm/gtc/quaternion.hpp> 
glm::quat q;

クォータニオンをmat4に変換する

glm::mat4 mat4Test = glm::mat4_cast(quatTest);

glmでglBufferData

glm::vec2 *pos = new glm::vec2[mVertexNum];
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*mVertexNum*glm::vec2().length(), glm::value_ptr(pos[0]), GL_STATIC_DRAW);
Bibliography
1. glm.pdf…GLMの本家による解説(チュートリアル)

math

サポートサイト Wikidot.com math