2014-02-18 87 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>