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

一直不明白SHADOW MAP中的Render Target坐标转换为Texture坐标是什么意思?该怎么处理

2012-02-23 
一直不明白SHADOW MAP中的Render Target坐标转换为Texture坐标是什么意思?就是DX里的SHADOW MAP例子FX代码

一直不明白SHADOW MAP中的Render Target坐标转换为Texture坐标是什么意思?
就是DX里的SHADOW MAP例子FX代码中,说把RENDER TARGET坐标转化为TEXTURE坐标。
有没有讲解的例子呀?
Render Target到底是什么空间呀?这是怎么转换的呀?为什么要乘个0.5呀?
  //transform from RT space to texture space.
  float2 ShadowTexC = 0.5 * vPosLight.xy / vPosLight.w + float2( 0.5, 0.5 );
  ShadowTexC.y = 1.0f - ShadowTexC.y;

  // transform to texel space
  float2 texelpos = SMAP_SIZE * ShadowTexC;

[解决办法]
Render Target空间应该就是Viewport空间,左上角是-1,1,右下角是1,-1。也就是说是一个X向右,Y向上的空间。
而我们用到的纹理UV,一般左上角是0,0,右下角是1,1。也就是说是一个X向右,Y向下的空间,而且,大小比Render Target空间正好小一半。
[解决办法]
render target 是指放在backbuffer中,准备下一帧要显示在屏幕上的内容
其x,y坐标范围在-1到1之间,

代码也就是把-1到1之间的坐标转换到0-1的纹理坐标中
[解决办法]
如果正常渲染来讲 target的是backbuffer 然后在将backbuffer中的东西渲染到屏幕上 
而render target目的是改变目标缓冲区 将目标缓冲区改变到一张纹理 然后 将场景的深度信息渲染到一张纹理 当绘制场景的时候会用到这张深度纹理图
你的那个代码的意思是 : 你的vPosLight的范围是-1到1 纹理的坐标的范围是0-1 所以需要将其转化 这就是他的作用float2 ShadowTexC = 0.5 * vPosLight.xy / vPosLight.w + float2( 0.5, 0.5 );
ShadowTexC.y = 1.0f - ShadowTexC.y;
做实效阴影都是这个思想

热点排行