从OpenGL传颜色数值到Shader,改变绘图颜色

3283人阅读 评论(0) 收藏 举报
分类:

使用上一篇文章的代码

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;
}

效果图就是变换颜色的茶壶


查看评论

在 opengl 中画出三角形并用 shader 改变颜色

/* glew.h 源代码中的一些宏定义 typedef unsigned int GLenum; typedef unsigned int GLbitfield; typedef unsigned ...
  • liqiangzju
  • liqiangzju
  • 2016-12-17 20:58:00
  • 995

OpenGL(三) RGBA颜色设置

OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。像素点附加颜色信息之后,就必须为每一个像素点额外分配一个内存空间保存该点的颜色信息,对于RGBA颜色模式,保存的数据直接代表了颜色,对...
  • dcrmg
  • dcrmg
  • 2016-11-07 23:29:37
  • 4658

(二)OpenGL中的Shader

学习总结自:http://learnopengl.com/#!Getting-started/Hello-Triangle http://learnopengl.com/#!Getting-star...
  • huangcanjun187
  • huangcanjun187
  • 2016-09-08 19:30:26
  • 2949

Opengl 来给三角形一点颜色看看

Opengl 来给三角形一点颜色看看
  • cloud95
  • cloud95
  • 2014-07-15 18:19:45
  • 1197

OpenGL:学习现代3D图形编程之二,玩转色彩 源码1

  • 2016年03月26日 22:41
  • 827KB
  • 下载

利用颜色表进行图像预处理1:OpenGl显示三维颜色表

在学习SPL世界冠军B-Human的框架程序和具体实现中觉得我们与世界冠军相差的太远了。即使是北京大学功夫队(参见http://www.mech.pku.edu.cn/robot/fourleg/cn...
  • liuying_1001
  • liuying_1001
  • 2012-04-01 16:22:15
  • 3927

Unity Shader修改Shader属性

定义一个材料,放在Resources文件夹中 然后贴上Shader代码Shader "Custom/ScriptControlShader" { Properties { _Color ("Co...
  • qiu_zhongya
  • qiu_zhongya
  • 2016-06-08 19:24:01
  • 6105

OpenGL-- Shader 多个纹理 变换

源码参考: http://learnopengl-cn.readthedocs.io/zh/latest/01%20Getting%20started/08%20Coordinate%20System...
  • yulinxx
  • yulinxx
  • 2016-12-13 19:02:08
  • 2425

OpenGL-- Shader 颜色 光照 5 多光源

OGLMultipleLights-OpenGL-- Shader 颜色 光照 5 多光源
  • yulinxx
  • yulinxx
  • 2017-06-02 00:09:25
  • 721

opengl_shader_鱼眼校正

  • 2016年12月19日 19:32
  • 3.32MB
  • 下载
    个人资料
    专栏达人
    等级:
    访问量: 145万+
    积分: 1万+
    排名: 670
    我的Github
    @ThisisGame
    博客专栏
    最新评论