游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: robinmarian

请问 关于zbuffer

[复制链接]

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-4-6 17:03:00 | 显示全部楼层

Re:请问 关于zbuffer

用什么比较?CPU or PixelShader?
CPU的话那不用说了吧。
pixel shader的话,定点数格式文理的texel所表示的值和纹理格式有关,比如unsigned格式就代表0-1,那怎么不能比较?

另外顺便说一句,oPos.z和z-buffer的数值不相等, z-buffer的值直接对应的是oPos.z/oPos.w

46

主题

238

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
 楼主| 发表于 2005-4-6 17:29:00 | 显示全部楼层

Re: Re:请问 关于zbuffer

hourousha: Re:请问 关于zbuffer

用什么比较?CPU or PixelShader?
CPU的话那不用说了吧。
pixel shader的话,定点数格式文理的texel所表...

ok我的比较是在cpu进行的 ,先渲染一次场景,用一个surfase去lock得到的depthbuffer:  g_pd3dDevice->GetDepthStencilSurface(&g_pSDepth);
然后把一个顶点vertex.pos投影出来
D3DXVec3Project(&pro,&vertex.pos,&g_pViewPort ,  
        &g_pmatp,    &g_pmatv,    &g_pmatw);
得到的pro的x.y对应到屏幕的象素坐标pro.z为其depth。
lock  那个surfase(包含depth信息)
D3DLOCKED_RECT LockedRect;
g_pSDepth-> LockRect(&LockedRect,  NULL,0);
D3DSURFACE_DESC surfaceDesc;
g_pSDepth->GetDesc(&surfaceDesc);
word* imageData = (word*)LockedRect.pBits;

以pro的x.y索引到imageData[n]  以pro.z与imageData[n] 比较看vertex是否可见,但是由于pro.z是float而imageData[n]是word而无法比较   请问该如何操作?    关键是在程序中用cpu判断vertex是否可见 [em4] [em4] [em4]

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2005-4-6 17:47:00 | 显示全部楼层

Re:请问 关于zbuffer

假设 你从depth buffer里取出的点为z
假设depth bit 是16
那么z / 65535.f 就是其对应的深度值
用变换后的顶点的p.z/p.w,和上述值比较就可以了

46

主题

238

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
 楼主| 发表于 2005-4-7 15:36:00 | 显示全部楼层

Re: Re:请问 关于zbuffer

secondage: Re:请问 关于zbuffer

假设 你从depth buffer里取出的点为z
假设depth bit 是16
那么z / 65535.f 就是其对应的深度值
用变换后的顶点的p.z/p.w,和上述值比较就可以了

老大 你真厉害 我跪谢了oTZ [em13] [em13] [em13]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 04:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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