从OpenGL传颜色数值到Shader,改变绘图颜色
来源:互联网 发布:三菱q系列plc编程收册 编辑:程序博客网 时间:2024/05/16 01:24
使用上一篇文章的代码
OpenGL中使用Shader
http://blog.csdn.net/huutu/article/details/21445287
(1) 定义了三个变量用来存储颜色值的RGB
float colorR,colorG,colorB;
(2) 修改renderScene函数,实现在每一帧都修改上面的三个参数,从而修改颜色值
void renderScene(void){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();gluLookAt(0.0,5.0,10.0,0.0,0.0,0.0,0.0f,1.0f,0.0f);glLightfv(GL_LIGHT0,GL_POSITION,lpos);glRotatef(a,0,1,0);glutSolidTeapot(1);a+=0.1;if(a>360){a=a-360;}colorR+=0.001;colorG+=0.002;colorB+=0.003;if(colorR>1.0){colorR=colorR- 1.0;}if(colorG>1.0){colorG=colorG-1.0;}if(colorB>1.0){colorB=colorB-1.0;}glutSwapBuffers();GLuint color_Sh=glGetUniformLocation(p,"color");float color[4]={colorR,colorG,colorB,1.0};glUniform4fv(color_Sh,1,color);}
重点在于获取Shader中的变量 color ,然后给他赋值
GLuint color_Sh=glGetUniformLocation(p,"color");float color[4]={colorR,colorG,colorB,1.0};glUniform4fv(color_Sh,1,color);
(3) 来看Shader的写法
顶点着色器定义变量color,接收OpenGL程序的赋值,同时定义变量 potColor ,用于在顶点着色器与片元着色器中传递变量
uniform vec4 color;varying vec4 potColor;void main(){potColor=color;//gl_Position=gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;//gl_Position=gl_ModelViewProjectionMatrix * gl_Vertex;gl_Position=ftransform();}
将OpenGL传过来的颜色值 赋值给 potColor 。
片元着色器接收 顶点着色器的 potColor 值,设置当前像素为potColor颜色
varying vec4 potColor;void main(){//gl_FragColor=vec4(1.0,0.0,0.0,1.0);gl_FragColor=potColor;}
效果图就是变换颜色的茶壶
0 0
- 从OpenGL传颜色数值到Shader,改变绘图颜色
- OpenGL-- Shader 颜色 光照
- 在 opengl 中画出三角形并用 shader 改变颜色
- 从编译OpenGL库到我的第一个颜色变化的三角形-Shader
- openGL颜色的改变
- opengl 颜色没改变
- OpenGL-- Shader 颜色 光照 2
- OpenGL-- Shader 颜色 光照 5 多光源
- shader:最简单的改变颜色
- Android OpenGL ES 绘图 -- 添加颜色
- Shader-颜色
- 从ARGB颜色数值中,改变透明通道(Alpha)的值
- OpenGL ES 学习教程(十五) 从 颜色缓冲区(FBO的颜色附着)中 读取颜色数据 保存到图片(FreeImage)
- 火云开发课堂 - 《Shader从入门到精通》系列 第二节:在Shader中通过参数设置颜色
- OpenGL颜色
- OpenGL颜色
- OpenGL颜色
- OpenGL---颜色
- 知名大学硕博论文及英文期刊全文资源集合
- Java 访问Weblogic数据源
- 4.Redis服务器相关命令
- 那些年,错过的时光(二)
- 中缀表达式转换为后缀表达式
- 从OpenGL传颜色数值到Shader,改变绘图颜色
- php 不四舍五入截取浮点型字符串
- QT程序在Windows下制作安装包发布程序的方法
- linux和windows下UDP发送效率的有趣比较
- Oracle start with .... connect by 查询树结构数据
- Hibernate几个异常总结
- Nginx惊群问题
- Java编程思想之多线程
- iPhone循环录音应用Heard:记录精彩瞬间