2017-02-03 4 views
0

это мой кодНет Оператор «*» соответствует этим операнды

glm::vec3 v(4, -6, 7); 

glm::vec3 twiceV = 2 * v; 

Я включил GLM Стабильные и экспериментальные расширения GLM. Почему я не могу использовать int * vec?

+0

Есть ли бесплатная функция, обеспечивающая поддержку 2 * v в glm? Попробуйте v * 2, поэтому вы фактически вызываете оператор * на vec3. – carthurs

+1

Что имеет отношение к этому тегу «основы-ts»? – molbdnilo

ответ

2

2 - целое число, а элементы glm::vec3 - это поплавки. Попробуйте вместо этого:

glm::vec3 twiceV = 2.0f * v; 

Я хотел бы также передать значения с плавающей запятой в конструктор (4.0f), просто чтобы сделать это четко указано, что вы имеете дело с поплавками.

В качестве альтернативы, вы можете использовать целочисленный вектор glm::ivec3:

glm::ivec3 v(4, -6, 7); 
glm::ivec3 twiceV = 2 * v; 

Конечно, целочисленный вектор будет содержать только целые значения, которые не могли бы быть то, что вы хотите.

+0

Спасибо вам большое! – Morovo

2

Это происходит потому, что не существует глобального перегружен оператор вида

glm::vec3 operator*(int, const glm::vec3&)

делает v * 2 работу случайно? (Перегрузка оператора функция-члена будет достаточно для этого.)

или, возможно, даже 2f * v, который затем требует первого параметра перегруженного оператора * быть float?

+0

2f * v работает, спасибо – Morovo

Смежные вопросы