19

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

4

2 回答 2

33

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

于 2013-09-17T06:05:58.297 回答
24

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

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

在 glm 中,swizzling 是使用函数完成的:

vec3 v3 = v4.xyz();

见: http: //glm.g-truc.net/0.9.2/api/a00002.html

于 2013-02-02T00:30:11.233 回答