最近在学习Unity3d Shader编程,Unity3d Shader使用的是Cg语言,网上找了一下Cg的教程,发现《Cg教程-可编程实时图形权威指南》不错,在学习此书的过程中记录一下笔记。博主菜鸟一枚,个人能力有限,有什么说的不对的地方,还请提出。

1.什么是Cg语言

  • Cg是NVIDIA和微软共同开发的为可编程图形硬件设计的语言。它与OPENGL API和微软 DirectX的HLSL都兼容。CG程序是在计算机的图形处理器(GPU)上执行的。
  • Cg是一个可以被OpenGL和Direct3D广泛支持的图形处理器编程语言。 Cg语言和OpenGL、DirectX并不是同一层次的语言,而是OpenGL和DirectX的上层,即,Cg程序是运行在OpenGL和 DirectX标准顶点和像素着色的基础上的。

2.顶点,片段,图形流水线

图形硬件渲染流水线:

  • 顶点变换
    在每个顶点上执行一系列的数学操作:把顶点位置变换到屏幕位置以便光栅器使用,为贴图产生纹理坐标,以及照亮顶点以决定它的颜色。
  • 图元装配和光栅化
    根据伴随顶点序列的几何图元分类信息把顶点装配成几何图元。
    图元通过剪裁(到可视平截体)、挑选(丢弃一些多边形)。
    光栅化(光栅化会把每个几何图元所覆盖的像素分解成像素大小的片段),结果是像素位置的集合和片段的集合(一个片段有一个与之相关联的像素位置、深度值和经过插值的参数)。
  • 插值,贴图和着色
    在片段属性需要的时候插值,执行一系列的贴图和数学操作,为每一个片段确定一个最终的颜色。
  • 光栅操作
    每个片段可由许多测试来测试(包括剪切,alpha,模版,深度测试…),没通过测试则丢弃该片段,否则就更新该像素颜色值,通过了深度测试就用片段的深度值代替像素的深度值,最后用混合把片段的最后颜色和对应的像素颜色结合在一起,帧缓存写操作用混合颜色代替像素颜色。

3.可编程图形流水线

可以看出,顶点着色器控制顶点坐标转换过程;片段着色器控制像素颜色计算过程。这样就区分出顶点着色程序和片段着色程序的各自分工:
Vertex program负责顶点坐标变换;
Fragment program负责像素颜色计算;前者的输出是后者的输入。

3.1可编程顶点处理器

3.2可编程片段处理器

  • 从图片可以看出,顶点着色器控制顶点坐标转换过程;片段着色器控制像素颜色计算过程
  • 顶点着色程序从GPU前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。
  • 顶点着色程序与片断着色程序通常是同时存在,相互配合,前者的输出作为后者的输入。不过,也可以只有顶点着色程序。如果只有顶点着色程序,那么只对输入的顶点进行操作,而顶点内部的点则按照硬件默认的方式自动插值。
  • 片断着色程序是对每个片断进行独立的颜色计算,并且算法由自己编写,不但可控性好,而且可以达到更好的效果。最后输出颜色值的就是该片段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片段着色程序主要针对最终的颜色值进行计算。
  • 所谓片断就是所有的三维顶点在光栅化之后的数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素都是经过深度比较的。

总结:本节中了解了什么是cg语言,图形渲染流程,顶点处理器,片段处理器。下一节开始将详细介绍Cg语言。

Cg语言学习笔记(1)相关推荐

  1. 梓益C语言学习笔记之链表&动态内存&文件

    梓益C语言学习笔记之链表&动态内存&文件 一.定义: 链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构. 二.特点: 链表由一系列节点(链表中每一个元素称为节点)组 ...

  2. 6.方法(go语言学习笔记)

    6.方法(go语言学习笔记) 目录 定义 匿名字段 方法集 表达式 1. 定义 方法是与对象实例绑定的特殊函数. 方法是面向对象编程的基本概念,用于维护和展示对象的自身状态.对象是内敛的,每个实例对象 ...

  3. 梓益C语言学习笔记之指针

    梓益C语言学习笔记之指针 一.32位平台下,地址是32位,所以指针变量占32位,共4个字节 二.内存单元的地址即为指针,存放指针的变量称为指针变量,故:"指针"是指地址,是常量,& ...

  4. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  5. c语言float二进制输出代码_C语言学习笔记——学前知识概述

    将我大一学习C语言时做的笔记拿来与大家分享,内容比较浅显,比较适合初学者,如有错误还请见谅,提出改正,谢谢! 前言:此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误,希望我的这本笔记能够对大 ...

  6. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  7. C语言学习笔记---001C语言的介绍,编译过程原理,工具等

    C语言学习笔记---001C语言的介绍,编译过程原理,工具等 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技术交流平台:cre.i ...

  8. go get 拉取指定版本_go语言学习笔记-基础知识-3

    相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...

  9. 安装成功配置环境变量_go语言学习笔记-Windows10开发环境安装和环境变量配置

    相关文档 go语言学习笔记-目录 1.安装 1.1.访问 https://golang.google.cn/dl/ 或 https://golang.org/dl/ 下载官方安装包 1.2.选择Win ...

最新文章

  1. RDKit | 基于scikit-learn将pytorch用于QSAR模型构建
  2. Go语言,作为一门没有对象的OOP
  3. .Net Core扩展 SharpPlugs简单上手
  4. Git的撤销操作 git reset HEAD -- <file>
  5. Java设计模式(六):命令设计模式
  6. web应用安全防御100技 好书再次阅读, 变的只是表象,被概念迷惑的时候还是静下心来回顾本质...
  7. 处理多维特征的输出(糖尿病数据)
  8. cdr非法软件 您的产品已被禁用怎么回事_多层刺网非法捕鱼 顺庆男子被取保候审...
  9. 百度地图设置显示定位服务器,百度地图后台持续定位
  10. Java自动跳转到debug模式的解决方法
  11. 阿里Q1财报:云计算付费用户首超100万
  12. 斯坦福大学深度学习公开课cs231n学习笔记(6)神经网路输入数据预处理(归一化,PCA等)及参数初始化
  13. 诺基亚n9支不支持java_诺基亚N9支持720p播放吗
  14. 随机森林模型预测和交叉验证
  15. 机器人高速切削加工多种应用图例
  16. GNSS-RINEX3.04格式
  17. suse 11添加阿里源
  18. 优动漫PAINT软件中混合模式使用实例
  19. Javascript前端模块化
  20. matlab表示网络,Matlab绘制网络

热门文章

  1. ZCMU--5123: 分糖果(C语言)
  2. Linux安装 VMware tools 工具的方法(转,已测试成功)
  3. 请问你们学校有计算机教室吗英语翻译,我们家有电脑。英语翻译
  4. vcs+verdi简单的仿真
  5. 『Halcon与C#混合编程』010_相机实时采集并显示(或循环显示)
  6. 科大讯飞语音SDK使用流程
  7. ORA-01507错误
  8. ubuntu20.04 Server安装部署Janus
  9. 【mcuclub】称重-HX711
  10. 编辑混合变形变形器(Blend Shape)