DX 一些设置大集合

鉴于DX里头的设置太多了,决定做个大集合,以后有看到的就加进来。

==============================================

1 渲染状态:

==============================================

HRESULT IDirect3DDevice9::SetRenderState(

D3DRENDERSTATETYPE State, // 更改的渲染状态

DWORD Value // 新的状态值

);

 

通用:

填充模式(线框):D3DRS_FILLMODE —- (D3DFILL_WIREFRAME 线框 D3DFILL_SOLID 普通模式)

 

色彩:

着色处理:D3DRS_SHADEMODE —- (D3DSHADE_FLAT  平面着色 D3DSHADE_GOURAUD 高洛德 )

混合像素:D3DRS_ALPHABLENDENABLE —- true/false

模板缓存:D3DRS_STENCILENABLE —-  true/false

 

灯光:

镜面光的开关: D3DRS_SPECULARENABLE —-  true/false;

 

 

===============================================

2 指定Alpha资源:

===============================================

// compute alpha from diffuse colors during shading

Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);

Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);

// take alpha from alpha channel

Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);

Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);

Tag 标签:

关于CEGUI渲染状态的恢复

        CEGUI在渲染完了之后,会更改DX的渲染状态,但是并不会恢复过来,于是如果此时再用DX渲染的话,就会出现混乱了,网上看了很多,但是写的都不对,这里是经本人测试切实可用的代码,其中CEGUI 版本为0.7.1

	// Revert RenderState 
	m_pDirect3DDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
	m_pDirect3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );
	m_pDirect3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
	m_pDirect3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
	m_pDirect3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);

	m_pDirect3DDevice->SetTextureStageState( 0 , D3DTSS_COLORARG1, D3DTA_TEXTURE );
	m_pDirect3DDevice->SetTextureStageState( 0 , D3DTSS_COLORARG2, D3DTA_DIFFUSE );
	m_pDirect3DDevice->SetTextureStageState( 0 , D3DTSS_COLOROP, D3DTOP_SELECTARG1 );

       在用DX进行渲染之前执行下之前的代码,就可以用了,如果还不行的话可以参考CEGUIDirect3D9Renderer.cpp里头的 beginRendering() 这个函数,CEGUI更改过的所有的渲染状态都在这里了,呵呵。

CEGUI与DX(Direct3D)渲染的冲突问题

今天在工程里直接调用D3D的API画了一个旋转的三角体(可以理解为金字塔),但是一调用CEGUI的渲染之后,金字塔就无法渲染出来,只要不调用 CEGUI::System的renderGUI(),就可以渲染出来,所以觉得应该是跟CEGUI内部渲染有冲突。

 

查了下网上的资料,果然有反映说CEGUI更改了渲染状态,但没有改回来导致渲染失败。看了下CEGUI的源码,如下: 继续阅读