读取一个模型到节点node,然后想对node施加一些特效,这时可以只使用片段着色器
其中:
gl_Color表示固定管线计算出来的颜色,包含光照效果
gl_TexCoord[]表示纹理坐标
uniform sampler2D tex;//tex可以随便命名,如果只有一张纹理
void main()
{
//模型顶点颜色
vec4 c0=gl_Color;
//如果有纹理的话,获取纹理颜色
vec4 c1 = texture2D(tex,gl_TexCoord[].st); //混合一下
vec4 c=(c0+c1)/; //黑白特效
float grey = 0.3*c.r+0.59*c.g+0.11*c.b;
c.r=grey*grey;
c.g=grey*grey;
c.b=grey*grey;
gl_FragColor=c;
} 顶点着色器:
void main()
{
gl_TexCoord[]=gl_MultiTextCoord0;//纹理坐标
gl_FrontColor = gl_Color;//直接获取顶点颜色,没有进行光照计算
gl_Position = ftransform();//等价于gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
} 片元着色器:
void main()
{
gl_FragColor = gl_Color;
}
注意两个gl_Color属性并不相同。
OpenGL程序使用glColor函数后,将颜色值以attribute gl_Color的形式传给了Vertex Shader,
Vertext Shader接受到后开始计算gl_FontColor和gl_BackColor,而在Fragment Shader
则会接受到一个由FontColor和BackColor插值计算出来的varying gl_Color
(注意:该gl_Color与Vertex Shader当中的不同),因而可以基于gl_Color开始计算gl_FragColor
attribute vec4 gl_Color;
varying vec4 gl_FrontColor; // writable on the vertex shader
varying vec4 gl_BackColor; // writable on the vertex shader
varying vec4 gl_Color; // readable on the fragment shader

最新文章

  1. iOS 3D Touch实践
  2. Linux学习笔记(5)-hello world
  3. 关于FPGA学习路线
  4. asp.net动态设置标题title 关键字keywords 描述descrtptions
  5. vs切换当前编辑文件时自动定位目录树
  6. UML类图基本元素符号
  7. 用javascript实现全选/反选组件
  8. Ubuntu 12.04 DNS服务器的配置方法
  9. ASP.NET分页存储过程,解决搜索时丢失条件信息
  10. PHP基础示例:简单的在线文件管理
  11. JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例
  12. Visual Studio2017数据库数据比较
  13. k-近邻算法实例
  14. Redis--配置密码
  15. MySQL数据库 Too many connections
  16. spring-session 2.0 实现细节
  17. maven项目红叉问题
  18. STL--迭代器(iterator)使用详解
  19. git bash 报错bash: *: command not found
  20. read命令

热门文章

  1. Unity Shader-后处理:高斯模糊
  2. Git -- 本地 一个相同的新的分支 并 推送到远程仓库
  3. 微信小程序- 提示不在以下合法域名列表中
  4. 高并发 Web 服务的演变:节约系统内存和 CPU
  5. Mysql INSERT、REPLACE、UPDATE的区别
  6. 编程调节Win7/Win8系统音量的一种方法
  7. Elasticsearch cat api的用法
  8. java多线程状态
  9. jquery ui autocomplete输入中文不自动完成的问题
  10. Android Studio Prettify 插件