首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

看DX的Shadow Map代码,对Pixel Shader传入的“像素”产生了疑惑?该如何解决

2012-03-28 
看DX的Shadow Map代码,对Pixel Shader传入的“像素”产生了疑惑?生成Shadow Map的VS, PS代码中有简单的几句。

看DX的Shadow Map代码,对Pixel Shader传入的“像素”产生了疑惑?
生成Shadow Map的VS, PS代码中有简单的几句。

C/C++ code
//-----------------------------------------// Vertex Shader: VertShadow// Desc: Process vertex for the shadow map//-----------------------------------------void VertShadow( float4 Pos : POSITION,                 float3 Normal : NORMAL,                 out float4 oPos : POSITION,                 out float2 Depth : TEXCOORD0 ){    //    // Compute the projected coordinates    //    oPos = mul( Pos, g_mWorldView );    oPos = mul( oPos, g_mProj );    //    // Store z and w in our spare texcoord    //    Depth.xy = oPos.zw;}//-----------------------------------------// Pixel Shader: PixShadow// Desc: Process pixel for the shadow map//-----------------------------------------void PixShadow( float2 Depth : TEXCOORD0,                out float4 Color : COLOR ){    //    // Depth is z / w    //    Color = Depth.x / Depth.y;}


那么PixShadow的传入像素是什么?是唯一的吗?是那个Z值最小的那个像素才传入到Pixel Shader中进行处理吗?

我再解释一下:假设对于屏幕上的一个像素。类似于Picking,我们发出射线,这条射线可能会与多个模型相交。
这就是说,一个像素,可能会对就多个颜色值,但只有最接近屏幕的那个颜色值显示了出来。
我想问的是,传入Pixel Shader的像素,可能是多个值(对应多个模型),还是最接近这个像素的那一个值?
因为如果是多个像素的话,在PixShadow中就应该对z/w进行比较,再写入。如果是一个值的话,就可以直接写入了。

不知道我表达的清楚吗?

[解决办法]
楼住 你可能没看懂代码吧
那个比较的操作不出现在这里 那个比较是深度测试 不需要你完成的
你贴的这个部分的代码是为整个场景建立一个深度纹理 是将场景的深度信息写入一张纹理中
在渲染到后缓冲区的时候要通过深度纹理的深度信息进行渲染阴影
[解决办法]
在shader代码里不需要进行深度测试的,这个工作在光栅化的时候显卡会为你完成
所有你所需要做的就是生成一张从光源处看向场景的深度图,也就说的shadow map

热点排行