关于direct3d重的zbuffer
Bobby 2000-04-04 11:26:00 各位图形学高手:
小弟为了direct3d即使模式的zbuffer都快发疯了。
为实现zbuffer得功能,我做了一下几个步骤:
1、用CreateSurface和??_3DDEVICE标志创建一个offscreen图面。
2、用EnumZBufferFormat(...HAL_DEVICE...)枚举到了一个16位的zbuffer格式。
3、用CreateSurface和DDCAPS_ZBUFFER and DDCAPS_VIDEOMEMORY标志创建那该死的ZBUFFER图面,没有显存不足的报告。
4、在把该zbuffer图面attach到刚才创建的offscreen图面。
5、用offscreen图面和CreateDevice创建一个3d设备(HAL DEVICE)。
6、在用SetRenderState(????_ZBUFFERENABLE,TRUE),使zbuffer有效。
7、在每次调用drawprimitive前用clear方法把zbuffer设置为1.0f。
但竟毫无效果,晚画的物体还是会出现在早画得物体前面。我如果把zbuffer的得深度比较公式设置为LESS而不是缺省值LESSEQUAL,那早画的物体就会出现在晚画的物体前面,由此可见所有的物体的z深度值都是一样的,这不是奇怪吗!
我画的物体是几个完全相同的球体(由两个TRIANGLEFAN和16个TRIANGLESTRIP组成),他们在本地坐标系里面的每个顶点得本地坐标都是完全一样的,我是通过在调用drawprimitive前用SetTransForm(WORLD...)设置不同的世界坐标转换矩阵(都是平移矩阵)来实现球体得不同位置。
大虾们要使觉得有任何一点点不妥得地方,请一定要给我指出来,我为了它已经灰心了好几天了!
另外:我的显卡是i740。感激流涕!
Bobby diablohsh@163.net