wiki/Cg Programming/Unity_shder/RGB Cube
来源:互联网 发布:2016流行网络语言 编辑:程序博客网 时间:2024/06/15 19:08
地址
https://en.wikibooks.org/wiki/Cg_Programming/Unity/RGB_Cube
重点
认识结构体、顶点输出语义
关键代码
Shader "Cg shader for RGB cube" { SubShader { Pass { CGPROGRAM #pragma vertex vert // vert function is the vertex shader #pragma fragment frag // frag function is the fragment shader // for multiple vertex output parameters an output structure // is defined: struct vertexOutput { float4 pos : SV_POSITION; float4 col : TEXCOORD0; }; vertexOutput vert(float4 vertexPos : POSITION) // vertex shader { vertexOutput output; // we don't need to type 'struct' here output.pos = mul(UNITY_MATRIX_MVP, vertexPos); output.col = vertexPos + float4(0.5, 0.5, 0.5, 0.0); // Here the vertex shader writes output data // to the output structure. We add 0.5 to the // x, y, and z coordinates, because the // coordinates of the cube are between -0.5 and // 0.5 but we need them between 0.0 and 1.0. return output; } float4 frag(vertexOutput input) : COLOR // fragment shader { return input.col; // Here the fragment shader returns the "col" input // parameter with semantic TEXCOORD0 as nameless // output parameter with semantic COLOR. } ENDCG } }}
在网页的最后有相关阅读,英文好的可以自己查阅,我再下面写出我自己的理解
解读
本次的shader和上次的差别不是很大,介绍不同的部分
struct vertexOutput { float4 pos : SV_POSITION; float4 col : TEXCOORD0; };在cg中支持结构体,这样你可以将一组数据放在一个里面,有点面向对象的赶脚,语义的形式很多种,详见参考书阳春白雪
SV_POSITION 表示位置的输出语义
TEXCOORDO 表示纹理的输出语义
大致有这几种语义:
在vert程序中将数据存入结构体
output.pos = mul(UNITY_MATRIX_MVP, vertexPos); 存入位置信息
output.col = vertexPos + float4(0.5, 0.5, 0.5, 0.0); 在默认颜色信息的基础上加float4(0.5, 0.5, 0.5, 0.0)
默认的颜色值不是全部为0,默认的效果图:
在frag中把顶点处理得到的颜色信息直接返回,得到:
这个shader的作用相当于把默认的提亮了
疑惑
维基百科上说默认值在-0.5-0.5之间,可是具体多少呢,我本想打印出来,可是发现我不知道怎么调试
0 0
- wiki/Cg Programming/Unity_shder/RGB Cube
- wiki/Cg Programming/Unity_shder/Minimal Shader
- wiki/Cg Programming/Unity_shder/Debugging of Shaders
- wiki/Cg Programming/Unity_shder/Shading in World Space
- Cg shader for RGB cube
- wiki/Cg Programming/Unity/Cutaways
- wiki/Cg Programming/Unity/shder_理解准备
- 翻译 Cg Program in Unity - 1.2 RGB Cube
- Cg Programming/Unity 目录
- Cg Programming/Unity/Transparency
- Cg Programming/ProgrammableGraphics Pipeline
- Cg Programming/Unity
- Cg Programming/Unity/Cutaways
- Cg Programming/Unity/Cookies
- Cg Programming/Unity/Transparency透明度
- Cg Programming/Unity/Billboards广告牌
- Cg Programming/Vertex Transformations Cg编程/顶点变换
- RGB 到HSV转换 摘自wiki百科
- 微信涉及的重要数据结构-2
- ZwWriteFile routine
- CMake 编程简介
- mina学习笔记一:mina上路
- Java NIO
- wiki/Cg Programming/Unity_shder/RGB Cube
- BZOJ_P3223&Tyvj_P1729 文艺平衡树(SplayTree区间翻转)
- linux系统目录结构
- ___87__UseBrush_GDI使用画刷
- linux shell 编程14 获取时间
- 个人软件、开发工具等 临时备忘
- 118. Pascal's Triangle
- mina学习笔记二:从官方例子开始
- 线段树(完全二叉树)