游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3310|回复: 5

关于ShadowMap

[复制链接]

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2005-7-4 10:28:00 | 显示全部楼层 |阅读模式
最近在学习ShadowMap技术,希望在Dx8下面实现,不过例程都是Dx9的

依我的理解,需要先输出一张光源视角(LightView)的深度纹理(LightViewZTex),然后再从摄像机视角渲染场景,将渲染时每个Pixel转换到LightView视角与LightViewZTex的对应点比较,如果深度大于LightViewZBuf对应Pixel,则是阴影区。不知道这种理解是否正确?

我的问题是在Dx8中实现的问题,首先就是LightViewZBuf如何实现?因为Dx8没有HLSL,所以不能用DX9例程中的HLSL程序。

LPDIRECT3DTEXTURE8 LightViewZTex;
pDev->CreateTexture( ... D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8,  &LightViewZTex );

LPDIRECT3DSURFACE8 LightViewZSurf;
LightViewZTex->GetSurfaceLevel( 0, &LightViewZSurf );

然后
pDev->SetRenderTarget( LightViewZTex, ..... );

没有HLSL,我用VS/PS该如何得到每个像素的Z值呢?谢谢!

// vs
vs.1.1
m4x4 oPos, v0, c4

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2005-7-4 11:35:00 | 显示全部楼层

Re:关于ShadowMap

可以获取深度模板缓冲表面。

8

主题

239

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
发表于 2005-7-4 13:32:00 | 显示全部楼层

Re:关于ShadowMap

<<依我的理解,需要先输出一张光源视角(LightView)的深度纹理(LightViewZTex),然后再从摄像机视角渲染场景,将渲染时每个Pixel转换到LightView视角与LightViewZTex的对应点比较,如果深度大于LightViewZBuf对应Pixel,则是阴影区。不知道这种理解是否正确?>>

同我想的一样啊。我也用D8,不知道如何实现。无奈只能用shadow volumn,才深切体会到什么叫填充率不足。

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2005-7-4 15:53:00 | 显示全部楼层

Re:关于ShadowMap

shadowmap根D8,D9 没什么关系
hlsl还是要编译成asm的
如果你用nv的卡,直接使用DST就可以了
如果不是,那么就要在render to depthtexture这一步将变换后的深度值,存到颜色里
比如 (下面只是举例,不能实际用的)
m4x4 r0, iPos, c[WVP]
rcp r1.w, r0.w
mul oD0, r0.z, r1.w
这样就将变换后顶点的Z/W,送到颜色输出了,但是在DX8 下面,缺乏浮点纹理的支持
所以需要用PS来把Z/W编码到一个足够的精度,然后在投射阴影的时候再解码出来
具体例子可以参考ati网站上的一个shadowmap,就是基于DX8 的API

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
 楼主| 发表于 2005-7-4 16:56:00 | 显示全部楼层

Re:关于ShadowMap

哦,是的,可以使用oD0传送数据到PS
:)

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
 楼主| 发表于 2005-7-5 16:07:00 | 显示全部楼层

Re:关于ShadowMap

终于找到了ATI的例子,谢谢楼上兄弟了:D
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 06:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表