前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从Native到Web(三), NaCl学习笔记: 3D渲染(DX9迁移到GLES)

从Native到Web(三), NaCl学习笔记: 3D渲染(DX9迁移到GLES)

作者头像
逍遥剑客
发布2018-05-23 16:45:21
4790
发布2018-05-23 16:45:21
举报
文章被收录于专栏:逍遥剑客的游戏开发

NaCl的3D渲染API使用的GLES2.0, 这也很好理解, 因为这已经是公认的跨平台标准了. 手机, 平板, 网页, PC都可以使用.

就算在Windows上, 也有一些基于DX9的GLES2.0实现, 比如ANGLE. 有时候我真在想, 像M$这种升级个操作系统版本号就淘汰一种API的做法, 还不如全都使用标准库, 这样也节省了跨平台移植的成本~所以什么DX10/DX11, 还是省省吧

其实从DX9到GLES(本文提到的都是指2.0版本), 大部分只是API换了种写法, 难度不大. 之前有在手机上做过一个简单的GLES渲染器, 有一些差异总结一下吧(不限于NaCl):

  • GLES没有固定管线, 就算画条线要也写个shader. 不过我到是挺喜欢这种设计的, 干净
  • GLES现在的支持最低相当于SM2.0(一般是嵌入式设备), 主流的手机等都是SM3.0的标准. 所以, 常用的渲染效果都可以实现, 做个次世代画面也有一定的可行性
  • GLES的API都是C函数, 不像DX9那种有点面向对象的设计. 但是实际写代码, 这种API比较方便, 不用依赖指针
  • GLES因为是为移动平台设计的, 所以对于标准支持的特性有限. 比如FloatTexture, DXTn, BufferLock等都是基于扩展来实现的, 这点跟GL很像
  • GLES投影后Z的范围是-1, 1, 这点需要特别注意. 至于什么左右手坐标系的问题, 这个看使用习惯了
  • GLES的AlphaTest是在Shader中使用discard指定完成, 没有对应的渲染状态
  • GLES的VertexBuffer和IndexBuffer在类型上是没有区别的, 只有使用上的区别
  • GLES中没有DX9烦人的DeviceLost, 这点还是很不错的
  • GLES中没有VertexDeclaration, 需要自己管理, 还可以接受. 不过最不爽的是, Shader里竟然没有SEMANTIC, 参见《看得让人DT的GLSL
  • GLES使用Shader是GLSL的语法, 不得不说, 没有HLSL好用. 很多引擎的做法是弄个HLSL2GLSL的转换器
  • GLES的Shader多了一个Link的过程, 所以能编译通过并不代表这个Shader就是可用的
  • GLES的Shader中可以指定浮点数的精度, 这个更多的是基于移动平台机能的考虑
  • GLES没有像D3DX这样的扩展库, 所以很多像数学库, 纹理载入, Shader管理等是需要自己动手的. 不过想想, 这些东西在商业游戏中很少有人用, 都是自己实现的. 只不过相对于初学者来说, 门槛高了一点而已. 但是DX9那些COM什么的, 也是增加复杂度的东西, 从这个角度讲, 两者算个平手吧
  • 图形调试工具的支持, 不得不说, 这方面DX9/10/11有先天优势...
  • 待补充

比较下来, 也就是Shader部分需要多操点心, 其它都还好, 甚至还强过DX9. 所以, 我有种用ANGLE代替DX9的冲动...

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012年11月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档