游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2993|回复: 7

抽象图形接口越来越难了,该在什么层次上做比较好?

[复制链接]

34

主题

70

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2009-1-9 10:47:00 | 显示全部楼层 |阅读模式
    为了让渲染器能在D3D的各个版本之间以及OpenGL之间切换,往往都需要做一个抽象的接口层。在Ogre和Irrlicht里面都是这样做的。但我感觉D3D10和D3D9之间的差别着实太大了,貌似没有办法抽象得这么底层。或者为每个具体的渲染过程写D3D9,D3D10,OpenGL的版本,不过那样代码也太大了……
    请教一下有没有什么好的方法?

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2009-1-9 12:08:00 | 显示全部楼层

Re:抽象图形接口越来越难了,该在什么层次上做比较好?

个人感觉Dx9和Dx10要单独出来似乎没有太大必要,可以只用一种.呵呵.这毕竟只是一个过渡,以后可能的情况就是Dx10应用广了,Dx9就慢慢淡出了.比如,现在貌似用Dx8API做游戏的也不多见...
新人愚见.莫笑.呵呵~

0

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2009-1-9 15:18:00 | 显示全部楼层

Re:抽象图形接口越来越难了,该在什么层次上做比较好?

以前尝试过建立一个IRenderContext接口来抽象GL,DX等API的共性,结果是代码更多更杂,
到渲染器中还要再加一层;技术也不够,弄成了博采众API之短,用起来很难受。

我现在是抽象出IRenderer,用GL1,GL2,DX9等分别实现,只多了一层抽象,觉得效率还可以.
记得FarCry好像有XRendererNULL.dll,XRendererDX.dll,XRendererGL.dll等,似乎也是这么处理的?

34

主题

70

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2009-1-9 16:03:00 | 显示全部楼层

Re: Re:抽象图形接口越来越难了,该在什么层次上做比较

DangerWang: Re:抽象图形接口越来越难了,该在什么层次上做比较好?

以前尝试过建立一个IRenderContext接口来抽象GL,DX等API的共性,结果是代码更多更杂,
到渲染器中还要再加...

能说的具体点么?
IRenderContext是不是就具体到API的每个函数比如present,drawIndexPrimitive这上面去了?
抽象出来的IRenderer由是在哪个层面的呢?

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-1-9 17:05:00 | 显示全部楼层

Re:抽象图形接口越来越难了,该在什么层次上做比较好?

这个要看你怎么定义和设计渲染器了

Render.AddDrawableObjectToRenderQueue(drawableObject);
Render.SortRenderQueueByDistance();
Render.SortRenderQueueByMaterail();
foreach material
  material.Apply()
  foreach DrawableObject
      Object.Draw()

根据不同API定义不同的material和drawableObject
Render不需要知道DrawableObject用什么方法来保存顶点,vertex buffer object,vertex buffer都可以,也不需要知道你究竟是用DrawIndexPrimitive还是DrawPrimitive

20

主题

136

帖子

172

积分

注册会员

Rank: 2

积分
172
发表于 2009-1-9 17:32:00 | 显示全部楼层

Re:抽象图形接口越来越难了,该在什么层次上做比较好?

Renderer + Pipeline + SceneManager

这是我目前的做法,可以为不同的渲染器扩展合适的 Pipeline,或者使用更为受限同时也可能更为低效的 Pipeline。例如,扩展 D3DPipeline 以直接访问顶点缓存等。

仅供参考。

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2009-1-10 12:23:00 | 显示全部楼层

Re:抽象图形接口越来越难了,该在什么层次上做比较好?

没设计好。我现在做的没啥问题。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-1-11 11:46:00 | 显示全部楼层

Re:抽象图形接口越来越难了,该在什么层次上做比较好?

现在已经不能在太底层的地方做抽象了,而是要高层一点,介于Renderer和SceneManager之间,最好是retained mode的对象,这样方便对不同的底层做不同的优化。

另外,对现在的游戏来说,如果不需要跨平台已经没必要支持OpenGL了,不过由于DX9和DX10差异太大,还是可能需要抽象一下的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 13:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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