glUniform1f
时间: 2023-08-13 18:31:58 浏览: 39
`glUniform1f` 是 OpenGL 中的一个函数,用于将一个 float 类型的值设置为当前着色器程序中指定 uniform 变量的值。这个函数的原型为:
```c++
void glUniform1f(GLint location, GLfloat v0);
```
其中,`location` 参数是指 uniform 变量的位置(由 `glGetUniformLocation` 获取),`v0` 参数是指要设置的 float 类型的值。这个函数可以用于在渲染时动态地改变 uniform 变量的值,以实现一些效果,比如改变光照的参数、改变纹理的坐标、改变颜色等等。
相关问题
glUniform3f
glUniform3f是OpenGL中的一个函数,它用于设置shader中的uniform变量的值。这个函数用来设置三个浮点数的值,它的函数原型如下:
void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
其中,location参数是要设置的uniform变量的位置,v0、v1、v2是三个浮点数的值。这个函数将会把这三个值设置到指定位置的uniform变量中。
举个例子,如果我们想要设置一个名为color的uniform变量的值为(1.0, 0.5, 0.2),我们可以这样调用glUniform3f函数:
```
GLint loc = glGetUniformLocation(programID, "color");
glUniform3f(loc, 1.0f, 0.5f, 0.2f);
```
这个例子中,我们首先获取了名为color的uniform变量的位置,然后通过glUniform3f函数把值(1.0, 0.5, 0.2)设置到这个变量中。
void renderFrame(int w, int h, unsigned char* image, const char* my2String,Rect rect) { glClear(GL_COLOR_BUFFER_BIT); // glBindFramebuffer(GL_FRAMEBUFFER, gTexture); glUseProgram(gProgram); glBindFramebuffer(GL_FRAMEBUFFER, gFbo); u_MosaicPosition = glGetUniformLocation(gProgram, "uMosaicPosition"); glUniform2f(u_MosaicPosition, rect.x, rect.y); u_MosaicSize = glGetUniformLocation(gProgram, "uMosaicSize"); glUniform1f(u_MosaicSize, rect.width); texture_uniform = glGetUniformLocation(gProgram, "Texture"); glUniform1i(texture_uniform, 0); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indices); glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, image); //saveRGB(my2String, image, w, h); //eglSwapBuffers(eglGetCurrentDisplay(), eglGetCurrentSurface(EGL_DRAW)); }每行都是什么意思
这是一个渲染图像的函数,下面是每行代码的含义:
1. 清空颜色缓冲区
```
glClear(GL_COLOR_BUFFER_BIT);
```
2. 使用着色器程序
```
glUseProgram(gProgram);
```
3. 绑定帧缓冲对象
```
glBindFramebuffer(GL_FRAMEBUFFER, gFbo);
```
4. 获取着色器程序中的uniform变量uMosaicPosition的位置,并将矩形的左下角位置传递给它
```
u_MosaicPosition = glGetUniformLocation(gProgram, "uMosaicPosition");
glUniform2f(u_MosaicPosition, rect.x, rect.y);
```
5. 获取着色器程序中的uniform变量uMosaicSize的位置,并将矩形的宽度传递给它
```
u_MosaicSize = glGetUniformLocation(gProgram, "uMosaicSize");
glUniform1f(u_MosaicSize, rect.width);
```
6. 获取着色器程序中的uniform变量Texture的位置,并将纹理单元编号传递给它
```
texture_uniform = glGetUniformLocation(gProgram, "Texture");
glUniform1i(texture_uniform, 0);
```
7. 绘制矩形,使用索引缓冲区进行绘制
```
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indices);
```
8. 读取像素数据到内存中的image数组中
```
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, image);
```
9. 保存图像到文件(这行代码被注释掉了)
```
//saveRGB(my2String, image, w, h);
```
10. 交换缓冲区(这行代码被注释掉了)
```
//eglSwapBuffers(eglGetCurrentDisplay(), eglGetCurrentSurface(EGL_DRAW));
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)