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

Sys*_*dox 16 glm-math

如何将a转换glm::vec4glm::vec3

只有x,y,z须─该w组件可以被丢弃.

在GLSL中,可以使用.xyz[1] 来完成,但在glm中,这会导致编译错误:

error: 'glm::vec4' has no member named 'xyz'
Run Code Online (Sandbox Code Playgroud)

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

ker*_*rim 27

只需使用vec3 构造函数.在这里,0.9.5分支:

glm::vec4 v4(1, 2, 3, 4);
glm::vec3 v(v4);
printf("%s\n", glm::to_string(v).c_str());
Run Code Online (Sandbox Code Playgroud)

并给出这个输出

fvec3(1.000000,2.000000,3000000)


Sys*_*dox 19

默认情况下,glm中未启用Swizzling,因为它使用可能导致命名冲突的宏.要启用它:

#define GLM_SWIZZLE
#include <glm/glm.hpp>
Run Code Online (Sandbox Code Playgroud)

在glm中,使用函数完成混合:

vec3 v3 = v4.xyz();
Run Code Online (Sandbox Code Playgroud)

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