第一范文网 - 专业文章范例文档资料分享平台

设定Direct X应用程序中的Direct 3D (3)

来源:用户分享 时间:2020-06-08 本文由小小的萌 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

DWORD DWORD DWORD WORD WORD DWORD D3DVALUE GUID WORD WORD DWORD DWORD DWORD DWORD DWORD

dwStencilCaps; dwFVFCaps; dwTextureOpCaps;

wMaxTextureBlendStages; wMaxSimultaneousTextures;

dwMaxActiveLights; dvMaxVertexW;

deviceGUID; wMaxUserClipPlanes; wMaxVertexBlendMatrices;

dwVertexProcessingCaps; dwReserved1; dwReserved2; dwReserved3; dwReserved4;

}D3DDEVICEDESC7,*LPD3DDEVICEDESC7;

这个结构的成员定义如下:

? dwDevCaps 包含了辨认装置特性的旗标。

? dpcLineCaps 和 dpcTriCaps D3DPRIMCAPS结构中定义该装置支持了画线和三

角形基本形状。

? dwDeviceRenderBitDepth 装置的绘制位深度(rendering bit depth)。本成员可能

是一个或多个DirectDraw位深度常数(如DDBD_8、DDBD_16、DDBD_24或DDBD_32)。

? dwDeviceZBufferBitDepth 代表装置的深度-缓冲区位深度,本成员可能是一个或

多个DirectDraw位深度(如DDBD_8、DDBD_16、DDBD_24或DDBD_32)。

? dwMinTextureWidth、dwMinTextureHeight 代表装置的最小贴图宽度和高度。

? dwMaxTextureWidth、dwMaxTextureHeight 代表装置的最大贴图宽度和高度。

? dwMaxTextureRepeat 包含了后正规化贴图索引(postnormalized texture

indices)的整数(非分数)位的全部范围。如果

D3DDEVCAPS_TEXREPEATNOTSCALEDBYSIZE位值被设定,装置会延迟贴图尺寸的缩放,一直套用到贴图地址模式为止。如果未设定时,装置会在内插前先依据贴图尺寸(细部的最大程度)去缩放贴图索引。

? dwMaxTextureAspectRatio 表示硬件支持的最大贴图比例;本值通常是2的幂方。

? dwMaxAnisotropy 代表D3DRENDERSTATE_ANISOTROPY绘图状态的最大有效

值。

? dvGuardBandLeft、dvGuardBandTop、dvGuardBandRight和

dvGuardBandBottom 定义监视guard-band裁切区域的屏幕空间坐标。落在此区块内但不在检视埠区内的坐标会自动被裁切。

? dvExtentsAdjust 要让延伸区向外扩展以容纳柔边核心时所需要调整的像素数目。

? dwStencilCaps 包含了哪些可支持屏蔽缓冲区(stencil-buffer)作业的旗标。

? dwFVFCaps 代表弹性顶点格式特性。

? dwTextureOpCaps 包含了各种旗标值的组合,这些旗标值是用来描述装置所支持

的贴图指令。

? wMaxTextureBlendStages 表示装置支持的最大贴图混合阶层(texture blending

stages)。

? wMaxSimultaneousTextures 表示可同时附加在装置的贴图连缩阶层上的贴图最大

值。

? dwMaxActiveLights 表示可以同时发生作用的最大光源数。

? dvMaxVertexW 表示装置可支持的最大w深度值。

? deviceGUID 表示可辨识该装置的GUID。

? wMaxUserClipPlanes 表示装置支持的使用者定义裁切面的最大值。这个成员的范

围值可以从0到D3DMAXUSERCLIPPLANES。利用

IDirect3DDevice7::GetClipPlane和IDirect3DDevice7::SetClipPlane方法可以控制

使用者定义裁切面。

? wMaxVertexBlendMatrices 表示当执行多矩阵顶点混色(multimatrix vertex

blending)时,装置可以应用的最多矩阵数目。

? dwVertexProcessingCaps 表示装置的顶点处理。

? dwReserved1 到 dwReserved4 保留用途。

您可以看得出来,这里提供了许多的特性。您必须依您的程序需求决定要检查哪些项目。不过,您应该尽可能地多运用他们,以创造出更真实的3D环境。举例来说,本书所提到的RoadRage程序用到了烟雾和α混色来提供尽可能真实的成像和动态3D世界。 您也需要提供使用者管道来挑选其它可用的装置(或模式),这样他/她才能去改变初始的默认值(例如,RGB vs. HAL;全屏幕vs. 窗口模式;一个较低分辨率模式,如800×600 vs. 640×480;等等)。

以下的程序会去处理当使用者从 File 菜单选择「改变装置/模式」的动作。它产生一个对话盒包括了可用的装置和模式,允许使用者挑选想要的装置和模式,并且切换过去。这里是一些需要加入档案d3dapp.cpp中的CD3DApplication::MsgProc成员函式的程序代码,来处理使用者选择菜单的动作:

case IDM_CHANGEDEVICE: }

return 0;

//显示「选择装置」的对话盒 if (m_bActive &&m_bReady) { { }

Pause(FALSE);

if(FAILED(hr =Change3DEnvironment())) return 0;

Pause(TRUE); if

(SUCCEEDED(D3DEnum_UserChangeDevice(&m_pDeviceInfo)))

图4-1表示在选择一个新装置或模式时,程序会产生一个下拉式菜单。

图4-1 选择新装置或模式

图4-2则是当使用者作了选择之后程序所产生的对话盒。使用者可以挑选想要的装置(例如,主要装置或是其它辅助装置)和模式。

图4-2 Change Device对话盒

本章中新增到CD3DApplication::MsgProc成员函式中的新case指令,会去呼叫D3DEnum_UserChangeDevice来产生一个对话盒显示所有系统可用的装置和模式,并且可让使用者挑选一个新的。参考上面的图,对话盒的上方会有一个清单方块列出每一个装置,而对话盒的下方会有一个清单方块列出所有模式。 D3DEnum_UserChangeDevice程序如下:

//-------------------------------------------------------------------

//名称:D3DEnum_UserChangeDevice //说明:跳出一个对话盒让使用者选择 // ---

HRESULT D3DEnum_UserChangeDevice(D3DEnum_DeviceInfo**ppDevice)

新装置

//----------------------------------------------------------------

{ }

这个程序会呼叫Windows DialogBoxParam函式,并从您所指定的对话盒范本资源中 建立一个典型的对话盒。它会用到一个回传函式在lpDialogFunc参数中。除非回传函式呼叫EndDialog函式来终止这个典型的对话盒,否则这个典型的对话盒不会传回控制权。呼叫DialogBoxParam时所指定的ChangeDeviceProc回传会处理在这个装置选择对话盒中的所有Windows讯息。

if(IDOK ==DialogBoxParam((HINSTANCE)GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_CHANGEDEVICE), GetForegroundWindow(),

return S_OK;

ChangeDeviceProc,(LPARAM)ppDevice)) return E_FAIL;

//-------------------------------------------------------------------

//名称:ChangeDeviceProc

//说明:「选择装置」对话盒的Windows讯息处理函式 //

//-------------------------------------------------------------------

static BOOL CALLBACK ChangeDeviceProc(HWND hDlg,UINT uiMsg, WPARAM wParam,LPARAM lParam) {

//取得对列举装置清单的存取权 D3DEnum_DeviceInfo*pDeviceList; DWORD dwNumDevices;

D3DEnum_GetDevices(&pDeviceList,&dwNumDevices); static D3DEnum_DeviceInfo**ppDeviceArg; static D3DEnum_DeviceInfo*pCurrentDevice; static DWORD dwCurrentMode; static BOOL bCurrentWindowed; static BOOL bCurrentStereo;

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新IT计算机设定Direct X应用程序中的Direct 3D (3)全文阅读和word下载服务。

设定Direct X应用程序中的Direct 3D (3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1076593.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top