Assimp跳坑记

194 篇文章 40 订阅

上文书说到,assimp可以用来读取相当多种模型格式,用它来做格式转换工具非常合适。然而,遇到坑是不可避免的。本篇就来讲讲我这些天遇到的坑,以及如何越过它们。

坑大:多边形

很多模型格式,比如obj,是可以支持各种多边形类型的。而实际使用中,需要把它们转成三角形。这个过程称为三角化。

刚遇到这个问题的时候,我还打算在引入一个三角化库,后来看了一眼assimp的代码,原来它自带了三角化的功能,只要启用就可以了。使用方法也很简单,只要把aiImportFile改成aiImportFileExWithProperties,并带上aiProcess_Triangulate的参数即可。三角化效果还不错,obj里常见的四边形五边形六边形,都能很好地用它转换成三角形。

这个树的模型,有不少四边形和五边形。经过转换就能顺利使用了。

坑二:面方向

由于模型创建工具往往是双面显示,所以艺术家在建模的时候并不是十分在乎正反面。而实时渲染里面,基本都会只渲染正面,比如KlayGE里只渲染顺时针的面。这么一来,有的模型就会出现大量镂空,光照结果也不正确。

Assimp提供了另一个选项,叫aiProcess_FixInfacingNormals,就是为了修正这点。它可以把错误朝向的三角形反过来。

再加上这个选项之前,上面车模型要么车身对,要么轮子对。现在终于都对了。

坑三:坐标系

大部分建模软件都是右手坐标系,而KlayGE和很多游戏引擎一样,用的左手坐标系。Assimp的导入选项aiProcess_ConvertToLeftHanded可以把坐标系翻转、纹理坐标翻转、三角形顶点顺序翻转。不再需要自己搞这些事情。但很可能需要在自己程序里加上把z取反和yz对调的事情。

在调整坐标系之前,模型要么立着,要么某个轴是颠倒的。但需要实验几种组合才能得到正确结果。

结果展示

这几个大坑跳过之后,转换大部分模型已经不成问题了。

小池塘:

U.S.S Defiant, a tough little ship:

甚至达到一座城市的规模:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值