Ответ 1
Просто используйте конструктор 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::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)
Swizzling по умолчанию не включен в glm, поскольку он использует макросы, которые могут вызвать конфликты имен. Чтобы включить его:
#define GLM_SWIZZLE
#include <glm/glm.hpp>
В glm swizzling выполняется с использованием функций:
vec3 v3 = v4.xyz();