如何將一個浮點數組轉換爲float*
到glm::vec3
的形式?我以爲我以前做過,但我失去了我的硬盤。我嘗試了一些C風格和static_cast
s,但我似乎無法得到它的工作。C++ Cast float * to glm :: vec3
3
A
回答
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);
從vec3
到float*
:
glm::vec3 vec(1, 2, 3);
float* data = glm::value_ptr(vec);
在這兩種情況下,不要忘記#include <glm/gtc/type_ptr.hpp>
。
相關問題
- 1. glm :: vec3 precision C++
- 2. cast float to wchar_t win32
- 3. glm :: vec3和glm :: mat4如何初始化?
- 4. 將glm :: vec4轉換爲glm :: vec3
- 5. 我如何通過glm :: mat4來轉換glm :: vec3
- 6. C++ float to int
- 7. 繪製矢量<glm::vec3> OpenGL的C++
- 8. float * from C to C#
- 9. C#float [] to java float [] via socket
- 10. 檢查GLM :: VEC3已被設置
- 11. 從std :: vector <glm::vec3>獲取一個數組指針,其類型爲float
- 12. Marshal C++ float to C#float precision problem
- 13. Cast string to enum
- 14. std :: vector <float> to std :: vector <glm::vecX>沒有複製
- 15. C++ glm Opengl glm :: mat4轉換和旋轉glm :: vec4
- 16. Cast char to short
- 17. cast Timespan.Ticks to varchar
- 18. Cast String to TextView
- 19. cast Long to BigDecimal
- 20. Cast Type to Generic
- 21. Cast To Interface
- 22. Cast void * to char *
- 23. Byte Array to Float Conversion C#
- 24. C++ float to bool轉換
- 25. SQL Conditional Cast VARCHAR for FLOAT
- 26. 將glm :: vec3與boost多精度浮點數相乘
- 27. Cuda的推力 - 最大VEC3
- 28. const char * to int cast?
- 29. Is cast castable to class
- 30. Generic Cast xAttribute to bool