首先说明一下,我是在windows mobile下用Direct3d mobile实现mobile下的3d效果的,现在我想问一下如何实现一幅图片的的淡入淡出效果(图片是先load到surface然后StretchRect到要渲染的TEXTURE上的 ),我知道最好的方法应该是用模板缓存技术。但对这个不太熟悉。希望达人指点,最好有些代码,这样容易理解,方便我一直到windows mobile上。谢谢!
解决方案 »
- 请问消息队列怎么传输结构体?
- anti-regmon
- 在VC中一个工作空间下的两个工程文件如何相互调用?
- 用过sqlite,懂得CppSQLite3Table 的请进,200分给你!
- 网上有boundschecker 7.1的限期使用版下载,有没有办法在过期后仍能使用?
- MFC使用ado连接数据库,还需要使用ODBC配置dsn吗
- *** 如何才能改变CTabCtrl的背景颜色?? ***
- 关于OCX 的修改!
- intel的ijl15l.lib没有下载了,谁有提供一个,不胜感激
- MFC如何集成视频解码程序?
- 请教:MFC菜单问题
- 急(只有这么多分)对话框上文本框 movewindow后,无法接收鼠标点击,也看不到光标,但tab键好使,按到文本框位置可以输入?非常奇怪
(*ppTexture)->LockRect( 0, &stLockedRect, 0, 0 );
UCHAR *pch=(UCHAR *)stLockedRect.pBits;
for (int j=0;j<h;j++)
{
for (int i=0;i<w;i++)
{
pch[3]=AlphaData[i+j*w];
if(pch[3]!=0)//pch[3] may by is -120
{
if(!mode)//3d ob static
{
if(alpha-AlphaData[i+j*w]+255>0)
{pch[3]=alpha-AlphaData[i+j*w]+255;}
else{pch[3]=0;}
}
else//3d fog static
{
if(AlphaData[i+j*w]-alpha>0)
{pch[3]=AlphaData[i+j*w]-alpha;}
else{pch[3]=0;}
}
}
pch+=4;
}
}
(*ppTexture)->UnlockRect(0);
设置纹理的alpha值,但d3d渲染还有相关的设置. //D3DRS_DITHERENABLE:使程序允许抖动,默认是FALSE。
m_pd3dDevice->SetRenderState( D3DRS_DITHERENABLE, TRUE );
// Turn on the zbuffer
m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );//激活深度缓冲区P157
m_pd3dDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_LESS );//设置深度深度函数P157
m_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);//允许应用程序在绘制像素时更新深度缓冲区;P158
// Turn off culling render mode
m_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );//设置整体环境光;P92
m_pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID );//D3DFILL_WIREFRAME//D3DFILL_SOLID渲染面模式;P168
m_pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD );
// Turn off D3D lighting
m_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );//激活对景物进行光照运算x
// Turn on ambient lighting
//D3DCOLOR ambientcolor=D3DCOLOR_XRGB(64,64,64);
//m_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff );
//激活多重采样;P173(除锯齿)
m_pd3dDevice->SetRenderState( D3DRS_MULTISAMPLEANTIALIAS, false );
// Set default render states
// 用于设置顶点与纹理混合
m_pd3dDevice->SetRenderState( D3DRS_NORMALIZENORMALS, TRUE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
//D3DSAMP_MINFILTER:缩小过滤器,用于纹理缩小时减少闪烁失真
//D3DSAMP_MAGFILTER:放大过滤器,用于纹理放大时,减少出现色块
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
//多级渐进纹理(用于设置各纹理层间的设置)
//D3DSAMP_MIPFILTER:设置多级渐进纹理过滤
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR );
//纹理拉伸(不复制纹理,作边缘像素的拉伸);P140
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP );