很久前问过一次,不过当时说不太清楚,最近想清楚了一些,重新再问一遍
比如说给一个矩形/多边形棱柱,能够得到高度在z时的截面?
另外,想问一下CAD这类文件,是怎么保存3D物体的?是把各个角点和棱边都保存下来,比如
3d = [
points = [0,0,0;0,0,1...]
lines = [[[0,0,0],[0,0,1]],[],[]...]
]
这种?
不知道什么语言有这方面的库?Python?
1
mhycy 2015-06-26 12:20:51 +08:00
真要有这样的数据的话遍历一次不就行了么?
|
5
manhere 2015-06-26 17:25:12 +08:00 via iPhone
tree.js
|
6
jkunw 2015-06-26 17:46:57 +08:00
|
7
acros 2015-06-26 17:54:23 +08:00
Python库不知道。
保存3D物体数据最简单的方法,参考DirectX的.x文件一类,你文本格式打开文件一看就明白了。 最简单的例子,按常规方式,图形都是三角面片化的。一个数组记录顶点位置,一个数组表示面片绘制顺序(逆时针表示正面)。 |
8
acros 2015-06-26 18:02:25 +08:00
一下子好像说不清,找个openGL教程,看看前面几节应该就明白了,顶点数组和顶点索引数组的概念。
至于CAD文件····啥文件,FBX? 这个有FBX SDK说明格式的详细文档来着。 |
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类操作处理能力, 这方面的需求目前恐怕还是要自行编码。 ------------------------------- |
11
cqcn1991 OP @miniwoodman 目前主要不是做界面,是拿来做计算和分析。所以Three.js这些主要就是显示?
那拿来看看怎么存储3d实体应该也是有帮助的 其实我想做的,都是高中立体几何上类似的内容(截面啊什么之类的),只是这方面库确实没找到啥... |
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/ |