OBJ网格模型文件(上) - 学习随笔

很早的时候一直有个执念:

我要从0开始,编程写一个obj模型的加载器。

在学习3dsmax的时候,发现这种格式被很多软件所支持,而且导出的文件只含模型和材质,体积很小很干净,建好模型之后通常保存为自身的.max文件后还要导出一份obj文件以备用。

以前用mod工具把游戏里面的3D模型以obj格式导入导出过,比如GTA,战国无双,甚至后来的王者农药等。比如网上下载一个路飞的obj模型导入到GTA中,然后就可以看到……

0481963cae8bdacbdc53b530c47dd975.jpeg
震惊!海贼王在洛圣都惨遭爆X

还有一些七七八八的MOD...我大一大二那会儿玩得不亦乐乎(= =#)。

另外,obj文件本身是ASCII格式,是可读的,所以就想研究研究。总之,OBJ模型有两个优点:文件格式被广泛支持;3D打印机只识别STL或OBJ格式。

然而,现在我都还没有完全实现这个加载器,可能是因为后来我知道了,世界上还有一种叫做“库”的东西存在~ 利用如VTK、Three.js等这些库,可以很轻易地实现obj模型的加载显示,因为作者已经写好了,用户直接调用接口就行了~不过理解OBJ模型文件内容还是有意义的。(此段划掉)(更新:加载器已有实现记录在下篇)

1 实体建模 vs. 表面建模

在说OBJ模型之前,先从大的写起,说说关于3D建模的分类。根据情况可以略过不看。

所有的3D cad软件从机制上来说其实可以分三类:实体建模(Solid Modeling),表面建模(Surface Modeling),和实体建模+表面建模。
即实际上建模方式只有两种:实体建模和表面建模。工程师用的软件偏向于实体建模,而艺术生用的软件偏向于表面建模。

实体建模:

实体建模的工具方式基本上有三种:扫掠,立体布尔运算和表面围成。
扫掠通常指的是将一个平面沿着一条指定曲线做扫掠操作,然后这个平面扫过的空间就成为了目标固体(所谓的平面拉伸,旋转,方样等都属于这个种类)。
布尔运算是对两个固体来求和,求差或者求交。这里指的固体运算其实是指空间的运算。通常计算机都用一种被称为边界限定法来描述一个空间,布尔运算的实质是对这个被限定住的空间做逻辑运算。求和,指的是不同立体空间相加后构成包含了两个空间的新空间。类似的,求差指的是用一段空间去剪切另外一段空间等。
表面围成就比较直接了,这种方法直接通过几个特殊的表面来生成固体,这些表面必须能够围住一个封闭的空间。

表面建模:

表面建模可以用一句话概括:添加或者修改点,让这些点能够
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值