如何将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
答案 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();