http://hi.baidu.com/zyb_debug/blog/item/6719cde629879827b8382032.html

在前一篇中,发现自己解析的不是max建模出来的模型。
今天终于找到了问题,原因就是因为我用了CEGUI。
如果不用CEGUI的时候,模型完全正常。
但是CEGUI一旦render,那么开始出现非议所思的效果。

大家看看效果。
开启CEGUI状态之前的




开启CEGUI绘制之后的






我太汗了 究其原因。

就是CEGUI在绘制的时候改变了D3D绘制状态。

 

1CEGUI::System::getSingleton().renderGUI();
2
3   float fps = DXUTGetFPS();  
4   RenderFPS(fps);
5
6RenderMesh(fElapsedTime); 
7


 

 

所以要在绘制Mesh之前将d3d恢复至默认状态

写一个函数

 

 1//=========================================
 2    /**
 3    @brief        
 4    @param    建立此函数的目的主要是CEGUI在绘制的时候改了绘制状态
 5    所以要把D3D所有的绘制状态改回去
 6    @return
 7    */

 8    //=========================================
 9
10    void zybResetRenderState(IDirect3DDevice9* device)
11    {
12
13        device -> SetFVF(NULL);
14
15        //  set device states 
16        device -> SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
17        device -> SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); 
18        device -> SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);
19        device -> SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
20        device -> SetRenderState(D3DRS_FOGENABLE, FALSE);
21        device -> SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
22
23
24        //  setup texture addressing settings/* 
25        device -> SetSamplerState(  0 , D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
26        device -> SetSamplerState(  0 , D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
27
28        //  setup colour calculations 
29        //device -> SetTextureStageState( 0 , D3DTSS_COLORARG1, D3DTA_TEXTURE);
30        //device -> SetTextureStageState( 0 , D3DTSS_COLORARG2, D3DTA_CURRENT);
31        //device -> SetTextureStageState( 0 , D3DTSS_COLOROP, D3DTOP_SELECTARG1);
32
33        ////  setup alpha calculations 
34        //device -> SetTextureStageState( 0 , D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
35        //device -> SetTextureStageState( 0 , D3DTSS_ALPHAARG2, D3DTA_CURRENT);
36        //device -> SetTextureStageState( 0 , D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
37
38        ////  setup filtering 
39        //device -> SetSamplerState( 0 , D3DSAMP_MINFILTER, D3DTEXF_POINT);
40        //device -> SetSamplerState( 0 , D3DSAMP_MAGFILTER, D3DTEXF_POINT);
41        ////  disable texture stages we do not need. 
42        //device -> SetTextureStageState( 1 , D3DTSS_COLOROP, D3DTOP_DISABLE);
43
44        ////  setup scene alpha blending 
45        //device -> SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
46        //device -> SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
47        //device -> SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO); 
48
49    }


最后绘制mesh的时候前面加个函数

1   CEGUI::System::getSingleton().renderGUI();
2
3   float fps = DXUTGetFPS();  
4   RenderFPS(fps); 
5
6   zyb::zybResetRenderState(DXUTGetD3D9Device());
7   RenderMesh(fElapsedTime);
8

 

OK一切正常了

 

Posted on 2009-08-15 20:00 zyb_debug 阅读(1097) 评论(4)  编辑 收藏 引用

Feedback

# re: 解析xfile 结束 找出问题了 恢复CEGUI渲染状态  回复  更多评论   

2009-08-15 22:29 by 柒笑侠
原来是你啊,嘿嘿

# re: 解析xfile 结束 找出问题了 恢复CEGUI渲染状态  回复  更多评论   

2009-08-15 23:12 by zyb_debug
@柒笑侠
我晕
百度空间人太少 我就维护2个blog

# re: 解析xfile 结束 找出问题了 恢复CEGUI渲染状态  回复  更多评论   

2009-08-16 10:57 by 戴尔笔记本
不错啊

# re: 解析xfile 结束 找出问题了 恢复CEGUI渲染状态  回复  更多评论   

2009-09-12 10:23 by 支持
写的挺好,不错

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理