随笔-2  评论-7  文章-2  trackbacks-0

在尝试渲染镜面的时候遇到一个问题,将要贴到镜面上的纹理是渲染出来的,
已经是从摄像机的角度看到的镜面内容了,再使用常规的纹理坐标贴图必然会造成扭曲失真,
要做的是相对屏幕坐标将纹理贴到镜面上,
就仿佛是从摄像机的角度将纹理投射到物体表面上一样,这样做可以使用投影纹理来实现,
但是看了一下投影纹理坐标的计算过于繁琐,想了想还是决定从Vertex Shader输出的坐标信息下手。
折腾了半天之后终于搞定了~

在VS中将待输出的坐标的xy分量和w分量分别插值传递给PS
在PS中使用xy/w就得到当前渲染的像素在以屏幕中心为原点,
y=±1为上下边沿,x=±1为左右边沿的左手坐标系中的坐标。
当然z/w也就是固定管线中写入到z缓冲中的深度值~

有了这个坐标之后想要计算其他的东西就很方便了,
只需要对-xy使用加一除以二的操作后就可以得到镜面上当前像素对应的纹理坐标了~~
或者对xy加一除二,再乘上当前窗口的分辨率就可以得到像素坐标了~
不知道d3d光栅化是怎么做的,
如果不是这样做的,那这个办法就不一定精确了



posted on 2009-08-31 17:48 Vertexer 阅读(1329) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理