Преобразовать glm:: vec4 в glm:: vec3

Как преобразовать 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

Ответы

Ответ 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)

Ответ 2

Swizzling по умолчанию не включен в glm, поскольку он использует макросы, которые могут вызвать конфликты имен. Чтобы включить его:

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

В glm swizzling выполняется с использованием функций:

vec3 v3 = v4.xyz();

Смотрите: http://glm.g-truc.net/0.9.2/api/a00002.html