第三章渲染2D精灵

(译者语录: 原文里面使用CreateOffscreenPlainSurface生成一个离屏的页面, 然后用loadSurface载入我们需要的2D图片, 然后再将其贴到离屏页面上去的. 但是这种方法有一个缺点, 就是不支持关键色的选取, 还有就是不支持alpha通道. 所以我不打算在这里介绍原书里面的方法去渲染2D图片, 而是改用D3DXSprite来完成我们的工作.)

使用DirectX9来渲染2D图片并不是一件困难的事情. 本章中我们将会学习一下如果载入一副图片并在不同的位置, 用不同的透明度, 以不同的大小在屏幕上面显示这副图片.

本章包含的主题有:

我们为什么需要在Direct3D里面渲染2D图片?
生成我们的2D精灵类
利用我们的2D精灵类在屏幕上面显示一些图片


DirectX可以用离屏页面处理2D图片的渲染工作, 但是正如前面所说这种方法限制多多, 幸运的是DirectX还提供了2D精灵来完成这一项任务. 我们可以生成一个2D精灵的对象实例, 载入图片到精灵的纹理中, 并在需要的时候利用精灵设备在后台缓存器里面渲染我们的图片. 当渲染的工作完成之后, 缓存区将会被显示在屏幕上面, 我们的图片也会在我们希望的位置显示出来. 在渲染2D图片的时候你需要注意两件事情,一是当渲染多幅图片的时候, 如果有两幅图片的位置有所重叠, 那么后渲染的图片可能会覆盖遮住前一副被渲染的图片, 所以选择图片渲染的的顺序是非常重要的. 第二件事情就是超出缓存矩形区域部分的图片是不会显示在屏幕上面的. 这将意味着如果你的精灵图片如果和屏幕的边框重合了的花, 你图片某些部分将不会被显示出来, 除非你调整了目标矩形区域的大小已使它们不再重合.

让我们先从第三章的代码里面来看看Sprite类. Sprite类的头文件和你在前一章里面看到的那些个头文件是一样的. 它包含了类的定义, 函数和私有变量的声明定义. 所以我将不会再次把头文件的内容打印出来, 除非我们需要运用一些新的概念. 我建议大家先看看头文件的内容, 如果你想要继续下面的学习, 将类的头文件拷贝并复制到头文件夹里面去并不是一件难为情的事情, 毕竟里面有的只是对变量和函数的定义和声明而已. 我同样将跳过构造函数和析构函数, 因为对于我们所编写的所有的类, 他们的任务和功能都是完全想同的. 那就是在使用对象前清空我们的对象, 并在使用完以后之后将这些内存释放.

首先我们看到的函数便是负责载入图片的函数loadSprite. loadSprite有两个参量, 我们的设备对象和想要载入的图片文件地址. 首先我们在loadSprite里面调用D3DXCreateSprite来生成一个2D精灵. D3DXCreateSprite需要两个参数, 第一个是我们的D3D设备对象实例, 2D精灵便是由这个设备生成的, 第二个是指向我们的2D精灵的指针, 函数调用成功以后生成的2D精灵便是存放在这个地址里面的. 接下来的是一个D3DXIMAGE_INFO类型临时变量imageInfo, 用来在载入图片的时候记录图片的一些基本信息, 如高和宽. 下面最最重要的一个环节便是调用函数D3DXCreateTextureFromFileEx从我们指定的地址载入图片. D3DXCreateTextureFromFileEx有14个参数, 第十一个参数是颜色关键值, 此值所指定的颜色在我们载入图片时将会被透明色所取代, 第十二个参数是我们用来存放图片信息变量的地址, 最后一个参数是一个指向D3D纹理的指针, 这个指针所指向的D3D纹理就是我们调用的函数所生成的用来存放被载入的图片. 我们用hr记录函数的返回值, 如果载入图片失败, 在l

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值