NVIDIA cg语言编写shader的学习笔记

本文是关于学习NVIDIA CG语言的笔记,主要参考了NVIDIA的权威教程和GPU编程精粹系列书籍。目标是掌握Unity3D中的Shader编写,以及未来可能涉及的OpenGL和OpenCV开发。内容涵盖了GPU的发展历史、渲染流程、顶点和片段处理,以及CG语言的关键概念如结构体、语义词和profile。

主要的学习教程是nvidia出的那个《cg教程,可编程实时权威指南》以及三本《GPU编程精粹》

个人能力有限,只能尽量将自己理解的关键点记录下来,有想认真深入的朋友,建议完整的看一遍以上书籍

学习cg语言的主要目的是为了学习unity3d中shader的编写,以及以后可能做opengl,opencv的开发

官方的docment是用c++写opengl接口的程序,然后调用cg语言的.cg 文件来访问gpu硬件,我不会写c++,只好把所有工作都放到unity3d的环境中了,其中有些差异,但不大,主要是unity3d应用程序已经将顶点,法线等信息处理好了,封装了不少使用的东西在它的UNITY.cgnic文件中


一.gpu的发展历史

第一代第二代没有可编程能力,固定管线

第三代支持顶点编程(vertex)

第四代(即现今我们使用的)拥有可编程能力,使得顶点变换和像素操作从cpu转移到gpu中进行




二.gpu的渲染流程

在GPU渲染流水线的不同阶段,需要处理的对象分别是顶点(vertex)、几何图元(primitive)、片元(fragment)、像素(pixel)

顶点变换:将3d application中给定的顶点位置等,变换屏幕位置以便光栅器使用

图元处理:图元装配和光栅化,图元装配即是将顶点装配为几何图元,光栅化决定那些像素被图元覆盖,然后是插值贴图和着色

光栅操作:对片段进行操作(fragment)







三.vertex fragment

结构体:个人理解,用于定义输入输出结构,并绑定语义词,结尾有;,忘记输入;会报错

struct VertexIn{

position:POSITION;

normal:NORMAL;

textoord:TEXTOORD0;

};




语义词:全部大写,书中说是一种粘合剂,把cg程序和图形流水线的其他部分绑定在一起,指明该变量的硬件资源

POSITION

NORMAL

TEXTOORD0

COLOR

等等。。。。。


profile:cg程序用何种接口编译你的cg程序,各种profile对应不同的编程接口及不同能力的gpu硬件

opengl:

direct:



四.顶点 片段的流程和一些解释


变量

uniform修饰词,表示这是一个由外部程序提供的变量


普通变量的声明:type name = value;

例:float4  color = float4(1,1,1,1);


支持的类型:float,half,fixed三种浮点数类型的范围和大小不一样,分别是32bit,16bit,11bit


纹理(texture)

sampler1D

sampler2D

sampler3D

samplerCUBE

samplerRECT




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值