三维点云数据格式转换技术的研究与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文本格式的OBJ文件
3DS读取
开始 根据主块ID读入主块长度
读入下一块的ID和长度
判断该块是否需要
N
Y
进行数据读取,并更新已读字节数
N
已读入字节数小于块长
由于3DS文件的块结构是固 定的],并且综合嵌套特性, 因此可以用递归方法来读取。 返回上一级的条件就是当 前已经读入的块的字节数是 否等于块的长度。 在块之间跳转时,从父块 到子块可用多分支语句实现, 然后根据子块的ID判断需要 进入哪个子块分支。 在主块读入完毕后,整个 3DS文件读入程序结束。
研究内容
D3D对3DS格式模型支持良好,而 OpenGL更擅长OBJ格式模型的绘制,本 文以3DS和OBJ格式模型为例探讨三维点 云数据格式转换技术的研究与实现: 解析3DS和OBJ文件结构和存储格式; 研究3DS和OBJ模型文件的读写过程; 设计3DS和OBJ文件的相互转换算法; 开发基于MFC简单界面实现人机交互。
转换流程
开始 选择模型文件
Y
判断是否损毁
N
创建数据结构, 存储文件信息
3ds 格式
选择所需文件格式
obj格式
新建3 ds 文件, 并写入所存信息
新建obj文件, 并写入所存信息
结束
图形界面
3DS->OBJ测试
->
3DS人头模型
OBJ人头模型
OBJ->3DS测试
->
OBJ茶壶模型
3DS茶壶模型
三维点云数据格式转 换技术的研究与实现
导 师:杨会君 答辩人: 专 业:
主要内容
1 2 3 4
需求分析 研究内容
设计实现
结论
需求分析
a) 3D计算机图形学的崛起,3D模型越 来越被人们所喜爱
b) D3D和OpenGL作为两个开发标准, 对模型格式的支撑不尽相同 c) 转换模型格式使得其能在不同3D模 型设计环境中使用已成研究趋向
Y N
判断主块是否结束
Y
结束
OBJ读取
开始
读取一行数据
Y
判断是否为空行或注释行
N
分割字符串
根据关键字存储下面信息
读取一行数据
N
判断文件是否结束
Y
结束
3DS写入
ID 2 L = 2+4+n 4 data n ID 2 4 L1 = 2+4+L2+L3
ID 2 ID 2
L2 = 2+4+n1 4
data n1
结论
1. 达到了研究的预期目标
2. 不足和研究方向: a) 框架简单,不易深层拓展,可优化框架,以便更
合理地组织信息;
b) 转换格式有限,可添加更多转换功能以便转换格
式文件;
c)
界面粗糙,需进一步完善。
wk.baidu.com
3DS结构格式
16 进制方式打开如上图所示, 数据是按照低位在前,高位在后的 方式存储。
OBJ结构格式
OBJ文件没有显著的结构体特征: OBJ文本文件没有文件头(File Header),“#”号开头的为注释行, 有时可能使用几行文件信息的注释 作为文件的开头。 空格和空行可以随意加到文件中 以增加文件的可读性。 有字的行都由关键字(Keyword)开 头,关键字可以说明这一行是什么 样的数据。 OBJ文件不包含面的颜色定义信息, 不过可以引用材质库,材质库信息 储存在一个后缀是“.mtl”的独立 文件中,用关键字“mtllib”来引 用。
L3 = 2+4+L4+L5 4 ID 2 L4 = 2+4+n2 4 data n2
ID 2
L5 = 2+4+n3 4
data n3
3ds文件块长度计算方法
OBJ写入
OBJ模型文件时在写入时,按文本类型直接写入,不需要 计算长度。同样以顶点写入为例,其伪码示例如下。 for(int j = 0; j < numOfVerts; j++) { //以“v x y z”的格式写入顶点信息 fwrite(&(pBuff[j].flag), 1, sizeof(char), fp); //写入顶点 关键字 fwrite(&(pBuff[j].x), 1, sizeof(float), fp); //写入每个 顶点x坐标 fwrite(&(pBuff[j].y), 1, sizeof(float), fp); //写入每个 顶点y坐标 fwrite(&(pBuff[j].z), 1, sizeof(float), fp); //写入每个 顶点z坐标 fwrite(&(‘\n’), 1, sizeof(char), fp); //写入换行符 } 注意:命名要适当,最后注意要换行。