游戏开发论坛

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

d3d9 中的 depth buffer 不工作。。。

[复制链接]

14

主题

40

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2005-2-28 20:38:00 | 显示全部楼层 |阅读模式
d3d9 中的 depth buffer 不工作。。。

我的程序里面:
m_theD3dpp.EnableAutoDepthStencil = TRUE;
m_theD3dpp.AutoDepthStencilFormat = D3DFMT_D16;
设置了

m_pD3DDevice->SetRenderState (D3DRS_ZENABLE, D3DZB_TRUE);
也调用了

m_pD3DDevice->Clear (0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
            D3DCOLOR_XRGB (0x00, 0x00, 0x00), 1.0f, 0);
也调用了

BeginScene 以后:

调用 m_pD3DDevice->DrawIndexedPrimitive 画第一个 model
然后再调用 m_pD3DDevice->DrawIndexedPrimitive 画第二个 model。

建模可以确定 第二个 model 是在 第一个 model 的后面。

结果程序执行显示的第二个 model 总是在第一个前面。调节第二个
model 的 z 坐标(我的 camera 是设在 z 轴上朝向 z 轴正向),
仍然是第二个 model 总是在第一个前面,只是改变了大小。。。

这是怎么回事?难道 z-buffer 只在单个 DrawPrimitive 内有效???

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-1 09:41:00 | 显示全部楼层

Re:d3d9 中的 depth buffer 不工作。。。

z-buffer不是z坐标,是摄象机的深度值。
如果你确定第二次画的要在第一次画的后面的话,你可以检查一下在画模型的时候,都有哪些renderstate。

11

主题

114

帖子

118

积分

注册会员

Rank: 2

积分
118
QQ
发表于 2005-3-1 14:27:00 | 显示全部楼层

Re:d3d9 中的 depth buffer 不工作。。。

渲染前调用
m_pD3DDevice->SetRenderState (D3DRS_ZWRITEENABLE, D3DZB_TRUE);
m_pD3DDevice->SetRenderState (D3DRS_ZENABLE, D3DZB_TRUE);
看行不

14

主题

40

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2005-3-1 19:56:00 | 显示全部楼层

Re:d3d9 中的 depth buffer 不工作。。。

没用的,都不行,我晕了。。。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2005-3-1 21:22:00 | 显示全部楼层

Re:d3d9 中的 depth buffer 不工作。。。

你的投影矩阵怎么设置的?投影近截面不能为零,

8

主题

111

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2005-3-2 09:36:00 | 显示全部楼层

Re:d3d9 中的 depth buffer 不工作。。。

找一个Z值显示正常的sample,把你的代码放到那个sample里去看看,找两者的区别.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 12:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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