将glm :: vec4转换为glm :: vec3

时间:2013-02-02 00:30:11

标签: glm-math

如何将glm::vec4转换为glm::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

2 个答案:

答案 0 :(得分:23)

只需使用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,3000000)

答案 1 :(得分:17)

glm中默认不启用Swizzling,因为它使用可能导致命名冲突的宏。启用它:

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

在glm中,使用函数完成调配:

vec3 v3 = v4.xyz();

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