GLMライブラリの概要 glm::transform, glm:scale, glm::rotate
2022-02-15 05:44:43
<ブロッククオート
以下に説明する関数を使用する前に、関連するヘッダーファイルを忘れずにインクルードしてください。通常はこれで十分です。
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
モデルマトリックスの主な機能も回転、並進、拡大縮小であるため、以下の3つの関数を主に使用する。
glm::transform
この関数は、一般的にオブジェクトを次のように変換するために使用されます。 変位 であり、以下のように使用される。
//purpose: to shift a vector (1, 0, 0) by (1, 1, 0) units
//1. Define the vector vec
glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);
// 2. Initialize a unit matrix
// glm::mat4 trans = glm::mat4(1.0f)
// 3. Multiply the vector (1, 1, 0) with the unit matrix
trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f));
//4. Multiply the result with the initial vector again to change its displacement
vec = trans * vec;
glm::scale
この関数は、一般的にオブジェクトを次のようにスケーリングするために使用されます。 スケーリング であり、以下のように使用される。
//Purpose: to scale the object to 0.5 times its original size and create its transformation matrix
//1. Initialize a unit matrix
glm::mat4 trans = glm::mat4(1.0f);
//2. Scale the matrix by multiplying it with glm::vec3(0.5, 0.5, 0.5)
trans = glm::scale(trans, glm::vec3(0.5, 0.5, 0.5));
glm::rotate
この関数は、一般的にオブジェクトを回転させるために使用されます。 回転させる であり、以下のように使用される。
//Purpose: Rotate the object 90 degrees counterclockwise along the z-axis to create its transformation matrix
//1. Initialize a unit matrix
glm::mat4 trans = glm::mat4(1.0f);
//2, use glm::radians to transform the angle into radians, glm::vec3(0.0, 0.0, 1.0) means rotate along the Z axis
trans = glm::rotate(trans, glm::radians(90.0f), glm::vec3(0.0, 0.0, 1.0));
ps: 上記の例における拡大縮小と回転は変換行列を作成するだけで、実際にこれらの変換をオブジェクトに適用したい場合は、オブジェクトの関連行列と乗算する必要があります。そして、シェーダデータの転送の問題になります。ここでは、簡単なコード紹介にとどめます。
// Vertex shader code for the object in question
#version 330 core
layout (location = 0) in vec3 aPos;
//uniform is a global variable that can be set to a value in the main function.
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(aPos, 1.0f);
}
// Part of the code in the main function.
//1. Declare a global variable to represent the position of the object in world space coordinates
glm::vec3 lightPos(1.2f, 1.0f, 2.0f);
//2. Initialize a unit matrix
glm::mat4 model = glm::mat4(1.0f);
//3. Shift the object to the corresponding position
model = glm::translate(model, lightPos);
//4. Scale the matrix by multiplying it with glm::vec3(0.5, 0.5, 0.5)
model = glm::scale(model, glm::vec3(0.5f));
//5. Set the value for the model in the shader
lampShader.setMat4("model", model);
// Part of the code in the main function.
//1. Declare a global variable to represent the position of the object in world space coordinates
glm::vec3 lightPos(1.2f, 1.0f, 2.0f);
//2. Initialize a unit matrix
glm::mat4 model = glm::mat4(1.0f);
//3. Shift the object to the corresponding position
model = glm::translate(model, lightPos);
//4. Scale the matrix by multiplying it with glm::vec3(0.5, 0.5, 0.5)
model = glm::scale(model, glm::vec3(0.5f));
//5. Set the value for the model in the shader
lampShader.setMat4("model", model);
関連
-
[解決済み] テスト
-
[解決済み] X リクエストが失敗したときのエラー。BadValue (整数パラメータが操作の範囲外です)
-
[解決済み] glEnableVertexAttribArrayは具体的に何をするのですか?
-
[解決済み] ハードウェアカーソルとはどのようなもので、どのように機能するのですか?
-
[解決済み] glGetShaderiv() GL_COMPILE_STATUS GL_FALSE を返す
-
[解決済み] gl_FragColorとout vec4カラーを使用する?
-
[解決済み] 最新のOpenGLで複数のテクスチャをレンダリングするには?
-
[解決済み] Ken Silverman氏のVoxlapエンジンで使用されているアルゴリズムについて、どなたか教えてください。
-
[解決済み] glutDisplayFuncとglutPostRedisplayの関係性を理解する。
-
opengl glGetIntegerv エラーを使用します。アクセス違反 ロケーション0x0000000000000000を実行中
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] FreeGLUTとGLFWの違いは何ですか?[クローズド]
-
[解決済み] OpenGL - なぜ、インデックスのためのGL_ELEMENT_ARRAY_BUFFERなのですか?
-
[解決済み] glReadPixelsはどのように動作するのですか?
-
[解決済み] glBlitFramebufferを使用してテクスチャを表示する
-
[解決済み] 頂点シェーダとフラグメントシェーダにおけるgl_Colorとgl_FrontColorの関係を教えてください。
-
[解決済み] OpenGL GLXエクステンションはサポートされていません
-
[解決済み] OpenGL - GLenumはどのように符号なし32ビット整数ですか?
-
[解決済み] glRotate(angle,x,y,z), この場合のx,y,zは何ですか?
-
[解決済み] glutSpecialFuncを正しく使うには?
-
[解決済み] glDeleteBuffers()はいつ呼び出すべきですか?