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中调用以下代码时收到提到的错误消息::初始化GL
glUniform3fv(llumLoc, 1, glm::vec3(0.2));
glUniform3fv(focusLoc, 1, glm::vec3(1.0));
显然,我已经尝试遵循 www.opengl.org 和 glm.g-truc.net/0.9.2/api/a00001.html 的文档,但我就是看不出这段代码有什么问题......
实际上,我今天才发现有一种更干净、更直接的方法。只是:
glUniform3fv(focusLoc, 1, &v[0]);
无需导入value_ptr。
你需要提供一个指向向量的指针,而不是向量本身。例如:
glm::vec3 v(1.0f);
glUniform3fv(focusLoc, 1, glm::value_ptr(&v[0]));
相关文章:
- 如何使实例化在我的 OpenGL 程序中工作?
- 无法使 opengl 纹理正常工作
- OpenGL 正交相机变焦无法正常工作
- OpenGL应用程序在不同的计算机上的工作方式不同
- GlM(OpenGl Mathematics)库阻止M_PI和其他定义的常量工作
- 现代 OpenGL 多维数据集旋转未按预期工作
- opengl32.lib如何在Windows(仅1.1版本)上工作?它是否真正实现了OpenGL函数
- SFML OpenGL:如何同时与他们一起工作
- OpenGL VAO无法按预期工作
- OpenGL Ping Pong可与一张通行证一起工作,而不是两个通行证
- OpenGL代码在GLFW上工作,但在QT OpenGL上不起作用
- 旧版OpenGL纹理无法正常工作
- 运行Mac OS X C 程序与OpenGL 3.3一起工作
- 具有两个OpenGL图形视图的MFC MDI拆分器无法工作
- glUniform3fv 无法正常工作 OpenGL
- OpenGL着色器无法工作
- OpenGL glTranslatef无法正常工作
- OpenGL顶点属性指针或着色器不工作
- OpenGL的缓冲区是如何工作的?
- 使纹理在OpenGL 3.2中工作