Direct3D程序设计基础

合集下载

第1章 初始化Direct3D

第1章 初始化Direct3D
5
显示更新窗口
ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd);
6
消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch( msg ) { case WM_DESTROY: PostQuitMessage(0); break; case WM_KEYDOWN: if( wParam == VK_ESCAPE ) DestroyWindow(hwnd); break; } return DefWindowProc(hwnd, msg, wParam, lParam);
Direct X 程序设计
1
第1章 初始化Direct3D
•Driect3D概述 •表面 •多重采样 •像素格式 •交换链和页面置换 •深度缓存 •顶点运算
2
Windows应用程序
• • • • • 创建窗口类 注册窗口类 创建窗口 显示更新窗口 进入消息循环
3
创建注册窗口类
WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(0, IDI_APPLICATION); wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = 0; wc.lpszClassName = "Direct3D9App"; if( !RegisterClass(&wc) ) { ::MessageBox(0, "RegisterClass() - FAILED", 0, 0); return false; }

Direct3D9初级教程

Direct3D9初级教程

//调用方法 IDirect3D9::CreateDevice 创建设备对象,并获取 //接口 IDirect3DDevice9 的指针,我们将通过该指针操作设备对象
m_pD3D->CreateDevice(
D3DADAPTER_DEFAULT, //使用缺省的显卡
D3DDEVTYPE_HAL,
//指定设备类型为 HAL
(D3DWnd.cpp) int CD3DWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) {
if (CWnd::OnCreate(lpCreateStruct) == -1) return -1;
InitD3D(); //初始化 Direct3D return 0; }
为类 CD3DWnd 添加下列成员: (D3DWnd.h)
... ... #include <d3d9.h> #include <d3dx9math.h> class CD3DWnd : public CWnd { protected:
LPDIRECT3D9 m_pD3D; //Direct3D 对象的接口指针 LPDIRECT3DDEVICE9 m_pDevice; //设备对象的接口指针 void InitD3D(); //该函数用于初始化 Direct3D ... ...
输入初始化函数 InitD3D 的代码: (D3DWnd.cpp)
void CD3DWnd::InitD3D() {
//创建 Direct3D 对象,并获取接口 IDirect3D9 的指针, //我们将通过该指针操作 Direct3D 对象。 m_pD3D = ::Direct3DCreate9(D3D_SDK_VERSION);

Direct3D编程(共26张)

Direct3D编程(共26张)
第6页,共26页。
点列Biblioteka 线列第7页,共26页。
线带
三角形列
三角形带
第8页,共26页。
三角形扇形
当用Direct3D编程时,我们使用4×4矩阵来进行矩阵变换
1. 世界变换 2. 视角变换 3. 投影变换
第9页,共26页。
基本思想:矩阵乘法
例如:让X沿着x轴平移10个单位 v = [2, 6, –3, 1],乘积vX = v’= [12, 6, –3, 1]。
第13页,共26页。
综合变换
TW=TS * TZ * TY * TX * TT
在Direct3D中,矩阵乘法(chéngfǎ)用函数D3DXMatrixMultiply实现
第14页,共26页。
确定观察者 需要三个量:
第15页,共26页。
确定后,以观察者为原点,视线为Z轴,上方向或它的一个分量为 Y轴(X轴可由左手法则得出),构成了视角坐标系
与世界变换相比,视角变换矩阵的获取只需调用一个函数
D3DXMatrixLookAtLH,其输入参数就是决定观察者的那三个量。
第16页,共26页。
透视投影变 换由四个量 决定:
第17页,共26页。
世界变换决定实体的位置; 视角变换决定观察者的位置; 投影变换决定观察者的可视区域。
第18页,共26页。
纹理也就是通常所说的贴图,它通过在三维的模型表面覆盖上 二维的图片,使实体更具有真实感
第24页,共26页。
3D MAX、Maya等三维软件进行辅助设计,通过这些软
件生成的实体模型不仅包括顶点的几何数据,还包括了 材质和纹理,习惯上把这些模型称之为Mesh。
第25页,共26页。
第26页,共26页。

Direct3D基础

Direct3D基础

第005课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.3 D3D中的颜色 2.1.3.2 D3DCOLORVALUE
1. D3DXCOLOR结构 D3DXCOLOR结构与D3DCOLORVALUE包含同样的数据成员,但是 提供了有用的构造函数与重载运算符,使颜色操纵更加方便.由于两种结 构数据成员相同,我们可以在两种结构间相互转化. typedef struct D3DXCOLOR //具体定义请参见DirectX SDK { #ifdef __cplusplus public: …… FLOAT r, g, b, a; } D3DXCOLOR, *LPD3DXCOLOR;
第005课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.3 D3D中的颜色 2.1.3.2 D3DCOLORVALUE 2. 颜色向量
由于D3DCOLORVALUE和D3DXCOLOR都有四个浮点数组 件,所以可以将颜色作为一种4维向量 (r, g, b, a).颜色向量可以 和普通向量一样进行相加减,进行缩放.点乘和叉乘对颜色向量 没有意义,但是组件之间乘法是有意义的.所以在D3DCOLOR 类中有"颜色——颜色"相乘的操作符.
我们将在一个离屏表面(即后台缓冲区)中进行描绘,当监视 器描绘完毕前台缓冲区中的内容后,我们将该前台缓存区换到交换 链的后面,而交换链中后面的后台缓冲区变为前台缓冲区.这个过 程称为Present(显示).
第005课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.4 页翻动与交换链
像素是指:图像在屏幕上显示的最小单元,即屏幕上的一个亮点. 它也指在frame buffer(颜色缓冲区)中的最小图形单元. 分辨率是指:显示设备所能显示的最大像素个数.例如:一个 分辨率为1024×768的显示屏能够显示水平方向1024个像素,垂直 方向768个像素,满屏显示1024×768 = 786432个像素.

Direct3D程序设计基础

Direct3D程序设计基础

Direct3D设备类型
1.
2.
3.
D3DDEVTYPE_HAL(Hardware Abstraction Layer 硬件提取层):代表一种高带的渲染过程,它尽量 通过显示硬件进行光栅化处理,坐标转换,照明 处理。 D3DDEVTYPE_REF(Reference Rasterizer Device 参考光栅设备):是当显示卡不支持某些硬件功能 时采取的一种替换策略,一般被用来测试显示卡 不支持的Direct3D功能。 D3DDEVTYPE_SW:是一种外挂的Direct3D设备, 用以支持第3方软件。
D3DDISKPLAYMODE d3ddm; …… if(FAILED(g_pD3D->GetAdapterDisplayMode (D3DADAPTER_DEFAULT, &d3ddm))) return E_FAIL;
创建Direct3D设备对象并得到接口
Direct3D设备定义了Direct3D的所有绘图 组件,绝大多数Direct3D操作都通过Direct3D 设备进行。调用IDirect3D9::CreateDevice()函 数创建Direct3D设备对象。
DWORD BehaivorFlags, //Direct3D设备进行3D的运算方式
D3DPRSENT_PARAMETERS* pPresentationParameters, //存储Direct3D设备相关信息的变量地址 IDirect3DDevice9* ppReturnedDeviceInterface //返回Direct3D设备接口指针的地址 );

有了HAL/插件式软件设备/参考设备这一系 列的方法,微软的Direct3D便可保证在缺少 3D硬件支持的环境中,仍可以使用同一套 API,也就是说,如果当前运行环境中无硬 件加速设备,即HAL不可用时,可考虑自己 编写插件式软件设备,再退一步,可以使 用参考设备,而无论使用哪种设备,操作 它们的API都是一样的。

Direct3D-6基础

Direct3D-6基础

第006课 Direct3D基础 课 基础 2.1 Direct3D中的基础概念
2.1.5 设备(Device)
举例:检查是否能够利用硬件设备进行顶点处理(即检查硬件是否支持变换 和光照计算):
在D3DCAPS9::DevCaps中包含D3DDEVCAPS_HWTRANSFORMANDLIGHT 数据位,则表示硬件支持变换和光照计算。DevCaps 指“设备能力(device capabilities)”。
第006课 Direct3D基础 课 基础 2.1 Direct3D中的基础概念
2.1.6 灵活顶点格式(Flexible Vertex Format (FVF))
灵活顶点格式是用来描述顶点属性的一种格式,这种格式可以由我 们自己来定义,这种方式使我们在图形绘制中只使用顶点必要的组成部 分,从而节省了大量的内存带宽和渲染时间 。 如果使用灵活顶点格式,必须以以下顺序来格式化所有的顶点:位 置,RHW,混合加权值,顶点法线,扩散颜色,反射颜色,纹理坐标集(1-8套)。
第006课 Direct3D基础 课 基础 2.1 Direct3D中的基础概念
2.1.7 图元类型
Direct3D中的图元类型一共有六种:点列,线列,线带,三角 形列,三角形带和三角形扇。 点列 线列 线带 三角形列 三角形带 三角形扇 D3DPT_POINTLIST D3DPT_LINELIST D3DPT_LINESTRIP D3DPT_TRIANGLELIST D3DPT_TRIANGLESTRIP D3DPT_TRIANGLEFAN 一组点的集合 一组线段的集合 首尾相连的线段的集合 一组三角形的集合 首尾相连的三角形,有 两个顶点重合 组成扇形的一组三角形
2.1.5 设备(Device)

Direct3D11教程1Direct3D11基础

在Direct3D 10中,设备同时用来绘制和资源的创建。在Direct3D 11中,立即执行上下文用于将内容绘制到缓存,而设备用于创建资源。
交换链即表示对缓冲的操作,这些缓冲就是设备绘制的和显示在屏幕上的内容。交换链包含两个或两个以上的缓冲,主要是前缓冲和后备缓冲,它们就是设备绘制形成的纹理,用于显示在屏幕上。前缓冲(front buffer)就是当前显示在屏幕上的内容,这个缓冲是只读的,无法修改。后备缓冲(back buffer)是设备将要绘制的渲染目标,一旦它完成了绘制操作,交换链就会通过交换前缓冲和后备缓冲,将后备缓冲的内容显示在屏幕上,此时后备缓冲就变成了前缓冲。
D3D_FEATURE_LEVELg_featureLevel =D3D_FEATURE_LEVEL_11_0;
ID3D11Device* g_pd3dDevice =NULL;
ID3D11DeviceContext* g_pImmediateContext =NULL;
IDXGISwapChain* g_pSwapChain =NULL;
要创建交换链,我们需要设置一个DXGI_SWAPCHAIN_DESC结构体说明将要创建的交换链。此结构体的几个字段需要说明一下:BackBufferUsage标志告诉程序我们使用后备缓冲的方式。本例中我们想绘制到后备缓冲,所以将BackBufferUsage设置为DXGI_USAGE_RENDER_TARGET_OUTPUT。OutputWindow字段表示交换链将使用的窗口,在这个窗口上我们显示图像。SampleDesc用来开启多重采样(multi-sampling),因为这个教程不使用多重采样,SampleDesc的Count设置为1,Quality设置为0,这样就禁用了多重采样。

3D编程基础知识(opengl)

3D编程基础知识(OpenGL)一、前言科学计算可视化、计算机动画、虚拟现实是计算机图形学领域内三大活跃的发展方向,它们的技术核心都是三维真实感图形。

而OpenGL就是这三维真实感图形的构造之一。

二、概述1、Direct3D & OpenGLDirect3D是Microsoft的DirectX其中的一个COM组件,目前最新版本是Direct9.0c;OpenGL最初由SGI开发,目前由OpenGL体系结构审核委员会(ARB)所维护。

OpenGL ARB 是个行业协会,负责OpenGL以及相关技术的发展和演变。

OpenGL ARB由下面这些计算机图形行业的领先企业所组成:3Dlabs、Apple、ATI、Dell、IBM、Intel、NVIDIA、SGI和Sun Microsystems。

最新的规范是2.0。

有两套实现,一套是SGI的OpenGL实现,一套是Microsoft 的OpenGL实现。

目前Microsoft的OpenGL只支持1.1规范。

Direct3D:1、适合做游戏开发。

DirectX是非常成熟的游戏开发的组件,辅助的功能库、数学库都很强大和成熟,如D3DX.lib中包含的大量辅助函数,而OpenGL没有这些相关的东西,它只专注于3d的渲染,辅助的东西不得不由第三方提供,或者自己开发...而且DirectX更新比较快。

2、Direct3D是面向对象的COM实现。

OpenGL只是一套面向结构的图形API。

3、OpenGL不支持一些低端显卡。

OpenGL:1、跨平台性。

可应用在Windows、OS/2、Unix、Max等系统上。

2、在光源和纹理的处理上性能比较优秀。

2、OpenGL的发展OpenGL(Open Graphics Library),开放图形程序接口。

1、1992年7月,SGI公司发布OpenGL1.0。

2、1995年,SGI发布OpenGL1.1 。

3、2001年8月,ARB发布OpenGL1.3规范。

Direct3D游戏编程基础函数查询笔记

1.初始化Direct3D1.Direct3DCreate9 (D3D_SDK_VERSION);获得IDirect3D9接口2.IDirect3D9::GetDeviceCaps()获得主显示设备的性能。

确认硬件顶点性能3.D3DPRESENT_PARAMETERS_ { } 填充一结构用来描述需要创建的IDirect3DDevice9接口的信4.IDirect3D9::CreateDevice( ) 创建IDirect3DDevice9接口第二章绘制流水线5.struct 类型+vertex ()定义顶点结构6.#define FVF_COLOR(| |)描述顶点的组成格式7.Device->SetTransform (D3DTS_WORLD, &worldMatrix);从本地空间向世界空间的变换,:8.D3DXMatrixTranslation ()计算几何物体变换矩阵9.D3DXMATRIX* D3DXMatrixLookAtLH()计算视图空间变换矩阵,,也是观察空间10.Device->SetRenderState (D3DRS_CULLMODE, Value);背面消隐11.D3DXMATRIX* D3DXMatrixPerspectiveFovLH () 根据视域体信息创建投影矩阵12.typedef struct _D3DVIEWPORT9 { } 定义视口结构13.Device->SetViewport ()设置视口大小14.15.第三章在Direct3D中绘制图形16.17.device->CreateVertexBuffer ( ) 创建一个顶点缓冲区18.device->CreateIndexBuffer ( ) 创建一个索引缓冲区:19.Look ()获得指向缓存的指针20.GetDesc (&变量); (变量类型D3DVERTEXBUFFER_DESC)得到顶点缓冲区信息21.GetDesc (&变量); (变量类型D3DINDEXBUFFER_DESC)得到索引缓冲区信息22.HRESULT IDirect3DDevice9::SetRenderState()设置渲染状态,也是绘制23.SetStreamSource () 设置数据流来源,,大意是将顶点缓冲区和数据流挂接到一起24._device->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);设置顶点的格式25._device->SetIndices(_ib); //传进来索引缓冲区的指针,设置索引缓冲区的代码26._device->BeginScene(); 开始绘制27.DrawPrimitive ()从顶点缓冲区绘制,,从顶点流中获取顶点信息28.DrawIndexedPrimitive ()从索引缓冲区绘制当前的索引缓冲区中获得索引信息。

D3D基础知识


第009课 Direct3D基础 2.1 Direct3D中的基础概念
2.1.11 渲染流水线
2.1.11.3 投影变换 2. 透视投影 下面的函数用于定义透视变换的矩阵: D3DXMATRIX *D3DXMatrixPerspectiveFovLH( D3DXMATRIX *pOut, //输出用于透视投影的变换矩阵 FLOAT fovY, //摄像机镜头的夹角(在y轴上的成像角度) FLOAT Aspect, //平截台体的纵横比 FLOAT zn, //近平截面的距离 FLOAT zf //远平截面的距离 ); 接下来,使用下面的函数来应用透视投影变换: g_pD3DDevice->SetTransform(D3DTS_PROJECTION, &matProj); g_pD3DDevice为有效的Direct3D设备指针 matProj代表一个投影变换矩阵。
网络游戏引擎实现
专业教程 理论讲解部分
Ver3.1
第009课 Direct3D基础
2.1 Direct3D中的基础概念
2.1.10 D3D中的空间
1.本地空间 本地空间(或者称为模型空间)指定义组成物体的三角形列表时所 使用的坐标系统。本地空间在简化模型处理工作上相当有用。 例如:本地空间中创建物体时,不需要考虑物体的位置、大小以及 与世界空间中其他物体的关系。 2.世界空间 在完成各种模型的创建后,所有的物体都只在相应的本地空间中, 需要把这些模型组合到一起,形成一个场景。这个统一的坐标系统所决 定的空间称为世界空间。 物体在世界空间里除了自身的属性外,更重要的是要考虑和其他物体 之间的位置关系等。
第009课 Direct3D基础
2.1 Direct3D中的基础概念
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

D3D的基本程序结构
1.创建一个Windows窗口
2.初始化Direct3D程序 3.处理消息循环
4.物体图形显示
5.结束Direct3D程序
D3D程序基本结构伪代码
#include<d3d9.h> Int WINAPI WinMain() { RegisterClass_Window_Class_and_create_a_window();//创建窗口 Initial_Direct3D_object();//初始化D3D While(Is_Running) { Handle_system_message(); if(message==painting) { render();//三维图形绘制 } } Release_Drirect3D_object();//释放D3D占用的资源 }
像素是指图像在屏幕上显示的最小单元, 即屏幕上的一个亮点。它亦指在frame buffer中的一个最小图形单元。
分辨率(Resolution)
分辨率是指显示设备所能显示 的最大像素个数。
颜色缓冲区(Frame Buffer)
颜色缓冲区是位系统内存或显示内存的一 块内存块,它对应于将要的一块二维显示 区域。图形绘制过程中,Direct3D完成坐标 变换、光照处理和纹理映射,将绘制结构 的值存储于颜色缓冲区中,最后通过图形 刷新,颜色缓冲区的内容被显示在屏幕上。
Direct3D设备类型
1.
2.
3.
D3DDEVTYPE_HAL(Hardware Abstraction Layer 硬件提取层):代表一种高带的渲染过程,它尽量 通过显示硬件进行光栅化处理,坐标转换,照明 处理。 D3DDEVTYPE_REF(Reference Rasterizer Device 参考光栅设备):是当显示卡不支持某些硬件功能 时采取的一种替换策略,一般被用来测试显示卡 不支持的Direct3D功能。 D3DDEVTYPE_SW:是一种外挂的Direct3D设备, 用以支持第3方软件。
*SDKVersion必须为D3D_SDK_VERSION。
创建D3D对象代码片段
LPDIRECT3D9* g_pD3D; …… g_pD3D=DirectCreate9(D3D_SDK_VERSION );
查询显示卡的显示模式
在创建Direct3D Device之前,要使 用GetAdapterDisplayMode()函数获得 计算机显示卡当前的显示模式信息。

前台缓冲区(front Buffer)和 后台缓冲区(Back Buffer)
大多数图形显示程序拥有2个颜色缓冲区, 我们将当前用于屏幕刷新的颜色缓冲区称为 前台缓冲区,而将用于图形䌊的其他颜色缓 冲区称为后台缓冲区。同时拥有前台缓冲区 和后台缓冲区的图形显示程序可以同时进行 图形绘制和屏幕刷新操作,系统运行性能优 于仅有单个颜色缓冲区图形显示程序。
DWORD BehaivorFlags, //Direct3D设备进行3D的运算方式
D3DPRSENT_PARAMETERS* pPresentationParameters, //存储Direct3D设备相关信息的变量地址 IDirect3DDevice9* ppReturnedDeviceInterface //返回Direct3D设备接口指针的地址 );
IDirect3D::CreateDevice()函数原型
HRESULT IDirect3D9::CreateDevice ( UINT Adapter, D3DDEVTYPE Devicetype, HWND hFocusWindow, //显示卡序号 //Direct3D设备类型 //所属窗口句柄
HAL设备


硬件抽象设备是主要的设备类型,它支持 硬件加速光栅化以及硬件和软件顶点处理。 如果运行Direct3D程序的计算机的显卡支持 Direct3D,那么Direct3D程序就会使用HAL 执行三维操作。Direct3D HAL设备通过硬件 来进行全部或部分坐标变换、光照和光栅 化处理模块。 在程序中不需要直接访问图形硬件,而是 通过HAL访问图形硬件,由HAL调用显卡驱 动程序的函数和方法。
视口(Viewport)
视口是一块二维的矩形区域,三维景物投影 为二维图形后,将绘制在这块矩形区域中。在 Direct3D中,视口定义了当前Direct3D绘制的目 标表面的矩形范围,绘制的图形坐标将被 转换 为相对于视口的坐标并绘制于视口中,一般以像 素为单位表示视口的长和宽。
像素(pixel)
软件参考层


Direct3D支持另外一种设备,称为参考设备或称为参 考光栅器。只有安装了SDK才会提供参考设备,当一 个应用程序在一台未安装SDK的机器上请示参考设备 时,会一个NULL参考设备。NULL参考设备什么也不 做,所有渲染操作的结果都将呈现一个黑屏。 不同于HAL设备和插件式软件设备,参考光栅器支持 所有的Direct3D特性,由于参考设备注重精确实现 Direct3D的所有特性,而不注重运行速度,并且参考 设备不支持硬件加速,所以使用参考设备绘制图形的 速度很慢,不管硬件是否支持,参考光栅器总是通过 CPU指令来绘制图形。使用参考设备的目的是为了测 试演示Direct3D的特性,例如,如果你想学习 Direct3D的某个高级特性,当前硬件又不支持,这时 就可以使用参考设备来测试和学习当前硬件不支持的 高级Direct3D特性。
D3DDISKPLAYMODE d3ddm; …… if(FAILED(g_pD3D->GetAdapterDisplayMode (D3DADAPTER_DEFAULT, &d3ddm))) return E_FAIL;
创建Direct3D设备对象并得到接口
Direct3D设备定义了Direct3D的所有绘图 组件,绝大多数Direct3D操作都通过Direct3D 设备进行。调用IDirect3D9::CreateDevice()函 数创建Direct3D设备对象。
#include <d3d9.h> LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; HRESULT InitD3D( HWND hWnd ) {if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL; D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) ) {return E_FAIL;} return S_OK;}
二、初始化Direct3D程序
在使用Direct3D绘制图形之前,必 须初始化Direct3D对象,包括创建并得 到一个Direct3D接口,并以此得到一个 Direct3D设备接口。
初始D3D的基本流程
1. 2.
3.
创建Direct3D对象并得到Direct3D接口 查询显示卡的显示模式 创建Direct3D设备对象并得到接口
GetAdapterDisplayMode函数原型
HRESULT IDirect3D9::GetAapterDisplayMode ( UINT Adapter,//显示卡序号 D3DDISPLAYMODE* pMode//存储返回模 //式信息值的指针 ); *如果查询当前桌面使用的显示卡Adapter赋值为: D3DADAPTER_DEAULT。
Direct3D程序设计基础
Win32应用程序
Win32应用程序
Direct3D API GDI HAL
设备驱动程序接口(DDI)
图形硬件
应用程序、Direct3D、GDI和HAL之间的关系
几个基本概念
硬件抽象层HAL
硬件抽象层是硬件制造商提供的特定于 硬件的接口,Direct3D利用该接口实现对显 示硬件的直接访问。就用程序永远不需要访 问HAL,Direct3D通过HAL提供的基础结构, 为程序员提供一套统一的接口和方法,用于 访问图形硬件。
D3DDISPLAYMODE结构定义:
typedef struct _D3DDISPLAYMODE { UINT Width;//屏幕宽度像素数 UINT Height;//屏幕高度像素数 RefreshRate;//屏幕刷新率 D3DFORMAT format;//屏幕显示像素格式。 }D3DDISPLAYMODE;
5、6、5格式
5、5、5格式 5、5、5格式,带一位透明度
D3DFMT_A4R4G4B4
D3DFMT_R3G3B2 D3DFMT_A8 D3DFMT_A8P8 D3DFMT_P8 D3DFMT_L8
4、4、4格式,带4位透明度
透明度 8位索引值,即256色模式。 8位亮度值,即灰度模式。
查询显示卡的显示模式代码片段
设备行为标志列表
BehaviorFlag值
D3DCREATE_FPU_PRESERVE
D3DCREATE_HARDWARE_VERTEXPROCESSING


激活双精度浮点运算或浮点运算异常 检测,设置该项会降低系统性能。 由Direct3D硬件进行顶点运算 由Direct3D硬件和软件共同进行顶点 运算。 支持多线程绘制,设置该项会降低系 统性能。 禁用Direct3D的Get*()函数,禁止 Direct3D使用虚拟设备模拟顶点运算。 由Diredt3D软件进行顶点运算。
相关文档
最新文档