游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2523|回复: 8

封装 DirectX 的时候,运算和渲染,应该100%分离吗??

[复制链接]

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2009-3-11 18:05:00 | 显示全部楼层 |阅读模式
先来看个函数:
struct stuRotateZoom
{
      float RotateX;
      float RotateY;
      float RotateZ;
      float ZoomX;
      float ZoomY;
      float ZoomZ;
};


void CDXFont:raw3DFont(unsigned int iNum,RECT* rctDraw,stuRotateZoom* Rotate)
{
          if ( iNum>m_vtr3DFont.size()-1 )
          {
                return;
          }

          //Rotate Matrix ,use " m_fRotateY,m_fRotateX,m_fRotateZ" to choose the Rotate mode and speed
          D3DXMatrixRotationYawPitchRoll(&matRotate,Rotate->RotateY,Rotate->RotateX,Rotate->RotateZ);

          //Translation Matrix
          D3DXMatrixTranslation( &matTrans,-m_vtr3DFont[iNum].iCenterX,-m_vtr3DFont[iNum].iCenterY,0);

          //Zoom Matrix
          D3DXMatrixScaling( &matZoom, Rotate->ZoomX,Rotate->ZoomY,Rotate->ZoomZ);

          //Multiply Matrixs above
          D3DXMatrixMultiply( &matWorld, &matTrans,&matRotate);
          D3DXMatrixMultiply( &matWorld, &matWorld,&matZoom);

          //一直到这里都是在计算矩阵


          //这里才开始真正的渲染
          m_lpD3DDevice->SetTransform( D3DTS_WORLD, &matWorld );
          m_lpD3DDevice->SetMaterial(&m_vtr3DFont[iNum].Font3Dmtrl);
          m_vtr3DFont[iNum].mesh->DrawSubset(0);
}



正如大家所见,很多封装 DirectX 的类里面,都有这样的函数,里面大概有两部分:

1.计算矩阵

2.设置矩阵,并使用 DirectX API 渲染



我现在的问题是:

1.是否应该把第一部分,也就是计算矩阵的部分,剥离出去

2.如果剥离出去,那这个函数的参数应该怎么设计



30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
发表于 2009-3-11 18:21:00 | 显示全部楼层

Re:封装 DirectX 的时候,运算和渲染,应该100%分离吗??

我的话,比较喜欢分离出去,因为我觉得矩阵运算是纯粹的数学上的东西,而渲染是和环境相关的东西,因此将
matWorld,m_vtr3DFont[iNum].Font3Dmtrl,m_vtr3DFont[iNum].mesh
封在一个数据结构中,统一进行字体渲染

9

主题

249

帖子

260

积分

中级会员

Rank: 3Rank: 3

积分
260
发表于 2009-3-11 19:11:00 | 显示全部楼层

Re:封装 DirectX 的时候,运算和渲染,应该100%分离吗??

这种细节不必太刻意把,怎么行怎么来

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-3-11 19:30:00 | 显示全部楼层

Re:封装 DirectX 的时候,运算和渲染,应该100%分离吗??

渲染操作到底层全都是数学运算,你要不要全剥离出去

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-3-12 00:01:00 | 显示全部楼层

Re:封装 DirectX 的时候,运算和渲染,应该100%分离吗??

俺是没有分开,只有一些特定环境,比如半透明对象必须排序,环境贴图,阴影等才加入到别的批次里面去单独渲染的。

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
 楼主| 发表于 2009-3-12 00:12:00 | 显示全部楼层

Re:封装 DirectX 的时候,运算和渲染,应该100%分离吗??

恩。。。。既然有很多兄弟都没有剥离。。。
那我就。。。。去剥离它~~~~~~~~~~~
明天到公司我去试试。。。。。
然后把感想和结果告诉大家。。。。
如果我吐血而亡。。。请大家记得清明的时候,帮我烧吧纸钱(不要美元,这东西贬值的厉害,相信在“那边”也一样)。。。。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2009-3-13 15:58:00 | 显示全部楼层

Re: Re:封装 DirectX 的时候,运算和渲染,应该100%分离吗??

draculamx: Re:封装 DirectX 的时候,运算和渲染,应该100%分离吗??
如果我吐血而亡。。。请大家记得清明的时候,帮我烧吧纸钱

纸钱都烧完了,发现此人活得好好的?

21

主题

112

帖子

118

积分

注册会员

Rank: 2

积分
118
 楼主| 发表于 2009-3-13 16:55:00 | 显示全部楼层

Re:封装 DirectX 的时候,运算和渲染,应该100%分离吗??

晕,还在努力剥着呢。。。。。
感觉还可以。。哈哈

20

主题

136

帖子

172

积分

注册会员

Rank: 2

积分
172
发表于 2009-3-14 01:14:00 | 显示全部楼层

Re:封装 DirectX 的时候,运算和渲染,应该100%分离吗??

渲染器和流水线分离的话,就会损失一些专用性,我的解决办法是扩充流水线,以符合 DX 的更多特性,这样,渲染器就需要额外设计一些专用的接口。这也是为了最大限度地分离职责,保持接口简洁和互换所作的妥协。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-20 03:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表