glUniform3fv 不工作 OpenGL
glUniform3fv not working OpenGL
我正在使用 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.org and glm.g-truc.net/0.9.2/api/a00001.html 上的文档进行操作,但我就是看不出这段代码有什么问题...
您需要提供指向向量的指针,而不是向量本身。例如:
glm::vec3 v(1.0f);
glUniform3fv(focusLoc, 1, glm::value_ptr(&v[0]));
实际上,我今天才发现有一种更简洁、更直接的方法。只需:
glUniform3fv(focusLoc, 1, &v[0]);
无需导入value_ptr.
我正在使用 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.org and glm.g-truc.net/0.9.2/api/a00001.html 上的文档进行操作,但我就是看不出这段代码有什么问题...
您需要提供指向向量的指针,而不是向量本身。例如:
glm::vec3 v(1.0f);
glUniform3fv(focusLoc, 1, glm::value_ptr(&v[0]));
实际上,我今天才发现有一种更简洁、更直接的方法。只需:
glUniform3fv(focusLoc, 1, &v[0]);
无需导入value_ptr.