19

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

x、、のみが必要ですy-コンポーネントをドロップできます。zw

GLSLではこれは[1]で実行できます.xyzが、glmではコンパイルエラーが発生します。

error: 'glm::vec4' has no member named 'xyz'

[1] http://en.wikibooks.org/wiki/GLSL_Programming/Vector_and_Matrix_Operations#Components

4

2 に答える 2

33

vec3コンストラクターを使用するだけです。ここでは、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)

于 2013-09-17T06:05:58.297 に答える
24

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

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

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

vec3 v3 = v4.xyz();

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

于 2013-02-02T00:30:11.233 に答える