有什么处理简单的 3D 模型的 Library 吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cqcn1991
V2EX    问与答

有什么处理简单的 3D 模型的 Library 吗?

  •  < href="Javascript:" Onclick="downVoteTopic(201339);" class="vote">
  •   cqcn1991 2015-06-26 11:59:30 +08:00 2994 次点击
    这是一个创建于 3842 天前的主题,其中的信息可能已经有所发展或是发生改变。

    很久前问过一次,不过当时说不太清楚,最近想清楚了一些,重新再问一遍
    比如说给一个矩形/多边形棱柱,能够得到高度在z时的截面?
    另外,想问一下CAD这类文件,是怎么保存3D物体的?是把各个角点和棱边都保存下来,比如
    3d = [
    points = [0,0,0;0,0,1...]
    lines = [[[0,0,0],[0,0,1]],[],[]...]
    ]
    这种?

    不知道什么语言有这方面的库?Python?

    12 条回复    2015-06-27 07:30:58 +08:00
    mhycy
        1
    mhycy  
       2015-06-26 12:20:51 +08:00
    真要有这样的数据的话遍历一次不就行了么?
    cqcn1991
        2
    cqcn1991  
    OP
       2015-06-26 12:27:22 +08:00 via iPhone
    @mhycy 什么意思?
    mhycy
        3
    mhycy  
       2015-06-26 13:18:13 +08:00
    @cqcn1991 解析数据才是难点。。
    对于那些点,除了三维坐标外还有这个点与另一个点的连接参数。绘制截面肯定绕不开这个
    cqcn1991
        4
    cqcn1991  
    OP
       2015-06-26 16:45:38 +08:00
    @mhycy 所以CAD这方面到底是怎么做的啊。。。。
    manhere
        5
    manhere  
       2015-06-26 17:25:12 +08:00 via iPhone
    tree.js
        7
    acros  
       2015-06-26 17:54:23 +08:00
    Python库不知道。
    保存3D物体数据最简单的方法,参考DirectX的.x文件一类,你文本格式打开文件一看就明白了。
    最简单的例子,按常规方式,图形都是三角面片化的。一个数组记录顶点位置,一个数组表示面片绘制顺序(逆时针表示正面)。
    acros
        8
    acros  
       2015-06-26 18:02:25 +08:00
    一下子好像说不清,找个openGL教程,看看前面几节应该就明白了,顶点数组和顶点索引数组的概念。
    至于CAD文件啥文件,FBX? 这个有FBX SDK说明格式的详细文档来着。
    dong3580
        9
    dong3580  
       2015-06-26 19:19:17 +08:00 via Android
    @manhere
    对tree. js的卡屏程度佩服到极点,强大且粗暴
    miniwoodman
        10
    miniwoodman  
       2015-06-26 21:22:59 +08:00
    @cqcn1991

    第一个也许符合你的要求

    PythonOCC is 3D CAD/CAE/PLM development framework for the Python programming language
    http://www.pythonocc.org/


    http://vpython.org/

    http://stackoverflow.com/questions/6650368/3d-model-viewer-using-python

    以上是Python的
    -------------------------------

    http://threejs.org/
    http://babylonjs.com/

    这是两个目前最著名的 Javascript HTML5 WebGL 3D 库,但主要是渲染与交互, 没什么对3D模型的CAD类操作处理能力, 这方面的需求目前恐怕还是要自行编码。
    -------------------------------
    cqcn1991
        11
    cqcn1991  
    OP
       2015-06-26 21:43:29 +08:00
    @miniwoodman 目前主要不是做界面,是拿来做计算和分析。所以Three.js这些主要就是显示?
    那拿来看看怎么存储3d实体应该也是有帮助的
    其实我想做的,都是高中立体几何上类似的内容(截面啊什么之类的),只是这方面库确实没找到啥...
    miniwoodman
        12
    miniwoodman  
       2015-06-27 07:30:58 +08:00
    @cqcn1991 Three.js 目前还只是显示, 因为WebGL推出主要目标是让浏览器直接支持3D内容的显示, 而 Three.js 是一个 WebGL API 的封装, 也许将来会集成一些 3d Model 的计算功能, 只不过这种功能完全可以由另一个开源的 Library 来实现, 也许现在就有这种 Library, 但还没找到。


    其实我想你的疑问可能不是这些,而是到底 3d 模型在程序中是如何组织的, 粗略的说分两种应用场合, 一种显示交互, 第二种是计算分析。

    几乎所有平台上的3D游戏都是第一种情况, 这种情况下 3d 模型在内存的存储完全简单化、标准化--
    --只有顶点和三角形(四边形也好, 新技术Tessellation等在这里可以忽略)

    3d 模型文件中最简单的是 .obj 格式, 是纯文本的。
    .obj 格式的文件也最接近这种内存中的组织形式:
    比如一个三角形

    v 1.000000 1.000000 1.000000
    v 2.000000 1.000000 1.000000
    v 1.000000 2.000000 1.000000
    f 1 2 3

    v 代表"顶点",f 代表“面"(三角形、四边形)。
    如果是立方体,那就是8个顶点,和6个四边形,或者12个三角形

    游戏中没有另外存储三角形的“边”, 因为边已经隐含在"面"中了。
    游戏在运行时几乎不关心3D模型的形体/形状, 物理引擎部分除外,游戏只是不断的把视野中的三角形推送给显卡来显示,无论是一个还是几十万个。


    第二中场合 计算和分析主要应用在工程、医学、科学领域,这些情况下就复杂的多,
    数据存储有 3d参数曲线、参数曲面 和可用参数方程表示的3d几何体,我是不了解,我主要是做显示交互这块的。

    如果只是需要计算截面,可以不用管那么复杂数据存储, 游戏那种3D数据格式同样可以拿来计算。
    向楼上说的那样,可以用类似3D打印的求界面的方法
    https://ravehgonen.wordpress.com/tag/plane-triangle-intersection/
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2283 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 10:24 PVG 18:24 LAX 02:24 JFK 05:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86