2.2 Images with cTexture(图像和纹理)
纹理可以使3D图像有质量感。没。。。。用。。。。的。。。话。。
现在,有了cTexture的帮助,啊~~~世界变得美好了:
class cTexture { protected: cGraphics *m_Graphics; // cGraphics父类 IDirect3DTexture8 *m_Texture; // Texture COM(纹理接口) unsigned long m_Width, m_Height; // 纹理图象的尺寸
public: cTexture(); // 构造 ~cTexture(); // 析构函数 IDirect3DTexture8 *GetTextureCOM(); // 返回 纹理 COM //从文件读取纹理 BOOL Load(cGraphics *Graphics, char *Filename, / DWORD Transparent = 0, / D3DFORMAT Format = D3DFMT_UNKNOWN); // 从现有的IDirect3DTexture8中配置一个cTexture BOOL Create(cGraphics *Graphics, IDirect3DTexture8 *Texture); BOOL Free(); // 释放纹理对象 BOOL IsLoaded(); //如果纹理装在成功返回TRUE long GetWidth(); // Return width (pitch) of texture(返回纹理的宽) long GetHeight(); // Return height of texture(返回纹理) D3DFORMAT GetFormat(); //返回纹理存储格式 // 画一个2-D纹理图片 BOOL Blit(long DestX, long DestY, / long SrcX = 0, long SrcY = 0, / long Width = 0, long Height = 0, / float XScale = 1.0f, float YScale = 1.0f, / D3DCOLOR Color = 0xFFFFFFFF); }; |
一个cTexture类的纹理可以从两个途径获得:硬盘中的图像文件,已有IDirect3DTexture* 对象。如果你从硬盘获得,调用cTexture::Load,他只需要很少的参数就可以工作:首先是一个已经初始化过的cGraphics对象,再是文件的名字。
接下来的两个可选参数是透明(transparent)颜色键(color key)(如果你想使用透明像素纹理),和存储格式。透明(transeparent)参数的默认值0将告诉Load函数不使用透明像素。
倘若使用一个D3DCOLOR_RGBA就可以改变这个程序(请确定为alpha参数指定了一个255的值)
当使用Format(格式),使用Direct3D纹理格式比如D3DFMT_A1R5G5B5.要记住如果纹理要使用透明像素必须使用一个Alpha通道,所以要确定要使用例如D3DFMT_A1R5G5B5 或D3DFMT_A8R8G8B8的格式。
使用cGraphics::SetTexture函数与cTexture结合绘出纹理映射多边形。另一方面,如果你使用一个纹理对象的位图图像,可以直接使用cTexture::Blit绘出来,它使用了一个特殊的对象ID3DXSprite(俗称精灵)。
现在,我将介绍怎样使用Blit函数。要绘制图片你需要指定一个终点坐标,也是左上角的坐标,再加上宽、高,缩放比例,还有你想使用的颜色值。
这里有一个小例子:
// 指定 g_Graphics 是一个已经被初始化过的cGraphics 对象 cTexture Texture; Texture.Load(&g_Graphics, “texture.bmp”); // 在屏幕的(0,0)点绘出纹理 Texture.Blit(0,0); Texture.Free(); //释放纹理 |