游戏开发论坛

 找回密码
 立即注册
搜索
楼主: Ethanph

请教关于depth buffer的使用问题

[复制链接]

1

主题

13

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2006-11-17 23:24:00 | 显示全部楼层

Re:请教关于depth buffer的使用问题

在很多的文章里面都提到zbuffer不能作为rendertexture以及不能随便的操作。
因为不同的硬件对zbuffer都有自己的优化硬件,不是平坦内存模式,所以不可以随便的操作zbuffer。你可以使用R32F格式创建rendertexture,并使用shader存储深度信息。然后2.pass自己做深度比较。一般的shadowmap就是这么做的。楼主能给我寄一套你的资料么?互相探讨。c_z_y@yahoo.com  谢谢。

4

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-11-18 10:12:00 | 显示全部楼层

Re: Re:请教关于depth buffer的使用问题

c_z_y: Re:请教关于depth buffer的使用问题

在很多的文章里面都提到zbuffer不能作为rendertexture以及不能随便的操作。
因为不同的硬件对zbuffer都有自...

我已经把一些论文发给你了,现在我想要一个简单的alpha test的例子,因为以前没有做过,自己试验写的老有问题,谢谢能不能给我发一个简单的完整的例子?

lumianph@163.com

4

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-11-18 16:07:00 | 显示全部楼层

Re: Re: Re:请教关于depth buffer的使用问题

congy: Re: Re:请教关于depth buffer的使用问题


可以创建一个 DepthStencil 的 Texture.

我是找到了这个usage,但接下去应该怎么使用啊?能不能指点一下?
这个texture 没有办法被lock,所以我不能直接往里面写数据阿

即使有了数据,我下一步应该怎么做呢?是得到他的一个surface,然后用
IDirect3DDevice9::SetDepthStencilSurface?

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-11-18 19:35:00 | 显示全部楼层

Re:请教关于depth buffer的使用问题

楼主怎么不使用,多个纹理缓冲呢?
例如:创建两个纹理缓冲,第一个写入数据,然后你在里面排序(不清楚你是怎么做的),然后输出到第二个纹理缓冲。

4

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-11-18 20:34:00 | 显示全部楼层

Re:请教关于depth buffer的使用问题

呵呵
排序就是这么做的

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-11-20 10:40:00 | 显示全部楼层

Re: Re: Re: Re:请教关于depth buffer的使用问题

Ethanph: Re: Re: Re:请教关于depth buffer的使用问题


我是找到了这个usage,但接下去应该怎么使用啊?能不能指点一下?
这个texture 没有办法被lock,所以我不...

对的,如果你创建时指定存储方式为 D3DPOOL_DEFAULT,是不能 Lock 的,但是也可以写入数据,使用 UpdateSurface 或者使用 UpdateTexture,注意作为 Depth Stencil 时不能同时写入。

4

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-11-20 15:14:00 | 显示全部楼层

Re:请教关于depth buffer的使用问题

谢谢你啊
我已经使用shader把数据写到depth buffer里面了,接下去又有一个古怪地问题,大家不要骂我

就是我怎么样再把depth buffer里面的数据取出来啊?我要看里面的内容

是先用这个吧: device->GetDepthStencilSurface( pSuface )

然后呢?这个surface又是不能被lock的,接下去应该怎么办啊,请大家指点一下

对了,directx不能直接创建一个空的surface吗,非要和一个texture关联?不然我就可以直接拷贝数据到空的surface,再lock再看里面的数据了

谢谢~~!

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-11-20 16:08:00 | 显示全部楼层

Re:请教关于depth buffer的使用问题

楼主可以说说排序的具体实现方法么。

4

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-11-20 17:16:00 | 显示全部楼层

Re:请教关于depth buffer的使用问题

汗...

这个说起来有一点长啊,首先排序上是选择了一个叫做bitonic sort的排序算法,这个算法的特点是每一次比较每一个该元素和另外一个特定距离元素的值,根据所在的位置来决定是否交换,这个排序一共要经过好几趟,汗...说不清楚,这里能不能发图,发个排序的图就知道了

后面就是用pixel shader根据每一个象素的坐标值来计算出应该对应的另外一个象素的坐标值,然后进行比较,来返回两个的最大或者最小值,每一趟排序都将结果render 到另外一个texture里面,然后在进行交换进行相似的操作,一直到所有全部排序完成.汗,还是说不清楚....

各位先告诉我怎么看到depth buffer里面的内容吧,谢谢 了 ~~~

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-11-20 22:15:00 | 显示全部楼层

Re:请教关于depth buffer的使用问题

这样理解:楼主请指正一下。
首先:数据写入到纹理A。
然后:进行PS排序(不知道bitonic sort这种算法)。
最后:渲染到纹理B。
循环:用纹理B进行PS排序,渲染到纹理A。
ps_2_0
def c0,1.0f,0.0f,0.0f,0.0f
dcl v0
dcl t0
dcl_2d s0
dcl_2d s1
texld r0,t0,s0
add r2,t0,c0
texld r1,r2,s1
max r3,r0,r1
mov oC0,r3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 22:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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