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