glm::vec4
をglm::vec3
に変換するにはどうすればよいですか?
x
、y
、z
のみが必要です。w
コンポーネントを削除できます。
GLSLでは.xyz
[1]を使用してこれを行うことができますが、glmではこれによりコンパイルエラーが発生します。
error: 'glm::vec4' has no member named 'xyz'
[1] http://en.wikibooks.org/wiki/GLSL_Programming/Vector_and_Matrix_Operations#Components
Vec3 constructorを使用するだけです。ここでは、0.9.5ブランチで:
glm::vec4 v4(1, 2, 3, 4);
glm::vec3 v(v4);
printf("%s\n", glm::to_string(v).c_str());
そしてこの出力を与えます
fvec3(1.000000、2.000000、3.000000)
名前の競合を引き起こす可能性のあるマクロを使用するため、glmではデフォルトでスウィズリングが有効になっていません。有効にするには:
#define GLM_SWIZZLE
#include <glm/glm.hpp>
Glmでは、スウィズリングは関数を使用して行われます。
vec3 v3 = v4.xyz();