2015-04-22 197 views
-1

我正在研究OpenGL中的一段代碼。 我收到以下錯誤信息,同時試圖編譯:glUniform3fv不工作OpenGL

MyGLWidget.cpp: In member function ‘virtual void MyGLWidget::initializeGL()’: 
MyGLWidget.cpp:30:38: error: cannot convert ‘glm::vec3 {aka glm::tvec3<float, (glm::precision)0u>}’ to ‘const GLfloat* {aka const float*}’ in argument passing 
MyGLWidget.cpp:31:39: error: cannot convert ‘glm::vec3 {aka glm::tvec3<float, (glm::precision)0u>}’ to ‘const GLfloat* {aka const float*}’ in argument passing 

我已經宣佈在MyGLWidget.h這些位置如下:

GLuint llumLoc, focusLoc; 

而且有MyGLWidget.cpp它們初始化爲:

llumLoc = glGetUniformLocation (program->programId(), "llumAmbient"); 
    focusLoc = glGetUniformLocation (program->programId(), "posFocus"); 

「llumAmbient」 和 「posFocus」 在我的頂點着色器的制服:

uniform vec3 llumAmbient; 
uniform vec3 posFocus; 

我得到的提到的錯誤信息,同時試圖調用MyGLWidget內將以下代碼:: initializeGL

glUniform3fv(llumLoc, 1, glm::vec3(0.2)); 
glUniform3fv(focusLoc, 1, glm::vec3(1.0)); 

很顯然,我試圖跟隨在www.opengl.orgglm.g-truc.net/0.9.2/api/a00001.html的文件,但我可以」看看這個代碼有什麼問題...

回答

3

你需要給一個指向矢量的指針,而不是矢量本身。例如:

glm::vec3 v(1.0f); 
glUniform3fv(focusLoc, 1, glm::value_ptr(&v[0])); 
+3

我很確定這應該是'glm :: value_ptr(v)' – chbaker0

+0

完美的是,這個小小的改正完成了。現在工作。謝謝! – houcros

1

其實我今天才發現有更清潔更直接的方法。簡單地說:

glUniform3fv(focusLoc, 1, &v[0]); 

不需要輸入value_ptr