Как вернуть glm :: vec3 в качестве значения? - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь преобразовать массив чисел с плавающей точкой в ​​вектор glm во вспомогательной функции.К сожалению, возвращаемое значение искажено:

arr: 1, 1, 0
fn.arr: 1, 1, 0
fn.vec: 1, 1, 0
vec: 4.7468e-11, 4.55856e-41, 1

Я ожидаю, что следующий код выделит vec в стеке функции, а затем вернет его как значение.

// main.cpp

float colour[3] = {1.0f, 1.0f, 0.0f};
std::cout << "arr: " << colour[0] << ", " << colour[1] << ", " << colour[2] << std::endl;
glm::vec3 c = arr_to_vec3(colour);
std::cout << "vec: " << c.x << ", " << c.y << ", " << c.z << std::endl;

// util.cpp

glm::vec3 arr_to_vec3(float arr[3]) {
  std::cout << "fn.arr: " << arr[0] << ", " << arr[1] << ", " << arr[2] << std::endl;
  glm::vec3 vec = glm::vec3(arr[0], arr[1], arr[2]);
  std::cout << "fn.vec: " << vec.x << ", " << vec.y << ", " << vec.z << std::endl;

  return vec;
}

Из вышеприведенного вывода, похоже, нет.Что-то должно быть освобождено значение, так как последний вывод показывает случайный мусор.Может быть, float по какой-то причине не скопированы, а возвращенный вектор указывает на кадр стека arr_to_vec3?Мне не совсем понятно, как данные хранятся в векторе и какая семантика применяется.

Странно, я не могу воспроизвести, если просто скопировать эти два блока кода в пустой проект (возможно, память там не очищена случайно).

...