2014-02-18 86 views
3

如何將一個浮點數組轉換爲float*glm::vec3的形式?我以爲我以前做過,但我失去了我的硬盤。我嘗試了一些C風格和static_cast s,但我似乎無法得到它的工作。C++ Cast float * to glm :: vec3

回答

7

glm documentation告訴你如何從vec3轉換爲float*

#include <glm/glm.hpp> 
#include <glm/gtc/type_ptr.hpp> 
glm::vec3 aVector(3); 
glm::mat4 someMatrix(1.0); 
glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector)); 
glUniformMatrix4fv(uniformMatrixLoc, 
     1, GL_FALSE, glm::value_ptr(someMatrix)); 

您使用glm::value_ptr

文檔沒有明確地說明這一點,但看起來很清楚glm打算這些類型與數組「佈局兼容」,以便它們可以直接與OpenGL函數一起使用。如果是這樣,那麼你可以從一個數組轉換使用下列投給VEC 3:

float arr[] = { 1.f, 0.f, 0.f }; 
vec3<float> *v = reinterpret_cast<vec3<float>*>(arr); 

你或許應該在自己的效用函數這個包,因爲你不想被在所有散射這種投你代碼庫。

1
glm::vec3 construct_vec3(float *value) 
{ 
    return glm::vec3(value[0], value[1], value[2]); 
} 
11

float*vec3

float data[] = { 1, 2, 3 }; 
glm::vec3 vec = glm::make_vec3(data); 

vec3float*

glm::vec3 vec(1, 2, 3); 
float* data = glm::value_ptr(vec); 

在這兩種情況下,不要忘記#include <glm/gtc/type_ptr.hpp>