use*_*947 3 c++ casting glm-math
如何在表单中float*转换浮点数组glm::vec3?我以为我以前做过但我丢失了我的硬盘.我尝试了一些C风格和static_casts但我似乎无法让它工作.
小智 14
从:float*到vec3:
float data[] = { 1, 2, 3 };
glm::vec3 vec = glm::make_vec3(data);
Run Code Online (Sandbox Code Playgroud)
从:vec3到float*:
glm::vec3 vec(1, 2, 3);
float* data = glm::value_ptr(vec);
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,不要忘记#include <glm/gtc/type_ptr.hpp>.
该GLM文件告诉你如何从投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));
Run Code Online (Sandbox Code Playgroud)
你用glm::value_ptr.
文档没有明确说明,但似乎很清楚glm意图将这些类型与数组"布局兼容",以便它们可以直接与OpenGL函数一起使用.如果是这样,那么你可以使用以下转换从数组转换为vec3:
float arr[] = { 1.f, 0.f, 0.f };
vec3<float> *v = reinterpret_cast<vec3<float>*>(arr);
Run Code Online (Sandbox Code Playgroud)
您可能应该将它包装在您自己的实用程序函数中,因为您不希望在代码库中分散这种类型的强制转换.
| 归档时间: |
|
| 查看次数: |
8236 次 |
| 最近记录: |