关于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
...全文
222 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bobby 2000-05-23
  • 打赏
  • 举报
回复
唉,终于搞掂,原来是我设置的投影矩阵有误,投影矩阵必须是可逆矩阵才行!
好像不能给自己分吧,那大家平分了吧. :bobby
Bobby 2000-05-22
  • 打赏
  • 举报
回复
Hi all:
问题已经解决,原来是因为我设置的投影矩阵不是可逆矩阵造成的,真实倒霉!

mr bobby
hanqiang 2000-05-03
  • 打赏
  • 举报
回复
我想错误出现在你创建对象的顺序上,应该是先创建Device,后建ZBuffer平面.
试一下吧.
blaise 2000-04-06
  • 打赏
  • 举报
回复
i feel strange about this:
7、在每次调用drawprimitive前用clear方法把zbuffer设置为1.0f

why u want to celar the zbuffer?if you clear the zbuffer to 1.f means you next triangle will comapre its depth with 1.f,so it must brawn.remove the clear and try.
if u still have problem, mail u code to me,(compilable and as simple as possible,don't send me code fragment.blaise@kali.com.cn)
示例程序目录及简要说明 第2章 Direct3D程序设计基础 CreateDevice 演示Direct3D程序的基本框架,以及如何创建Direct3D对象和Direct3D设备对象。 第3章 坐标系与基本图元 1、VertexBuffer 演示使用顶点缓冲区对象绘制基本图元。 2、BasicPrimitive 演示Direct3D中6种基本图元的绘制。通过单击键盘上的“1”~“6”数字键可以在各图元类型之间进行切换。 3、IndexBuffer 演示使用顶点缓冲区和索引缓冲区绘制基本图元。 4、RenderState 演示顶点着色模式和图形填充方式两个基本渲染状态对图形显示的影响。通过单击鼠标左键在两个着色模式之间进行切换,单击鼠标右键在3种图形填充模式之间进行切换。 5、AntiAlisa 演示通过多采样实现图形反锯齿效果。程序运行时通过单击鼠标左键可以在启用和禁用图形反锯齿效果之间进行切换。 6、FullScreen 演示全屏幕显示模式Direct3D程序的开发,主要是创建全屏显示模式的Direct3D设备。因为程序运行在全屏模式下,所以不能像运行在窗口模式下那样,通过单击标题栏上的“关闭”按钮来关闭程序,可以通过单击键盘上的“Esc”键退出程序,也可以通过按下“Alt+F4”键退出程序。 第4章 顶点坐标变换 Transfrom 演示三维坐标变换、视区变换,以及简单动画的实现。 第5章 光照与材质 1、SimpleLighting 演示灯光的使用。 2、Multilights 演示同时使用多个光源的效果。一共使用三个光源,分别是漫反射方向光光源、漫反射点光源、镜面反射方向光光源。默认情况下,3个光源全部关闭,按下数字键“1”,启用1号光源;按下数字键“2”,启用2号光源;按下数字键“3”,启用3号光源;按下数字键“4”,3个光源全部启用;按下数字键“0”,3个光源全部关闭。 第6章 纹理映射基础 1、TextureBase 演示使用纹理贴图的基本步骤。 2、TexFilterMode 演示最近点采样和线性纹理过滤方式。在程序运行时,单击键盘上的数字键“1”,使用最近点采样纹理过滤方式,单击键盘上的数字键“2”,则使用线性纹理过滤。 3、MipTexture 演示如何创建和使用多级渐进纹理。程序运行时,单击键盘上的数字键“1”,则使用多级渐进纹理,单击数字键“2”,则使用单级别纹理。通过按下“↓”键和“↑”键可以放大和缩小显示的图形,从而可以仔细观察图像的变化,看到多级渐进纹理的效果。 4、TexAddressMode 演示不同纹理寻址模式的效果。程序运行时,单击键盘上的数字键“1”,使用叠纹理寻址模式,单击键盘上的数字键“2”,使用镜像纹理寻址模式,单击键盘上的数字键“3”,使用夹取纹理寻址模式,单击键盘上的数字键“4” ,使用边框颜色纹理寻址模式。 5、TexRenderState 演示纹理阶段混合状态的使用。 第7章 使用文件模型 1、Mesh 演示.X文件模型的使用,包括从.X文件中加载模型生成网格模型对象,渲染网格模型。 2、StateControlUseMatrix 演示使用矩阵旋转网格模型。程序运行时按下“D”和“A”键可以使飞机模型绕自身z轴旋转;按下“S”和“W”键可以使飞机模型绕x轴旋转;按下“Q”和“E”键可以使飞机模型绕自身y轴旋转;按下“F”和“V”键可以使飞机模型向前和向后运动。 3、StateControlUseQua 演示使用四元数旋转网格模型。程序运行时按下“D”和“A”键可以使飞机模型绕自身z轴旋转;按下“S”和“W”键可以使飞机模型绕x轴旋转;按下“Q”和“E”键可以使飞机模型绕自身y轴旋转;按下“F”和“V”键可以使飞机模型向前和向后运动。 第8章 深度测试与Alpha混合 1、ZTest 演示深度测试的使用。程序运行时按下数字键“1”启用深度测试,按下数字键“0”,则禁用深度测试。 2、AlphaBlend 演示使用Alpha混合实现半透明效果。程序运行时按下数字键“1”,启用Alpha混合,按下数字键“0”,则禁用Alpha混合。 3、VertexAlpha 演示直接为顶点颜色设置Alpha值。程序运行时按下数字键“1”,启用Alpha混合,按下数字键“0”,则禁用Alpha混合。 4、TextureAlpha、 演示通过纹理混合获取Alpha 值。程序运行时按下数字键“1”,启用Alpha混合,按下数字键“0”,则禁用Alpha混合。 5、AlphaTest 演示Alpha测试的使用。程序运行时按下数字键“1”,启用Alpha测试,按下数字键“0”,则禁用Alpha测试。 第9章 雾化 1、VertexFog 演示顶点雾化效果。程序运行时按下数字键“1”,
  总目录   第一章 硬件接口   1.1 3D应用程序与硬件的交互作用    1.1.1 在计算机屏幕上显示图像    1.1.2 事件反应   1.2 使用不同的体系结构    1.2.1 MS-DOS.    1.2.2 MS-Windows.    1.2.3 X11.    1.2.4 NeXTStep.    1.2.5 MacOS.   第二章 3D变换   2.1 欧几里得空间,自由度和基本变换   2.2 平移   2.3 缩放   2.4 在平面内旋转   2.5 3D旋转    2.5.1 坐标系    2.5.2 变换次序   2.6 以矩阵形式表达变换   2.7 投影变换    2.7.1 平行投影    2.7.2 透视投影   2.8 通过定点算法实现变换    2.8.1 整型数表示    2.8.2 定点数运算    2.8.3 定点算法的实现   第三章 2D图元光栅处理   3.1 光栅化点   3.2 光栅化线段   3.3 光栅化多边形    3.3.1 光栅化凸多边形    3.3.2 光栅化凹多边形   3.4 内插渲染明暗处理的多边形   3.5 渲染纹理多边形   3.6 反走样   第四章 2D和3D裁剪   4.1 2D裁剪策略    4.1.1 点的裁剪    4.1.2 裁剪线段    4.1.3 裁剪多边形   4.2 3D裁剪策略   第五章 视处理   5.1 从世界到屏幕的方法    5.1.1 视系统参数    5.1.2 多边形管道    5.1.3 纹理多边形   5.2 从屏幕到世界的方法    5.2.1 直线方程    5.2.2 平面方程    5.2.3 直线和平面的交叉点    5.2.4 直线和多边形的交叉点    5.2.5 直线和球的交叉点    5.2.6 寻找合适的交叉点    5.2.7 优化光线追踪   第六章 建模   6.1 线框模型   6.2 多边形模型   6.3 三次曲线和双三次曲面   6.4 地形   6.5 体素模型   第七章 隐面消除   7.1 背面剔除算法   7.2 从后到前排序   7.3 顺序列表和八叉树   7.4 入口   7.5 二叉空间分割树   7.6 Beam树   7.7 扫描线算法   7.8 Z-buffer算法   第八章 光线   8.1 光线的物理特性与人的感觉   8.2 颜色模拟    8.2.1 非彩色光    8.2.2 颜色模型的三个成分   8.3 照明模拟    8.3.1 环境照明   8.3.2 漫反射    8.3.3 镜面反射   8.4 在屏幕到世界中观察照明   8.5 辐射度   8.6 在世界到屏幕中观察照明   第九章 构建3-D应用程序的实践方面   9.1 常规设计方法    9.1.1 面向对象编程    9.1.2 脚本   9.2 构建工具    9.2.1 OpenGL    9.2.2 Direct3D   9.3 应用程序的构建策略    9.3.1 实体视处理    9.3.2 室内场景视处理    9.3.3 室外场景视处理   附录   10.1 参考文献   10.2 常用公式
Contents Preface vii About the Authors ix Introduction xix Section I—Geometry Manipulation Tricks 1 Using Vertex Shaders for Geometry Compression 3 Dean Calver Using Lookup Tables in Vertex Shaders 13 Carsten Wenzel Terrain Geomorphing in the Vertex Shader 18 Daniel Wagner 3D Planets on the GPU 33 Jesse Laeuchli Cloth Animation with Pixel and Vertex Shader 3.0 40 Kristof Beets Collision Shaders 58 Takashi Imagire Displacement Mapping 73 Tom Forsyth Section II — Rendering Techniques 87 Rendering Objects as Thick Volumes 89 Greg James Screen-aligned Particles with Minimal VertexBuffer Locking 107 O’dell Hicks Hemisphere Lighting with Radiosity Maps 113 Shawn Hargreaves iii Galaxy Textures 123 Jesse Laeuchli Turbulent Sun 127 Jesse Laeuchli Fragment-level Phong Illumination 131 Emil Persson Specular Bump Mapping on Pre-ps_1_4 Hardware 149 Matthew Halpin Voxel Rendering with PS_3_0 161 Aaron Burton Simulating Blending Operations on Floating-point Render Targets 172 Francesco Carucci Rendering Volumes in a Vertex & Pixel Program by Ray Tracing 177 Eli Z. Gottlieb Normal Map Compression 185 Jakub Klarowicz Drops of Water and Texture Sprites 190 Sylvain Lefebvre Advanced Water Effects 207 Kurt Pelzer Efficient Evaluation of Irradiance Environment Maps 226 Peter-Pike J. Sloan Practical Precomputed Radiance Transfer 232 Peter-Pike J. Sloan Advanced Sky Dome Rendering 240 Marco Spoerl and Kurt Pelzer Deferred Shading with Multiple Render Targets 251 Nicolas Thibieroz Meshuggah’s Effects Explained 270 Carsten Wenzel Layered Car Paint Shader 293 John Isidoro, Chris Oat, and Natalya Tatarchuk Motion Blur Using Geometry and Shading Distortion 299 Natalya Tatarchuk, Chris Brennan, Alex Vlachos, and John Isidoro Contents iv Simulation of Iridescence and Translucency on Thin Surfaces 309 Natalya Tatarchuk and Chris Brennan Floating-point Cube Maps 319 Arkadiusz Waliszewski Stereoscopic Rendering in Hardware Using Shaders 324 Thomas Rued Hatching, Stroke Styles, and Pointillism 340 Kevin Buchin and Maike Walther Layered Fog 348 Guillaume Werle Dense Matrix Algebra on the GPU 352 Ádám Moravánszky Section III — Software Shaders and Shader Programming Tips 381 Software Vertex Shader Processing 383 Dean P. Macri x86 Shaders–ps_2_0 Shaders in Software 396 Nicolas Capens SoftD3D: A Software-only Implementation of Microsoft’s Direct3D API 413 Oliver Weichhold Named Constants in Shader Development 432 Jeffrey Kiel Section IV — Image Space 437 Advanced Image Processing with DirectX 9 Pixel Shaders 439 Jason L. Mitchell, Marwan Y. Ansari, and Evan Hart Night Vision: Frame Buffer Post-processing with ps.1.1 Hardware 465 Guillaume Werle Non-Photorealistic Post-processing Filters in MotoGP 2 469 Shawn Hargreaves Image Effects with DirectX 9 Pixel Shaders 481 Marwan Y. Ansari Using Pixel Shaders to Implement a Mosaic Effect Using Character Glyphs 519 Roger Descheneaux and Maurice Ribble Contents v Mandelbrot Set Rendering 526 Emil Persson Real-Time Depth of Field Simulation 529 Guennadi Riguer, Natalya Tatarchuk, and John Isidoro Section V — Shadows 557 Soft Shadows 559 Flavien Brebion Robust Object ID Shadows 580 Sim Dietrich Reverse Extruded Shadow Volumes 587 Renaldas Zioma Section VI — 3D Engine and Tools Design 595 Shader Abstraction 597 Tom Forsyth Post-Process Fun with Effects Buffers 614 Tom Forsyth Shaders under Control (Codecreatures Engine) 625 Oliver Hoeller Shader Integration in the Gamebryo Graphics Engine 631 Scott Sherman, Dan Amerson, Shaun Kime, and Tim Preston Vertex Shader Compiler 650 David Pangerl Shader Disassembler 667 Jean-Sebastian Luce Index 675

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧