Cg入门1:输入输出和语义

知识点:

1.顶点和片段程序的输入输出

2.常用语义

3.编写一个简单的Shader

输入用:in

输出用:out

即使输入也是输出用:inout

CG语法:

CGPROGRAM 开始标识

ENDCG  结束标识

objPos:语义  语义关键字必须为全大写字母组成(objpos:POSITION 语义:objpos表示一个位置向量),语义只是代表一种运行环境

inout:表示可以把输入直接当成输出返回(顶点颜色输出col当成片段程序的输入,根据类型来匹配的,而不是根据名字来匹配的

语义类型: POSITION, NORMAL, BINORMAL, BLENDINDICES, BLENDWEIGHT, TANGENT, PSIZE, TEXCOORD0 ~ TEXCOORD7

要想用顶点的输出col 有两种方式:

第一种:return col  出去顶点颜色输出

第二种:定义结构体,然后输出结构体

定义结构体的好处:清楚明了,减少out,in 的编写,如果作为输出结构,那么里面的元素全是输出;如果是作为参数输入,那么你们的元素全是输入


小技巧:Properties下的_MainColor 在inspector 颜色值看不到,也调不了。


随意点击红色框框的区域就可以让其显示了


时间: 2024-10-13 02:35:12

Cg入门1:输入输出和语义的相关文章

cg中的关键字、语义词、函数库

一.cg的关键字与语义字 关键字: asm* explicit pixelfragment* template asm_fragment extern pixelshader* texture* auto FALSE private texture1D bool fixed protected texture2D break float* public texture3D case for register textureCUBE catch friend reinterpret_cast te

[Unity] Shader(着色器)输入输出和语义

在Unity5.x后, 已经支持了基于物理的光照模型,也就是常说的次时代引擎所必须具备的功能. 如果在Properties使用2D,CG里要用sampler2D,代表使用的是2维纹理 如果在Properties使用color, CG里要用fixed4 如果在Properties使用Range, CG里要用half,实际上描述的是一个float struct Input 用于描述UV坐标的结构体.在 Input 中, 变量名必须是 uv_ 开始, 变量名必须是官方文档中已经指定的名称(也就是说不可

Cg入门19:Fragment shader - 片段级模型动态变色

y值要表示范围为[-0.5,0.5],所以语义要注意不要用Color(注意:Color 语义值范围为[0,1] ) (特别注意:内建的cube范围才是[-0.5,0.5],其它模型就不一定是这个值了噢) 发现顶部没有融合掉.为了所有融合掉.我们将_Center范围+R的大小,就所有融合了 效果例如以下: 优化:去掉if else,由于if else 可能在其它硬件上不能运行. 代码: Shader "Sbin/vf55" { Properties { _UpColor("Up

Cg入门9:Vertex Shader - Uniform 与 properties属性

_AppSetColor 声明处:可以在float4 _AppSetColor前面加Uniform ,或者不加都可以(注意:加的话好像,需要unity 5以上的版本) C# 代码

Cg入门11:Vertex Shader - 几何变换 —MVP矩阵变换(旋转、缩放)

旋转.缩放demo C# Code: Shader Code:

Cg入门10:Vertex Shader - 几何变换 —MVP矩阵变换

Unity内建矩阵类型: M:世界矩阵 V:摄像机矩阵 P:投影矩阵 T :矩阵的转置 IT : 转置的的逆 _Object2World: 模型到世界矩阵 _World2Object:世界到模型矩阵 MVP 矩阵变换:Shader Demo MVP 转置变换:C# demo Matrix4x4 mvp = Camera.main .projectionMatrix * Camera.main .worldToCameraMatrix * transform .localToWorldMatrix

Cg入门2:profile和基本数据类型

float :一个浮点值 float4:一个四阶向量 half:一个浮点值的一半 fixed: bool: 0 和 非0 int: 其实也是按照float还计算的 Sampler*: 值传递 不支持指针 支持数组 int 有符号 全部静态变量没有 逻辑运算符+?:可使用 支持interface 支持宏

Cg入门4:流程控制

知识点: 1.If...else 2.while 3.Do...while 4.for if-else,while,Do-while,for :与C语言语法一样 switch/case  : 不支持 模型x,y 值范围:[-0.5,0.5] 起始位置为模型左下角 注意: while.Do-while.for :循环上线为1024,只能循环1023此

Cg入门13: Vertex Shader - 几何变换 —顶点位移

注意:向量进行计算的时候,不仅代表大小,还代表方向.记得代表方向有利于队变换计算的理解 效果如下: