`

Direct3D基础知识

 
阅读更多
重新从头开始学习DX,以前太急于求成了,很多基础知识都没掌握就开始写程序了,结果出了问题很难解决.
1. D3D体系结构
D3D与GDI处与同一层次,区别在于,D3D可以使用HAL(Hardware Abstraction Layer)通过DDI来访问图形硬件,充分发挥硬件性能.
2. D3D设备对象
2.1 D3D设备类型
HAL,支持硬件加速光栅化和硬件或软件处理
Software Device,硬件模拟层
REF,reference device,SDK专用.不过nVidia的PerfHUD就是用的这种设备类型
2.2 D3DPRESENT_PARAMETERS
1: typedef struct D3DPRESENT_PARAMETERS {
 2: UINT BackBufferWidth, BackBufferHeight;//后台缓冲区宽高
 3: D3DFORMAT BackBufferFormat;//后台缓冲区像素格式
 4: UINT BackBufferCount;//后台缓冲区的数量
 5: D3DMULTISAMPLE_TYPE MultiSampleType;//多重采样类型,用于反锯齿
 6: DWORD MultiSampleQuality;
 7: D3DSWAPEFFECT SwapEffect;//后台缓冲区复制到前台缓冲区的方式
 8: HWND hDeviceWindow;//图形绘制窗口
 9: BOOL Windowed;//窗口/全屏
10: BOOL EnableAutoDepthStencil;
11: D3DFORMAT AutoDepthStencilFormat;
12: DWORD Flags;
13: UINT FullScreen_RefreshRateInHz;//刷新速率,窗口时必须为0
14: UINT PresentationInterval;
15: } D3DPRESENT_PARAMETERS, *LPD3DPRESENT_PARAMETERS;
BackBufferWidth与BackBufferHeight为0时系统自动使用当前窗口客户区宽高
BackBufferCount取0和1时都表示一个后台缓冲区
hDeviceWindow为NULL时默认为当前被激活的窗口
BackBufferFormat取D3DFMT_UNKNOWN时,像素格式取当前显卡的像素格式
2.3 CreateDevice中的BehaviorFlag
D3DCREATE_HARDWARE_VERTEXPROCESSING,硬件顶点运算
D3DCREATE_MIXED_VERTEXPROCESSING,软硬件共同进行顶点运算
D3DCREATE_MULTITHREADED,多线程绘制,会降低性能
D3DCREATE_SOFTWARE_VERTEXPROCESSING,软件顶点运算
通常某些集成显卡不支持硬件顶点运算,如intel 的GMA900/950
2.4 D3D绘制
Clear(),可以清空颜色缓冲区,深度缓冲区,模板缓冲区.可以选择清除区域
BeginScene()和EndScene()不允许嵌套
Present(),可以指定更新区域(脏矩形技术?),不过要求用D3DSWAPEFFECT_COPY
3. D3D设备对象
全屏模式:
枚举显示适配器(多显示器适用)
IDirect3D9::EnumAdpterModes()枚举支持的显示模式
IDirect3D9::CheckDeviceType()检测显示模式是否支持硬件加速
IDirect3D9::GetDeviceCaps()检查渲染设备是否支持所需要的功能(显卡兼容性检测)
IDirect3D9::CheckDeviceFormat()检测其它表面格式是否支持
IDirect3D9::CheckDepthStencilMatch()检测深度/模板缓冲区是否和渲染目标兼容
IDirect3D9::CheckDeviceMultiSampleType()检查设备是否支持多重采样(反锯齿用)
窗口模式:
直接用D3DADAPTER_DEFAULT就可以忽略前两步了,剩下的都一样
设备丢失:
图形显示丢失焦点,必须重新创建相关资源
任何显存资源在设备丢失时必须销毁,包括CreateAdditionalSwapChain()创建的交换链和D3DPOOL_DEFAULT格式的内存资源
4. D3D表面
表面格式:通常有两个属性,表面大小与颜色位数
表面翻转:将后台缓冲区移动到前台缓冲区的过程
交换链:按顺序逐个提交到前台显示的多个后台缓冲区的集合
多个视图的应用程序用多个交换链
访问表面内存:IDirect3DSurface9::LockRect(),不适用于多重采样后台缓冲区
分享到:
评论

相关推荐

    Direct3D游戏开发技术详解

    ·全面系统的Direct3D基础知识; ·经典的地形渲染技术(高度图户外地形系统、BSP室内地形系统,纹理混合技术,连续精细度绘制技术); ·主流3D动画技术(蒙皮骨骼动画,Morphing动画技术); ·精彩的3D游戏特效...

    Direct3D游戏编程入门教程

    本书是基于DirectX9.0编写的,是介绍Direct3D技术的入门教程。它详细 介绍了Direct3D的背景、基本知识... 本书适用于略有DirectX基础的C/C++程序员学习Direct3D游戏开发,也适用于具有Direct3D开发经验的程序员参考。

    Direct3D游戏编程入门教程2

    Direct 3D 游戏编程入门教程(第2版)基于DirectX 9.0,是介绍Direct3D技术...Direct 3D 游戏编程入门教程(第2版)适用于略有DirectX基础的C/C++程序员学习Direct3D游戏开发,也适用于具有Direct3D开发经验的程序员参考。

    Direct_3D与XNA游戏开发基础(C#版)

    介绍了Direct_3D的基础知识与XNA游戏开发基础

    Direct3D学习资源

    是一个关于Directx的使用及基础知识

    Direct3D9初级教程

    这篇教程是为初学者准备的,只要会简单的 VC++编程以及一点立体几何的基础知识即 可。通过它,可以了解到 Direct3D 的基本概念,学会绘制简单的几何图形,并掌握光源、 材质和纹理的基本用法。绝对好东东,下了不...

    Introduction to 3D Game Programming with DirectX 10(中文版)

    Direct3D与着色器编程的基础知识,读者在掌握这些内容之后,将有能力阅读更高级的技 术书籍。本书分为3个主要部分。第I部分讲解了贯穿全书的数学工具。第II部分涵盖了 基本的Direct3D编程技术,比如初始化、定义3D...

    Introduction to 3D Game Programming with DirectX 10中文版

    它涵盖了Direct3D与着色器编程的基础知识,读者在掌握这些内容之后,将有能力阅读更高级的技术书籍。本书分为3个主要部分。第I部分讲解了贯穿全书的数学工具。第II部分涵盖了基本的Direct3D编程技术,比如初始化、...

    DirectX3D游戏编程指南

    过去,Direct3D的初始化一直是一件相当繁琐的工作。幸运的是,从DirectX 8.0起采用了一种简化的初始化模型,而且DirectX 9.0也遵从了...在您掌握了这些基础知识之后,本章的剩余部分将主要讲解Direct3D的初始化过程。

    DirectX 10 3D 游戏编程入门

    它涵盖了Direct3D与着色器编程的基础知识,读者在掌握这些内容之后,将有能力阅读更高级的技术书籍。本书分为3个主要部分。第I部分讲解了贯穿全书的数学工具。第II部分涵盖了基本的Direct3D编程技术,比如初始化、...

    Introduction to 3D Game Programming with DirectX9.0c A Shader Approach

    这本书介绍了Direct3D图形技术的基础算法,用一系列的demo向我们介绍了Direct3D编程的基础知识,是学习Direct3D最合适的入门书籍。

    DirectX9 3D游戏设计入门 英文版+中文版+源代码

    第Ⅱ部分 Direct3D基础 第1章 初始化Direct3D 1.1 Direct3D概述\t 1.2 COM(组件对象模型)\t 1.3 预备知识\t 1.4 Direct3D的初始化\t 1.5 例程:Direct3D的初始化 1.6 小结\t 第2章 绘制流水线\t 2.1 模型表示\t 2.2 ...

    精通DirectX.3D图形与动画程序设计.pdf

    第五部分是附录,包括学习direct3d之前所必须掌握的基础知识和directx sdk提供的各种工具的简要说明。  本书配套光盘提供了书中所有示例程序的可执行文件、工程文件和完整源代码,以方便读者编译、调试示例程序。 ...

Global site tag (gtag.js) - Google Analytics