高级纹理技术

 1:DirectX最多支持8重纹理 索引号:0-7

2:第一层默认为D3DTOP_MODULATE,其余为D3DTOP_DISABLE.
3:逐次使用,在前一层使用以后才可启用下一层。必须安装0-1-2-3-4-5-6

-7的顺序。
4:纹理混合是阶段混合,即0和1混合后的结果再和2混合。
5:SetTextureStageState()
6:查询是否支持纹理混合以及支持几层。
if( pCaps->MaxTextureBlendStages <= 1)
   return false;
7:设置并关联纹理层
定义:
LPDIRECT3DVERTEXBUFFER9    g_pVB       = NULL;
LPDIRECT3DTEXTURE9         g_pTexture1 = NULL;      //第一层纹理
LPDIRECT3DTEXTURE9         g_pTexture2 = NULL;      //第二层纹理
创建: D3DXCreateTextureFromFile( pd3dDevice, L"Wall.bmp",

&g_pTexture1 );
          D3DXCreateTextureFromFile( pd3dDevice, L"light.jpg",

&g_pTexture2 );
关联:
       pd3dDevice->SetTexture( 0, g_pTexture1 );
       pd3dDevice->SetTexture( 1, g_pTexture2 );
8:设置纹理坐标索引
如果需要使用不同的纹理坐标,在顶点格式中包含多组坐标。
pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX,   0 );
pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX,   1 );
// 定义顶点结构和灵活顶点格式
struct CUSTOMVERTEX
{
FLOAT x, y, z;     // 未经过坐标转换的顶点坐标
DWORD color;       // 顶点漫反射颜色值
FLOAT u,v ;     // 顶点纹理坐标
FLOAT u1,v1 ;    // 顶点纹理坐标
};
9:设置纹理混合
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,  

D3DTOP_MODULATE );//将下面的纹理层贴图和漫反射颜色相乘
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1,

D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2,

D3DTA_DIFFUSE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,  

D3DTOP_DISABLE );//禁用0层和1层Alpha通道混合
pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER,

D3DTEXF_LINEAR);//设置线性过滤
pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER,

D3DTEXF_LINEAR);
pd3dDevice->SetTexture( 1, g_pTexture2 );
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP,  

D3DTOP_ADD);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1,

D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2,

D3DTA_CURRENT);
pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP,  

D3DTOP_DISABLE );
pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX,

1 );
pd3dDevice->SetSamplerState(1, D3DSAMP_MAGFILTER,

D3DTEXF_LINEAR);
pd3dDevice->SetSamplerState(1, D3DSAMP_MINFILTER,

D3DTEXF_LINEAR);

D3DTSS_COLORARG1:默认为D3DTA_TEXTURE,即纹理颜色
D3DTSS_COLORARG2:默认为D3DTA_CURRENT,即前一纹理层的输出颜色。当

Stage参数为0时,值为D3DTA_DIFFUSE,像素漫反射颜色值。
D3DTSS_ALPHAARG1:默认为D3DTA_TEXTURE
D3DTSS_ALPHAARG2:默认为D3DTA_CURRENT,Stage参数为0时,值为

D3DTA_DIFFUSE,像素漫反射颜色值
ALPHA混合和颜色混合是分别处理的。
10:OnDestroyDevice中:
        SAFE_RELEASE(g_pVB);
SAFE_RELEASE(g_pTexture1);
SAFE_RELEASE(g_pTexture2);
11:渲染
pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
   pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
   pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0,

2);

内容概要:本文档详细介绍了基于事件触发扩展状态观测器(ESO)的分布式非线性车辆队列控制系统的实现。该系统由N+1辆车组成(1个领头车和N个跟随车),每辆车具有非线性动力学模型,考虑了空气阻力、滚动阻力等非线性因素及参数不确定性和外部扰动。通过事件触发ESO估计总扰动,基于动态面控制方法设计分布式控制律,并引入事件触发机制以减少通信和计算负担。系统还包含仿真主循环、结果可视化等功能模块。该实现严格遵循论文所述方法,验证了观测误差有界性、间距误差收敛性等核心结论。 适合人群:具备一定编程基础,对非线性系统控制、事件触发机制、扩展状态观测器等有一定了解的研发人员和研究人员。 使用场景及目标:①研究分布式非线性车辆队列控制系统的理论与实现;②理解事件触发机制如何减少通信和计算负担;③掌握扩展状态观测器在非线性系统中的应用;④学习动态面控制方法的设计与实现。 其他说明:本文档不仅提供了详细的代码实现,还对每个模块进行了深入解析,包括非线性建模优势、ESO核心优势、动态面控制与传统反步法对比、事件触发机制优化等方面。此外,文档还实现了论文中的稳定性分析,通过数值仿真验证了论文的核心结论,确保了系统的稳定性和有效性。建议读者在学习过程中结合代码进行实践,并关注各个模块之间的联系与相互作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值