OpenGL ES 在iOS平台加载3dmax导出的obj模型
2013-12-05 09:39
405 查看
OpenGL ES 在iOS平台加载3dmax导出的obj模型
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
以下注释部分涉及到文件按行读取与块的使用。
关于obj文件格式,后续补充,需要说明obj格式以明文文本存储模型信息,但无法承载灯光及其它信息,需要时,可深入研究3ds这种二进制的文件格式,相对来说从3dmax导出的信息比较全面,包括灯光信息,但也较有难度。
后续会改成c++的代码,并处理同一个模型文件中的多个几何体的情况,再完善本贴。
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
以下注释部分涉及到文件按行读取与块的使用。
关于obj文件格式,后续补充,需要说明obj格式以明文文本存储模型信息,但无法承载灯光及其它信息,需要时,可深入研究3ds这种二进制的文件格式,相对来说从3dmax导出的信息比较全面,包括灯光信息,但也较有难度。
后续会改成c++的代码,并处理同一个模型文件中的多个几何体的情况,再完善本贴。
// 获取文档根目录路径,也即itunes共享的目录 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); // 默认只有一个,就取第一个 NSString *documentsDirectory = [paths objectAtIndex:0]; // 文档根目录串附加一个文件名,构造出一个该目录下文件的完整路径 NSString *absoluteFileName = [documentsDirectory stringByAppendingPathComponent:fileName]; // 文件管理器对象单例获取 NSFileManager *fileManager = [NSFileManager defaultManager]; // 判断上面构建的完整路径对应的文件是否存在 if (![fileManager fileExistsAtPath:absoluteFileName]) { // 文件不存在,则用应用包路径再构建该文件的完整路径 absoluteFileName = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"1111.obj"]; } // 使用Utf-8编码读取该文件内容 NSString *fileContent = [NSString stringWithContentsOfFile:absoluteFileName encoding:NSUTF8StringEncoding error:nil]; // 对整个文件的内容,用换行符分隔成多个字符串,得到一个数组 NSArray *lines = [fileContent componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; // 使用块技术,枚举数组中保存的文件内容的每一行,此块使用是串行的 [lines enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { // 块传入参数:obj为数组中idx位置保存的一行字符串,此处做了首尾去除空白符的处理,任何时侯想跳出块处理,给 &stop 赋一 YES 值即可中止以后的块调用 NSString *line = [(NSString *)obj stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; // 是vt、vn、v、f中的一类,至少3个字符以上 if (line.length >3) { if ([[line substringToIndex:3] isEqualToString:@"vt "]) { } else if ([[line substringToIndex:3] isEqualToString:@"vn "]) { } else if ([[line substringToIndex:2] isEqualToString:@"v "]) { } else if ([[line substringToIndex:2] isEqualToString:@"f "]) { } } }];
相关文章推荐
- iOS并发编程指南
- iOS的轻量级XML解析库 TBXML
- 3dmax导出的obj有时需要转成utf-8格式才能被ios读取
- ios界面与视图的基本知识
- 在iOS中创建静态库
- IOS设计模式第四篇之装饰设计模式的类别设计模式
- iOS 常用字体
- Ios 初学者
- iOS学习之委托及属性
- OC中数组与字符串的拼接与分割
- IOS学习笔记---文件加载和保存
- OC IOS 如何将BCD码转换为IOS 的ACSII码
- OC (IOS) 字符串 字符 NSData相互转换(NSStrng char NSData)
- 调用BIOS中断显示Hello World
- How to Turn on iOS Diagnostics and Send Crash Reports
- iOS的三维透视投影
- Genesis-3D 入门教程—14.发布到iOS平台
- iOS 两种方法实现左右滑动出现侧边菜单栏 slide view
- IOS引用的静态库里包含category文件出现“unrecognized selector”的解决办法
- iOS 设备 检测声音输出设备及耳机麦克风的处理