Я использую Математическую библиотеку OpenGL ( glm.g-truc.net ) и хочу инициализировать glm::mat4 массивом с плавающей точкой.
glm::mat4
float aaa[16]; glm::mat4 bbb(aaa);
Этоне работает.
Я думаю, что решение тривиально, но я не знаю, как это сделать.Я не мог найти хорошую документацию о GLM.Буду признателен за полезные ссылки.
Хотя конструктора нет, GLM включает функции make_ * в glm / gtc / type_ptr.hpp :
#include <glm/gtc/type_ptr.hpp> float aaa[16]; glm::mat4 bbb = glm::make_mat4(aaa);
Вы также можете напрямую скопировать память:
float aaa[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; glm::mat4 bbb; memcpy( glm::value_ptr( bbb ), aaa, sizeof( aaa ) );
Вы можете написать функцию адаптера:
template<typename T> tvec4<T> tvec4_from_t(const T *arr) { return tvec4<T>(arr[0], arr[1], arr[2], arr[3]); } template<typename T> tmat4<T> tmat4_from_t(const T *arr) { return tmat4<T>(tvec4_from_t(arr), tvec4_from_t(arr + 4), tvec4_from_t(arr + 8), tvec4_from_t(arr + 12)); } // later float aaa[16]; glm::mat4 bbb = tmac4_from_t(aaa);