C ++ Cast float *到glm :: vec3

时间:2014-02-18 15:34:02

标签: c++ casting glm-math

如何在float*glm::vec3的格式中投放一系列浮点数?我以为我以前做过但我丢失了我的硬盘。我尝试了一些C风格和static_cast但我似乎无法让它发挥作用。

3 个答案:

答案 0 :(得分:13)

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>

答案 1 :(得分:6)

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函数一起使用。如果是这样,那么您可以使用以下转换从数组转换为vec3:

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

你可能应该把它包装在你自己的实用程序函数中,因为你不想在你的代码库中散布这种类型的强制转换。

答案 2 :(得分:1)

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