Direct Graphics的初始化

    在Direct7.0之前,绘图引擎分成DirectDraw与Direct3D,而Direct8.0则针对游戏3D化而将DirectDraw与Direct3D合并,取名为Direct Graphics,专门用来处理绘图影像以及利

用3D命令的硬件加速特性来发展更强大的API函数。
    首先,要建立一个Direct Graphics环境,先要规划一个程序框架,可以定义一个类,来存放所有与之有关的东东。
    首先,我们要创建界面来源和主要设备,先在类成员中加上
    LPDIRECTD9 d3d_3D;
    LPDIRECT3DDEVICE9 d3d_Device;
    前者作为其他Direct Graphics界面的来源,而后者则是通知硬件做影像处理的主要设备,因此他们的初始化是相当重要的。

    我们先来看看d3d_3D的初始化工作。以下就是创建用的函数:
    IDirect3D9 * Direct3DCreate9(
       UINT SDKVersion
    );
    一般,应把创建过程写成d3d_3D = Direct3DCreate9(D3D_SDK_VERSION);它的参数没有其他特别的作用,只是为了保证头文件的版本与动态联结库中的相匹配。

    再来看看d3d_Device的初始化过程,首先,我们先来了解两个结构,定义如下:
    (1)typedef struct D3DDISPLAYMODE {
            UINT Width;  //屏幕宽度
            UINT Height; //屏幕高度
            UINT RefreshRate;  //屏幕刷新率
            D3DFORMAT Format;  //用来表述当前层的显示模式版本
         }D3DDISPLAYMODE, *LPD3DDISPLAYMODE;
     我们可以通过d3d_3D的GetAdapterDisplayMode方法来获取(具体参数见帮助),它在创建主设备时会用到。
    (2)typedef struct D3DPRESENT_PARAMETERS {
             UINT BackBufferWidth, BackBufferHeight;//后备缓冲交换链的高度与宽度,以像素为单位(有两种情况,注意看帮助)
             D3DFORMAT BackBufferFormat;            //必须是一个证实有效的渲染对象的格式,(具体见帮助,注意可以获取D3DDISPLAYMODE来定义)
             UINT BackBufferCount;                  //后备缓冲的数量
             D3DMULTISAMPLE_TYPE MultiSampleType;   //Multisampling is supported only if the swap effect is D3DSWAPEFFECT_DISCARD
             DWORD MultiSampleQuality;              //质量等级
             D3DSWAPEFFECT SwapEffect;              //用来定义后备缓冲交换链的方式
             HWND hDeviceWindow;                    //窗体句柄,可以看作当前活动的窗口
             BOOL Windowed;                         //是否全屏幕
             BOOL EnableAutoDepthStencil;           //是否用多个缓冲链
             D3DFORMAT AutoDepthStencilFormat;      //缓冲链的格式
             DWORD Flags;                           //
             UINT FullScreen_RefreshRateInHz;
             UINT PresentationInterval;
         } D3DPRESENT_PARAMETERS, *LPD3DPRESENT_PARAMETERS;
         我们需要直接对它进行设置,是作为创建主设备的输入参数而存在的,它定义了表现用的一系列参数。
    
      接下来我们看看如何创建主设备,假设我们要创建的设备是一个窗口程序,使用缓冲链,且可以锁定缓冲区进行绘图操作,创建方式如下:
      D3DDISPLAYMODE d3ddm;
      if(d3d_3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm) != D3D_OK)
          return 0;

      D3DPRESENT_PARAMETERS d3dpp;
      memset(&d3dpp, 0 ,sizeof(d3dpp));
      d3dpp.Windowed = Iswindow;
      d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
      d3dpp.BackBufferFormat = d3ddm.Format;
      d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
      d3dpp.EnableAutoDepthStencil = TRUE;
      d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
      if(this->d3d_3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
          hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3d_Device) != D3D_OK)
          return 0;

      到这里,Direct Graphics的初始化工作就算告一段落了。


 

诺基亚Java用户界面API程序员指南 Contents 1 简介................ 4 1.1 目的......... 4 1.2 参考文献.. 5 2 用户界面扩展.. 6 2.1 全屏画布.. 6 2.2 绘制和填充三角形及多边形...................................................................................................... 7 2.3 绘制反转及旋转图片................................................................................................................ 8 2.4 透明支持.. 9 2.5 创建可变图片的特别方法....................................................................................................... 10 2.6 对图片象素数据的底层访问.................................................................................................... 12 3 声音扩展....... 14 3.1 播放单音14 3.2 播放简单曲调......................................................................................................................... 15 3.3 音调状态模型和SoundListeners............................................................................................ 16 3.4 音量设置17 4 振动和屏幕背景灯光控制.............................................................................................................. 18 4.1 控制振动18 4.2 控制屏幕背景灯光.................................................................................................................. 19 4.3 闪烁灯.... 19 4.4 用户选项20 本程序员指南讲述如何使用诺基亚Java 用户界面 API 。诺基亚用户界面 API 是标准的移动 信息设备描述(Mobile Information Device Profile ,MIDP )API (请参阅 [MIDP])的扩 展,它在诺基亚支持MIDP-1.0 的电话中实现。 MIDP 1.0 的设计目的是实现最大可移植性并集中关注可在所有侯选设备上实现的那些性能。 其中有些设备没有声音功能,因此MIDP 1.0 规范去除了声音特性。有些设备仅具备非常有 限的图形功能,所以MIDP 1.0 也去除了一些诸如透明性那样的高级图形功能。由于这种策 略,MIDP 1.0 可以适用范围广泛的各种设备,并能实施很多用途广泛的应用。 诺基亚电话具有声音功能,也具备较好的图形功能,所以我们把诺基亚Java 用户界面 API 介绍给MIDlet 开发伙伴,使他们能利用这些功能。未来版本的标准MIDP 可望涉及这些功 能。 诺基亚用户界面 API 提供的下列特性是非常重要的,对于各种游戏尤其重要: •支持实现图形的完全透明(使得非矩形子图的实现成为可能) •播放简单的音调 诺基亚Java 用户界面 API 由两个全新包组成,其中包括四个类及两个接口: •package com.nokia.mid.ui •classes FullCanvas , DirectUtils, and DeviceControl •interface DirectGraphics •package com.nokia.mid.sound •class Sound •interface SoundListener
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值