专职C++

不能停止的脚步

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  156 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

常用链接

留言簿(13)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

下面是画线图元注释
 1 //渲染指定颜色的线
 2 void CALL HGE_Impl::Gfx_RenderLine(float x1, float y1, float x2, float y2, DWORD color, float z)
 3 {
 4     if(VertArray) //如果顶点数组不为空
 5     {
 6         if(CurPrimType!=HGEPRIM_LINES    //如果最近一次不是画线操作
 7             || nPrim>=VERTEX_BUFFER_SIZE/HGEPRIM_LINES //如果画线操作缓存已经超过了最大数
 8             || CurTexture ||   //如果当前存在纹理
 9             CurBlendMode!=BLEND_DEFAULT //如果混合不是缺省模式
10             )
11         {
12             _render_batch();  //批量渲染
13 
14             CurPrimType=HGEPRIM_LINES;  //当操作
15             if(CurBlendMode != BLEND_DEFAULT) _SetBlendMode(BLEND_DEFAULT); //设置混合模式
16             if(CurTexture) { pD3DDevice->SetTexture(00); CurTexture=0; }  //清空纹理
17         }
18         //将顶点加到缓存中
19         int i=nPrim*HGEPRIM_LINES;
20         VertArray[i].x = x1; VertArray[i+1].x = x2;
21         VertArray[i].y = y1; VertArray[i+1].y = y2;
22         VertArray[i].z     = VertArray[i+1].z = z;
23         VertArray[i].col   = VertArray[i+1].col = color;
24         VertArray[i].tx    = VertArray[i+1].tx =
25         VertArray[i].ty    = VertArray[i+1].ty = 0.0f;
26         nPrim++;
27     }
28 }
29 
其它的Gfx_RenderTriple、Gfx_RenderQuad分别是三角与方型图元方法,与画线方法类似。
下面是批量画图元方法注释
 1 void HGE_Impl::_render_batch(bool bEndScene)
 2 {
 3     if(VertArray)
 4     {
 5         pVB->Unlock(); //锁定VertexBuffer 顶点缓存
 6         
 7         if(nPrim)  //如果存在要画的图元
 8         {
 9             switch(CurPrimType)  
10             {
11                 case HGEPRIM_QUADS:  //方形图元,这里使用的是顶点索引的方式
12                     pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, nPrim<<20, nPrim<<1);
13                     break;
14 
15                 case HGEPRIM_TRIPLES: //三角图元
16                     pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, nPrim);
17                     break;
18 
19                 case HGEPRIM_LINES:  //线性图元
20                     pD3DDevice->DrawPrimitive(D3DPT_LINELIST, 0, nPrim);
21                     break;
22             }
23 
24             nPrim=0;
25         }
26 
27         if(bEndScene) VertArray = 0;
28         else pVB->Lock( 00, (BYTE**)&VertArray, 0 ); //解除锁定
29     }
30 }
在这里可以看出,HGE共有三种图元。对于连续画的相同图元,会先放到缓存中,当新图元类型发生变化或缓存满了,将会缓存画出来。
Gfx_StartBatch则是强制将缓存的图元画出来。

posted on 2010-02-01 17:09 冬瓜 阅读(1904) 评论(3)  编辑 收藏 引用 所属分类: 原创HGE

Feedback

# re: HGE 一些图元渲染注释[未登录] 2010-02-02 09:15 dophi
嘿嘿,不知道hge为啥不提供点图元,你可以扩展下,支持下点图元撒,不然画点只能用画线来模拟,很纠结的事情啊。  回复  更多评论
  

# re: HGE 一些图元渲染注释 2010-02-02 09:54 冬瓜
这个不是HGE的问题,DX只提供了少量的图元。一般来说,2D的效率,使用纹理贴图就可以了  回复  更多评论
  

# re: HGE 一些图元渲染注释[未登录] 2010-02-02 17:02 dophi
@冬瓜
本来也就不算是个问题,只是hge没做而已,但是dx是提供点图元的,要做是肯定可以做的。  回复  更多评论
  


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