1.3 Debugging of Shaders (调试着色器)(二)

2014-11-23 19:41:17 · 作者: · 浏览: 32
值red组件的值都是1,另外不论输出颜色是蓝色、绿色还是浅蓝色所有情况取值,此时的red组件的值都是0. 例如:

output.col= float4(input.texcoord.x, 0.0, 0.0, 1.0);

//float4(red,green,blue,alpha)此处透明度alpha的取值为1.0,在此处它的

//取值是不会对shader产生影响的.

这里设置red组件为纹理x轴坐标,设置绿色组件和蓝色组件都为0.此时的shader如图所示:

\ \ \

一个类似表面有经度的球。一个从0度到180度,由0(没有颜色――黑色)到1(纯红色)的渐变的球,而后又从180度到360度从新开始。

既然x坐标形成一个类似于经度的球,那么y坐标就会形成一个类似于纬度的球。此处因为纹理坐标取值范围为0到1,作用于坐标上0值为底部(南极),1为顶部(北极)。< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+b3V0cHV0LmNvbD0gZmxvYXQ0KGlucHV0LnRleGNvb3JkLnkgLDAuMCwgMC4wLCAxLjApOzwvcD4KPHA+yfqzybXYc2hhZGVy0Ke5+8jnzbzL+cq+o7o8L3A+CjxwPjxpbWcgc3JjPQ=="https://www.cppentry.com/upload_files/article/76/1_jwlg5__.jpg" alt="\"> \ \

法向量normalized vectors的取值范围是-1到+1之间。为让每一个color组件取值范围都在(0,1)之间,就将每一个组件都增加1,然后整体除以2,如下所示:

output.col= float4( (input.normal + float3(1.0, 1.0, 1.0)) / 2.0, 1.0);


\ \

这里法线向量是一个三维向量(x,y,z),它中黑色即没有颜色坐标轴取值为-1,亮度最大即各组件为纯RGB,坐标取值为+1.

output.col= float4(input.normal, 1.0);


\ \ \

调试练习

output.col = input.texcoord -float4(1.5, 2.3, 1.1, 0.0);

output.col = float4(input.texcoord.z);

output.col = input.texcoord / tan(0.0);

这几种情况都是黑色的shader即没有颜色,因为此时RGB三个组件的的值都为0。

下面的内容没怎么看懂,有兴趣的自己试着做做吧。 大笑

The following lines require someknowledge about the dot and cross product:

output.col = dot(input.normal,float3(input.tangent)) *

input.texcoord;

output.col =dot(cross(input.normal, float3(input.tangent)),

input.normal) * input.texcoord;

output.col =float4(cross(input.normal, input.normal), 1.0);

output.col = float4(cross(input.normal,

float3(input.vertex)), 1.0);

// only for a sphere!

Does the function radians() alwaysreturn black What's that good for

output.col =radians(input.texcoord);