3ds格式(3ds ftk), 还没有采用lib3ds库
这两天写了一个用数据手套驱动3ds手骨骼模型实时运动的程序(使用的3dsftk),发现用这个工具操作3ds模型有些固定的模式和这种格式固有的特点,总结如下:
3ds使用小结:
- 一个3ds文件的每一个mesh顶点都从0开始索引,这一点可以从facearray中保存的顶点索引看出来;
- 对3ds的每个指针(比如mesh3ds *)最好都赋初始值NULL,否则可能不会给其非配空间;
- 在从database里request数据时(比如request a mesh named M),要先调用初始化语句(比如要先将mesh3ds初始化);
- 没有读取normal,只能自己写程序计算;
- mesh的旋转与平移保存在locmatrix[12]中,前9个数字式旋转矩阵,后3个数字是平移量;
- 父子关系保存在kemesh3ds中的parent[22];
- 3ds格式的数据是很老的格式,而且3dsftk已经很久没有更新过,功能也很有限,其保存顶点数量有限(很少),仅有的拓扑数据只是面索引,每个面包含哪三个顶点,没有边的索引信息,不像OpenMesh,TriMesh这样的数据结构访问数据的功能很强大。
- 如果要使某个mesh绕其父节点运动起来,就得遍历到其祖先节点(假设其对应locmtrixANCE),将mesh的每个点(首先做一个locmtrixANCE所对应的平移T的逆(即移回原点),接着做一个locmtrixANCE所对应的旋转R,最后再进行T.这3步用P表示),之后依次对这个祖先节点下的每个节点进行P这样的操作。
3ds格式说明:
Autodesk 3D Studio File Format
一个3ds程序例子:
Small Tips : 如何整合3DS模型中的Obj
另外还有一个开源的3ds库对3ds支持的多一些--lib3ds,具有生成normal等等信息的功能,对3ds的封装也更好。
lib3ds帮助文档:lib3ds documentation
一个lib3ds的入门程序:Lib3ds tutorial: My first model
3ds ftk采用的数据格式:
typedef struct {
char3ds name[11]; /* Object name */
byte3ds ishidden; /* Hidden object flag */
byte3ds isvislofter; /* Lofter visibility flag */
byte3ds ismatte; /* Matte object flag */
byte3ds isnocast; /* Doesn't cast shadow's flag */
byte3ds isfast; /* Fast display flag */
byte3ds isnorcvshad; /* Doesn't recieve shadows */
byte3ds isfrozen; /* Frozen object flag */
ushort3ds nvertices; /* Vertice count */
point3ds *vertexarray; /* List of vertices */
ushort3ds nvflags; /* Number of vertex flags */
ushort3ds *vflagarray; /* List of vertex flags */
ushort3ds ntextverts; /* Number of texture vertices */
textvert3ds *textarray; /* List of texture coordinates */
byte3ds usemapinfo; /* Boolean for use of mapping icon information */
mapinfo3ds map; /* Mapping icon info */
float3ds locmatrix[12]; /* Object orientation matrix */
ushort3ds nfaces; /* Face count */
face3ds *facearray; /* List of faces */
ulong3ds *smootharray; /* Smoothing group assignment list */
byte3ds useboxmap; /* Boolean used to indicate the use of box mapping */
char3ds boxmap[6][17]; /* Material names used in boxmapping */
ubyte3ds meshcolor; /* UI color assigned to the mesh */
ushort3ds nmats; /* Assigned materials count */
objmat3ds *matarray; /* Material assignment list */
byte3ds useproc; /* Use animated stand-in flag */
ulong3ds procsize; /* Size of animated stand-in data */
char3ds procname[13]; /* Name of animated stand-in procedure */
void3ds *procdata; /* Animated stand-in data */
} mesh3ds;
3ds的运动数据格式:
typedef struct {
char3ds name[11]; /* Name of mesh */
char3ds parent[22]; /* Name of parent object */
ushort3ds flags1; /* flags field from node header */
ushort3ds flags2; /* flags2 field from node header */
point3ds pivot; /* Object pivot point */
char3ds instance[11]; /* Object instance name */
point3ds boundmin; /* Minimum bounding box point for dummy objects */
point3ds boundmax; /* Maximum bounding box point for dummy objects */
ulong3ds npkeys; /* Number of position keys */
short3ds npflag; /* Loop control flag for position keys */
keyheader3ds *pkeys; /* Spline values for position keys */
point3ds *pos; /* Mesh position keys */
ulong3ds nrkeys; /* Number of rotation keys */
short3ds nrflag; /* Loop control flag for rotation keys */
keyheader3ds *rkeys; /* Spline values for rotation keys */
kfrotkey3ds *rot; /* Rotation keys */
ulong3ds nskeys; /* Number of scaling keys */
short3ds nsflag; /* Loop control flag for scaling keys */
keyheader3ds *skeys; /* Spline values for scaling */
point3ds *scale; /* Mesh scaling keys */
ulong3ds nmkeys; /* Number of morph keys */
short3ds nmflag; /* Loop control flag for morph keys */
keyheader3ds *mkeys; /* Spline values for morph keys */
kfmorphkey3ds *morph; /* Morph keys */
ulong3ds nhkeys; /* Number of hide keys */
short3ds nhflag; /* Loop control flag for hide keys */
keyheader3ds *hkeys; /* Spline values for hide keys */
float3ds msangle; /* Morph smoothing group angle */
} kfmesh3ds;
3ds格式(3ds ftk), 还没有采用lib3ds库相关推荐
- java如何使用3dmax中的文件_在java3d里面使用3DS格式的文件
在SUN的J3D里面并没有提供对3DS格式的文件的导入.但是3DS格式的文件又很常见.为此,我们需要借用第三方的工具,来把3DS里面的模型导入到程序中. 我们用的是Loader3ds这个工具 我们还是 ...
- opengl加载显示3DS模型3DS类型文件
opengl加载显示3DS模型UC类型文件 前置条件 注意事项 项目展示 项目完整C++源代码 前置条件 opengl三方库freeglut,显示3DS格式的三维模型文件 注意事项 源代码 model ...
- 为什么大公司还在采用过时的技术?
作者:孤独烟,中国平安银行后端工程师 来自:http://rjzheng.cnblogs.com/ 0 背景 本文出自一朋友给我的提问,于是博主呕心沥血给他花式洗脑了几个小时.忽然发现,应该还有许多朋 ...
- 大公司为什么还在采用过时的技术
2019独角兽企业重金招聘Python工程师标准>>> 大公司为什么还在采用过时的技术 背景 本文出自一朋友给我的提问,于是博主呕心沥血给他花式洗脑了几个小时.忽然发现,应该还有许多 ...
- 【原创】大公司为什么还在采用过时的技术
背景 本文出自一朋友给我的提问,于是博主呕心沥血给他花式洗脑了几个小时.忽然发现,应该还有许多朋友有同样的疑问.所以整理成文. 许多刚毕业的程序员朋友,都有一个执念,想要进那种规模大一点的公司.上市的 ...
- python采用pika库使用rabbitmq总结,多篇笔记和示例
这一段时间学习了下rabbitmq,在学习的过程中,发现国内关于python采用pika库使用rabbitmq的资料很少,官网有这方面的资料,不过是都英文的.于是笔者结合自己的理解,就这方面内容写了一 ...
- opencv入门课程:彩色图像灰度化和二值化(采用skimage库和opencv库两种方法)
用最简单的办法实现彩色图像灰度化和二值化: 首先采用skimage库(skimage库现在在scikit_image库中)实现: from skimage.color import rgb2gray ...
- linux 如何查看终端格式,你应该还不知道,Linux终端下的 Markdown 文档查看器
原标题:你应该还不知道,Linux终端下的 Markdown 文档查看器 现在,Markdown 差不多已经成为技术文档的标准.它可以实现技术文档的快捷写作,以及输出发布.同样都是标记语言,但Mark ...
- 如何把不同尺寸ico格式图标_还在为图标设计犯难?这篇告诉你图标设计so easy!...
UI最重要组建之一就是图标,随着扁平化设计的发展趋势,越来越注重图标的简洁与寓意表达,平面图标已占主导地位. 什么是图标? 图标正确打开方式是这样的! ico图标其实是icon file的缩写形式,它 ...
最新文章
- 合并文件夹中子目录_如何整理文件夹,看这一篇就够了,简单易学
- php面试题11(边看边复习刚刚讲的)(array_multisort($arr1,$arr2); 用$arr1来排序$arr2。)...
- ES6语法的学习与实践
- 一次代码优化实践,用了模板方法+策略+工厂方法模式
- 动态规划经典题:给出两个字符串s1和s2,返回其中最大的公共子串
- Effective C++: 05实现
- SpaceX载人龙飞船意外爆炸,据称几乎被完全摧毁
- 学python能做什么-学完Python可以做什么?
- 基于arduino uno + WS2812b RGB灯带单一颜色跑马灯控制程序
- 利用python画简单图形示例代码_使用python画社交网络图实例代码
- zotero中的标准和规范应该用什么类型
- PICkit 3编程器错误
- 项目配置多Redis数据源(Redis分片)
- 1024程序员节:技术大神齐聚直播间,等你来互动!
- Microsoft Office 2013 word MathType 报错 (MathPage.wll)
- Debian下安装Mosquitto
- 网页实现从数据库读取数据并简单分页
- Android 备份(提取)apk
- 视频丨中兴通讯齐聚全球合作伙伴的力量 拥抱最好的时代
- 政务服务一网通办云平台及智慧政务大数据资源中心建设方案