web-dev-qa-db-ja.com

glm :: vec4をglm :: vec3に変換する

glm::vec4glm::vec3に変換するにはどうすればよいですか?

xyzのみが必要です。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

17
SystemParadox

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)

29
kerim

名前の競合を引き起こす可能性のあるマクロを使用するため、glmではデフォルトでスウィズリングが有効になっていません。有効にするには:

#define GLM_SWIZZLE
#include <glm/glm.hpp>

Glmでは、スウィズリングは関数を使用して行われます。

vec3 v3 = v4.xyz();

参照: http://glm.g-truc.net/0.9.2/api/a00002.html

19
SystemParadox