zoukankan      html  css  js  c++  java
  • DirectX9.0教程之ID3DXSprite篇[转载]

    前言:本教程面向对DriectX 9.0有一定了解的读者,主要讲解DirectX 9.0的各个部分的功能及用法。希望对广大的游戏初学者有一定帮助,也好让本人对中国游戏事业的发展做出一些微不足道的贡献。作者:Fabric(由于本人是广东人,写文章难免参杂粤语写法,请见谅)

      简介:ID3DXSpriteDriectX 9.0里面的一个简单模块,在DriectX 9.0帮助文档里面对其功能的描术为:向用户提供一套简单的在屏幕上实现精灵渲染的接口。何为精灵渲染,说白了就是渲染2D画面,ID3DXSprite帮助用户透过简单的操作就能运用DriectX 9.0制作2D游戏(渲染2D图形),ID3DXSprite的功能还包括:帮助用户在3D游戏里面实现公告牌技术。下面,将对如何使用ID3DXSprite作详细分折。

      得到一个ID3DXSprite对像:玩过DriectX的人都知道,干什么前都得先取得一个实例对像,其实只要简单调用D3DX为我们提供的一个函数就可完成:

    HRESULT D3DXCreateSprite( 
    LPDIRECT3DDEVICE9 pDevice, 
    LPD3DXSPRITE * ppSprite 
    ) 
    这个函数如何调用,不用我解释了吧,碰过DriectX的人都应该知道他里面的意思。 
     
    渲染准备:DirectX 9.0规定,运用ID3DXSprite渲染2D图形前,应先调用ID3DXSprite::Begin做准备工作,在渲染工作完成之后,调用ID3DXSprite::End做善后工作。格式如下: 

    g_pSprite->Begin(NULL);

    //渲染代码部分。。。。

    g_pSprite->End();

    其中,ID3DXSprite::Begin接收一个参数,该参数将决定精灵以什么方式进行渲染,该参数可以为以下值之一:

    ·   D3DXSPRITE_ALPHABLEND

    ·   D3DXSPRITE_BILLBOARD

    ·   D3DXSPRITE_DONOTMODIFY_RENDERSTATE

    ·   D3DXSPRITE_DONOTSAVESTATE

    ·   D3DXSPRITE_OBJECTSPACE

    ·   D3DXSPRITE_SORT_DEPTH_BACKTOFRONT

    ·   D3DXSPRITE_SORT_DEPTH_FRONTTOBACK

    ·   D3DXSPRITE_SORT_TEXTURE

    上面的标志可以合并使用,标志意思可以从其名字中略知一二,而具体用法,后面将在运用到的时候加以介绍

     

    渲染:运用ID3DXSprite渲染2D图形其实好简单,只需调用ID3DXSprite::Draw接口,该接口原型如下:

    HRESULT Draw(

    LPDIRECT3DTEXTURE9 pTexture,

    CONST RECT * pSrcRect,

    CONST D3DXVECTOR3 * pCenter,

    CONST D3DXVECTOR3 * pPosition,

    D3DCOLOR Color

    );

    其中 参数一为精灵所用到的纹理。

    参数二为要渲染的纹理矩形区域,意思上就像DirectDraw中所说的原位图矩形(指明要将纹理的哪一部分渲染到屏幕上)

    参数三要求传入纹理的中心点坐标,如果传入NULL则表明使用默认值,默认值为将纹理的左上角设为中心点。中心点的设定将关系到日后对精灵进行位移,旋转的效果

    参数四为精灵在屏幕上的渲染位置,如要在屏幕的(100,100)像素位置渲染精灵,则应传入&D3DXVECTOR3(100.0f, 100.0f, 0.0f),其实参数三加参数四可以简单的理解为DirectDraw中所说的目的地矩形

    参数五要求传入一个32位颜色值,在渲染时,纹理上的每一个像素的颜色值将与其进行相乘,得到最后的渲染颜色,如传入0x00000000,相乘后颜色值将为0,所以精灵将以全黑色渲染,这个参数还有一个用处,就是控制精灵的透明值:当用户在调用ID3DXSprite::Begin时传入D3DXSPRITE_ALPHABLEND标志,则表明打开精灵透明渲染功能,此时参数五的高8位用于指明渲染的透明度,例如:要完全不透明的渲染图像,应传入0xffffffff,要完全透明的渲染图像,应传入0x00ffffff

     

    精灵位移,缩放,旋转等处理:可以通过调用ID3DXSprite::SetTransform实现,此接口要求传入一个变换矩阵,注意:这里的变换矩阵指的是变换2D平面上的坐标,而非我们平时常用的3D变换矩阵,2D平面变换矩阵应该调用函数D3DXMatrixTransformation2D得到,该函数的使用方法请参照DirectX9.0帮助文件。

     

    下面附上部分代码,大概实现效果为:在屏幕的(100,100)坐标处渲染一个2D精灵,该精灵被缩小为原来的十分之一,并附带0.5孤度的旋转,透明度为60%左右

     

    //初始化精灵对像

    D3DXCreateSprite(g_pDevice, &g_pSprite);

     

    g_pDevice->BeginScene();

     

         g_pDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL,

             D3DCOLOR_XRGB(0,0,0),1.0f,0L);

     

    g_pSprite->Begin(D3DXSPRITE_ALPHABLEND);

     

         //得到2D坐标转换矩阵

         D3DXMatrixTransformation2D(&mat, NULL, 0.0f, &D3DXVECTOR2(0.1f, 0.1f),

             &D3DXVECTOR2(50.0f, 50.0f), 0.5f, &D3DXVECTOR2(100.0f, 100.0f));

         g_pSprite->SetTransform(&mat);

     

         //渲染精灵

         g_pSprite->Draw(g_ptexSprite, NULL, NULL, NULL, 0x99ffffff);

     

    g_pSprite->End();

     

    g_pDevice->EndScene();

     

    g_pDevice->Present(NULL, NULL, NULL, NULL);

  • 相关阅读:
    解决克隆后eth0不见的问题
    mysql自关联插入数据-级联地区
    java运行时接收参数
    python 安装lxml
    python安装pip
    cv 景深
    cv 计算机视觉研究现状
    CV 光流场计算1( area correlation optical flow)
    cv 纹理
    cv 灰阶分割
  • 原文地址:https://www.cnblogs.com/wonderKK/p/2240379.html
Copyright © 2011-2022 走看看