如何将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
如何将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构造函数。在此处,版本为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中,默认情况下未启用Swizzling,因为它使用的宏可能会导致命名冲突。要启用它:
#define GLM_SWIZZLE
#include <glm/glm.hpp>
在glm中,使用函数进行成分交换:
vec3 v3 = v4.xyz();