DirectX SDK 2006学习笔记7——多重纹理和纹理混合

  Copyright © MikeFeng  QQ: 76848502
  多重纹理MultiTexture:使用多张纹理来渲染一个场景,只调用一次(DrawPrimitive)
  纹理混合TextureBlending:按要求混合在同一个位置的像素点上色彩或透明度
  在多重纹理(multitexturing)出现之前,DirectX支持的是多次渲染(multipass rendering)。但是因为OnFrameRender中要进行多次渲染(即Draw*的调用),效率很低。自从显卡开始支持多重纹理之后,游戏的性能得到了很大的提升:因为多重纹理只渲染一次,而在渲染之前通过调用SetTexture和SetTextureStageState函数来对不同的纹理进行混合,这个过程就叫做纹理混合(texture blending)。
  多重纹理在pixel shader出现之前有着广泛的应用,主要可以用在以下方面:
     黑暗映射:将两张纹理颜色相乘,模拟弱光照射
     纹理和材质漫反射的混合:模拟强光照射
     ①②效果累加:(光的颜色*墙壁纹理)*黑暗贴图
     发光映射:将两张纹理颜色相加
     细节映射
     Alpha操作,分为材质alpha和贴图alpha操作
 
 
  在执行多纹理操作之前必须对显卡能力进行检查,Caps中与纹理和alpha操作有关的是:
l          MaxSimultaneousTextures      多纹理最大支持数
l          DestBlendCaps                           alpha 混合
l          SrcBlendCaps                             对于源色彩混合的支持
l          TextureOpCaps                           对于各种纹理映射的支持
l          TextureAddressCaps                 对于寻址模式的支持
 
 
Example 1            Multipass Rendering + Material Alpha Blending
 
D3DX系列函数中有些是内建生成mesh的,例如D3DXCreateTeapot,就可以生成一个茶壶的mesh。Mesh俗称网格,在D3D中就是很多顶点定义的集合。D3DXCreateTeapot就可以生成一个茶壶顶点的集合。在以后的章节中会详细讲到mesh。在这里这样使用mesh就行了:
IDirect3DDevice9 * m_device;
ID3DXMesh * m_teapot
   V_RETURN ( D3DXCreateTeapot( m_device, &m_teapot, NULL) );
   m_teapot ->DrawSubset(NULL);
  这个例子中调用了两次Draw*,分别画背景和茶壶。背景类是一张纹理,渲染过程和以前类似。茶壶类如下:
class Teapot
{
public :
        Teapot (IDirect3DDevice9* device);
        HRESULT OnResetDevice ();
        VOID OnLostDevice ();
        VOID Create ();
        VOID OnFrameRender ( D3DMATERIAL9* mtrl, IDirect3DTexture9* tex );
        ~ Teapot ();
 
private :
        D3DMATERIAL9 m_mtrl ;
        IDirect3DDevice9 * m_device;
        ID3DXMesh * m_teapot;
};
 
Teapot ::Teapot(IDirect3DDevice9* device)
{
        m_device = device ;
}
 
Teapot ::~Teapot()
{
}
 
inline VOID Teapot ::Create()
{
        m_mtrl .Ambient = D3DXCOLOR(1,0,0,0);
        m_mtrl .Diffuse = D3DXCOLOR(1,0,0,0.3f);
        m_mtrl .Specular = D3DXCOLOR(1,0,0,0);
        m_mtrl .Emissive = D3DXCOLOR(1,0,0,0);
        m_mtrl
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值