Direct-X学习笔记--纹理映射

本文介绍了DirectX中的纹理映射技术,用于提升3D物体的真实感。内容包括纹理映射的概念,如何定义和访问包含纹理坐标的顶点,以及如何创建和启用纹理。通过一个具体的例子展示了在立方体上应用纹理前后的效果,使得3D模型更具视觉吸引力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.介绍

之前学习了怎样绘制物体,还画了个DX自带的茶壶,然而这个东东并不怎么好看....离我们现实的物体简直相隔千里。只能说像美术他们用来写生的模型...那么要怎么样才能让我们的东西看起来更像真实的物体呢?这个就要用到今天学习的纹理映射技术了...

纹理映射(Texture Mapping),又称纹理贴图,是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。简单来说,就是把一幅图像贴到三维物体的表面上来增强真实感,可以和光照计算、图像混合等技术结合起来形成许多非常漂亮的效果。总之,纹理映射就是我们用一幅2D图片贴在3D物体上,让物体表面呈现为2D图片的样子,使物体看起来更加真实。

我们一般把纹理映射所使用的2D图像称作纹理贴图。Direct3D支持多种的纹理贴图,比如有.bmp、.dds、.dib、.png以及.tga等等,为了提高程序使用纹理的效率,通常使用边长为2的N次方幂的正方形图片。

介绍就这么多,开始动手。

二.过程

创建纹理贴图分为四个步骤:定点的定义,定点的访问,纹理的创建,纹理的启用

1.顶点的定义:

在使用定点缓存或者索引缓存绘图的时候,我们定义过定点,不过当时的定点是只包括了坐标和顶点的颜色,在这里,我们就不需要定义定点的颜色了,因为绘制物体的颜色会由纹理的颜色来确定。我们只需要在定义坐标的时候,再添加一个纹理坐标(u,v)即可。

struct stVertex
{
	float _x, _y, _z;		//位置坐标
	float _u, _v;			//纹理坐标

	stVertex(float x, float y, float z, float u, float v) : _x(x), _y(y), _z(z), _u(u), _v(v){}
	stVertex(){}
};
定义灵活顶点的格式:

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)
这样,我们的顶点格式就定义好啦!


2.顶点的访问:

与顶点缓冲绘图一样,定义过定点之后,需要给定点赋值,这次我们赋值坐标之后,还要给纹理坐标赋值:例如:

vertex[0] = stVertex(-10.0f,  10.0f, -10.0f, 0.0f, 0.0f);

当然,其他的步骤与之前一样,也需要锁住缓冲区再操作,然后还要解锁。


3.纹理的创建:

这里就是我们的新内容啦,创建纹理一般使用这么一个函数:D3DXCreateTextureFromFile

有三个参数,第一个为D3D设备接口指针,第二个为纹理图片的路径名,第三个为纹理的指针。

例如:

D3DXCreateTextureFromFile(g_pDevice, TEXT("texture.png"), &g_pTexture);


4.纹理的启用:

创建好了纹理,我们就可以在绘制的时候使用啦,使用纹理很简单,在绘制物体之前,使用SetTexture函数即可:

函数有两个参数,第一个为纹理是哪一层,我们知道,一共可以创建8层纹理,所以这个参数的取值就为0-7啦。第二个就是我们的纹理指针啦。

g_pDevice->SetTexture(0, g_pTexture);


三.例子

下面是一个完整的例子: 我们通过索引缓存绘图,绘制一个立方体:

没有加纹理之前是介个样子滴:

然后我们使用一个砖墙的纹理图片,加上纹理之后效果棒棒哒:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值