用GLM来读取显示有纹理的OBJ
来源:互联网 发布:域名投资人 编辑:程序博客网 时间:2024/06/06 04:44
注意这里的GLM不是OPENGL MATHAMATICS LIBRAR——而是an Alias Wavefront OBJ file library,用来操作OBJ文件的一个库,这里用其来读取带纹理的OBJ文件并显示出来
1. 下载GLM库
http://devernay.free.fr/hacks/glm/
此时,最新版本为0.3.2
下载完后,是源码,当我们需要的时候,把这些源码加入我们的工程当中即可
2.由于带纹理的OBJ,需要读取图片文件,我们这里用到了jpeg格式的图片,所以我们需要先配置 libjpeg
配置方法见:http://blog.csdn.net/seamanj/article/details/50631699
3.在项目的预处理定义里面定义:HAVE_LIBJPEG
4.最最重要的一步,我们需要修改一下GLM的原文件
打开glm.c中的glmDraw函数
大概在1966行附近
if(blending == blenditer) {if(newmaterial) {newmaterial = 0;if (mode & GLM_TEXTURE) {//if(newtexture) {//newtexture = 0;glEnd();if(map_diffuse == -1)glBindTexture(_glmTextureTarget, 0);elseglBindTexture(_glmTextureTarget, model->textures[map_diffuse].id);glBegin(GL_TRIANGLES);//}}
把如下语句注释掉,这是因为没有纹理的时候, newtexture为0,但是此时需要把_glmTextureTarget绑到0上,即取消绑定,不让画的东西有纹理贴上去。 但如果按原来的代码执行的话,没有纹理的组会调用有纹理组的图片,但是由于程序不会给没有纹理的组画纹理坐标,所以得到的结果是,没有纹理的组取的是纹理的某一点,然后整个没有纹理的组的颜色就是纹理中某点的颜色。
5.在程序中使用,这里只给出关键代码,完整代码见附件
g_model = glmReadOBJ("teeth.obj");glmDraw(g_model, GLM_SMOOTH|GLM_TEXTURE|GLM_MATERIAL);
渲染出来的效果如下:
如果按照自带的代码来的话,渲染效果如下:
源代码在此
注意,源代码用了AntTweakbar,如何配置它,请看
http://blog.csdn.net/seamanj/article/category/5858361
0 0
- 用GLM来读取显示有纹理的OBJ
- Qt实现读取显示obj文件——动态绑定纹理与消除纹理
- Qt实现读取显示obj文件——创建并绑定纹理
- Qt实现读取显示obj文件——多线程加载纹理
- 读取并显示 obj (2)
- MATLAB读取和显示obj文件的数据
- 3D模型(obj文件)加载及纹理显示
- Qt实现读取显示obj文件——读取数据
- Qt实现读取显示obj文件——计算面的单位法向量
- 简单的shader渲染带纹理的OBJ文件
- glm
- quick-3.5 无法正常显示有混合纹理的csb文件
- OpenGL的纹理显示-笔记
- Qt实现读取显示obj文件——说明
- Qt实现读取显示obj文件——归一化坐标
- Qt实现读取显示obj文件——绘制数据
- obj 文件读取 openGL 显示3D图
- 读取Obj格式的模型文件(Dx10)
- 关于进行java学习和Android开发,本人认为的一些基础的入门必需知识,全程手敲
- 网页设计html+css基础知识汇总
- 浅谈正则表达式
- 浅析动态web编程语言--Servlet
- JSP总结(JSP+Servlet+JavaBean)--动态网站开发编程语言
- 用GLM来读取显示有纹理的OBJ
- LFU Cache
- Android自定义带按钮标题栏
- zigzag
- Swing界面布局之代码手写二, 山寨Netbean layout实现
- ZigBee添加用户任务
- JSP点击事件大全
- [leetcode] 179. Largest Number 解题报告
- Greatest Common Divisor 最大公约数 O(n)