glUniform3fv 不工作 OpenGL

hou*_*ros 0 c++ opengl glm-math

我正在 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
Run Code Online (Sandbox Code Playgroud)

我在 MyGLWidget.h 中声明了这些位置,如下所示:

    GLuint llumLoc, focusLoc;
Run Code Online (Sandbox Code Playgroud)

并在 MyGLWidget.cpp 中将它们初始化为:

  llumLoc = glGetUniformLocation (program->programId(), "llumAmbient");
  focusLoc = glGetUniformLocation (program->programId(), "posFocus");
Run Code Online (Sandbox Code Playgroud)

“llumAmbient”和“posFocus”是我的顶点着色器中的制服:

uniform vec3 llumAmbient;
uniform vec3 posFocus;
Run Code Online (Sandbox Code Playgroud)

我在尝试调用 MyGLWidget::initializeGL 中的以下代码时收到上述错误消息

glUniform3fv(llumLoc, 1, glm::vec3(0.2));
glUniform3fv(focusLoc, 1, glm::vec3(1.0));
Run Code Online (Sandbox Code Playgroud)

显然,我试图遵循www.opengl.orgglm.g-truc.net/0.9.2/api/a00001.html 上的文档,但我看不出这段代码有什么问题......

hou*_*ros 6

实际上,我今天才发现有一种更清洁、更直接的方法。简单地:

glUniform3fv(focusLoc, 1, &v[0]);
Run Code Online (Sandbox Code Playgroud)

无需导入value_ptr