纹理操作

转载 2017年01月03日 14:34:30

纹理操作  

2010-05-27 18:24:03|  分类: DirectX 3D学习|举报|字号 订阅

在d3d8中,创建纹理的方法有: 
1、D3DXCreateTexture   ()   
2、D3DXCreateTextureFromFile   () 
3、D3DXCreateTextureFromFileEx   ()   
4、D3DXCreateTextureFromFileInMemory   ()   
5、D3DXCreateTextureFromFileInMemoryEx   ()   
6、D3DXCreateTextureFromResource   () 
7、D3DXCreateTextureFromResourceEx   ()   
其中只有第1种是可以用自定义的纹理图片的格式(要自己编写文件读取函数,大部分游戏都是自定义格式的,很少有人直接用bmp,tag,png等末经压缩的文件,容量大不说,而且容易被别人盗用),那么现在问题出现了,用函数D3DXCreateTexture   ()   创建纹理的方法如下: 

LPDIRECT3DDEVICE8 m_pd3dDevice; 
LPDIRECT3DTEXTURE8                                     pTexture; 

//其它初始化代码略,直接跳到创建纹理处 

//读取图象(这是我自定义的格式*.shp),Load_Image(...)函数是自己写的 
if   (!Load_Image(&image, "com280001.SHP ")) 
        return; 

HRESULT   hr; 
//创建纹理表面 
hr   =   D3DXCreateTexture(m_pd3dDevice,   image.m_Width,   image.m_Height,   0,   0,   D3DFMT_R5G6B5,   D3DPOOL_MANAGED,   &pTexture); 

if(FAILED(hr)) 

        MessageBox(NULL, "Cannot   create   texture! ", "ERROR ",MB_OK); 
        return; 


D3DSURFACE_DESC   pDesc; 
pTexture-> GetLevelDesc(0,   &pDesc   ); 

D3DLOCKED_RECT   d3dlr; 
//锁定纹理表面 
pTexture-> LockRect(   0,   &d3dlr,   0,   0   ); 
WORD   *   pDst   =   (WORD   *)d3dlr.pBits; 
int   DPitch   =   d3dlr.Pitch> > 1; 

//逐个象素扫描并写进纹理表面 
for   (int   y=0;   y <m_Height;   ++y){ 
        for   (int   x=0;   x <m_Width;   ++x) 
        {   
pDst[y*DPitch   +   x]   =   image.buffer[y*shp.width   +   x]; 
        } 

//解锁 
pTexture-> UnlockRect   (0); 
//释放图片占用的资源 
Unload_Image(&image); 

到这里纹理已成功创建了,但还有一个问题:如何设定颜色关键字(即colorkey)? 
用D3DXCreateTextureFromFileEx   ()   
或D3DXCreateTextureFromFileInMemoryEx   ()   
或D3DXCreateTextureFromResourceEx   () 
这些函数可以设定colorkey,但只能用指定的几种格式文件如bmp、tga等。 
象我这种用自定义的文件格式的话如何设定colorkey? 

 

colorkey其实是surface的属性,只不过大部分texture都只有一个surface,(cube,Mip有多个,但colorkey的设置一般也一样),所以D3DX中有一些简化的用法。 

要达到你的目标可以用IDirect3DTexture9::GetSurfaceLevel(0)获得第一个表面然后设置colorkey,或者你可以先在内存里把你的格式写成位图(反正都需要这一步),然后再用D3DXCreateTextureFromFileInMemoryEx   ()   。 

我可不是高手,说错了别介意。

 

//有一种笨方法: 
//创建两个纹理,一个用于显示,设为txture1,一个用于存放图片,设为texture2, 
LPDIRECT3DTEXTURE8         texture1; 
LPDIRECT3DTEXTURE8         texture2; 

//创建texture1(略)详细见上面,不过要注意象素格式不能设为R5G6B5,而是一定要带有alpha值的,否则ColorKey没有用。我用的是A1R5G5B5格式。 

//创建texture2并将图片载入texture2(略)详细见上面,象素格式必须对应你的图片象素的格式。我的图片象素格式是R5G6B5。 

//再创建两个表面:分别用来指向两个纹理的surface; 
LPDIRECT3DSURFACE8         surface1; 
LPDIRECT3DSURFACE8         surface2; 
//用来指向两个纹理的surface 
texture1-> GetSurfaceLevel(0,   &surface1); 
texture2-> GetSurfaceLevel(0,   &surface2); 

//然后用函数D3DXLoadSurfaceFromSurface()把surface2复制到surface1 
D3DXLoadSurfaceFromSurface(surface1, 
        NULL, 
        NULL, 
        surface2, 
        NULL, 
        NULL, 
        D3DX_DEFAULT, 
        ColorKey); 
//然后自己指定参数中的ColorKey,就可以在渲染中使用texture1了。贴出来的图片果然是背景透明。 


这是我想出的笨方法,谁有更好的方法的话,望指教!

举报

相关文章推荐

opengl纹理操作

我们在前一课中,学习了简单的像素操作,这意味着我们可以使用各种各样的BMP文件来丰富程序的显示效果,于是我们的OpenGL图形程序也不再像以前总是只显示几个多边形那样单调了。——但是这还不够。虽然我们...

Q96:PT(3.5):木纹纹理(Wood Texture)

该章节的内容理论参考: 《Advanced RenderMan》2000版本的12.4章节"Wood Grain"。 代码来自与《Ray Tracing from the Ground Up》作者按...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Photoshop纹理——三种路面纹理

一、砂岩效果 使用“纹理化”滤镜,直接生成砂岩效果的表面 效果如下: 二、粗糙的岩石表面 1、  设置前、背景色为默认的黑白色 2、  向当前图层应用“云彩”滤镜 3、  使用“基...

地形纹理制作

【所需工具】1.War3ModelEditor 2.BLP转换精灵 3.Photoshop 7.0以上版本 1】【地形纹理组成基础原理】了解这一步是关键的!如果原理看不懂,其他就不用看了~当然PS技术...

纹理

纹理的定义 纹理是一种普遍 存在的视 觉现象 , 人们 可以去 感受纹 理 ,却很难对纹理的精确 定义形 成统一 的认识 。 目 前尚无 一个被 广泛接受的纹理定义 。 一般认 为 , 纹理是图像...

关于cocos2d-x对etc1图片支持的分析

http://blog.csdn.net/langresser_king/article/details/9339313                &#...

OpenGL基本概念入门——纹理贴图

1. 创建纹理图像 OpenGL要求纹理的高度和宽度都必须是2的n次方大小,只有满足这个条件,这个纹理图片才是有效的。 一旦获取了像素值,我们就可以将这些数据传给OpenGL,让OpenGL...

OpenGL基本概念入门——纹理贴图2

3.2 纹理缠绕 前面提到,纹理坐标应位于0-1之间。那么当纹理坐标大于这个值会出现什么情况呢? 我们可以对OpenGL进行设置,以决定当纹理坐标不位于这一区间时应采取的操作。我们可以指定两种操作...

Android OpenGL ES 2.0绘图:绘制纹理

android使用openGL提供了特殊的view作为基础叫做GLSurfaceView。我们的view需要继承GLSurfaceView。纹理,在OpenGL中,可以理解为加载到显卡显存中的图片。 ...

个人理解的 纹理压缩

2. 压缩纹理的必要性 1)首先要说一下图像文件格式和纹理格式的区别。 常用的图像文件格式有BMP,TGA,JPG,GIF,PNG等; 常用的纹理格式有R5G6B5,A4R4G4B4,A1R5G5B5...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)