Qt实现读取显示obj文件——绘制数据
来源:互联网 发布:android精品源码 编辑:程序博客网 时间:2024/05/01 00:48
前面的工作做好之后,绘制的代码就没那么麻烦了,但是要注意纹理坐标和面的节点坐标是交替进行的,就是一个纹理坐标,一个节点坐标~否则显示不出来纹理!(成功的图就不发了,估计是要保密的~)
//渲染模型void _glDraw(_GLModel* model, size_t mode){ if (mode & _GL_FLAT && model->list_FaceNormal.size() == 0) { qDebug(T_QString2Char("Flat模式不可用!")); mode &= ~_GL_FLAT; } if (mode & _GL_SMOOTH && model->num_Normals == 0) { qDebug(T_QString2Char("Smooth模式不可用!")); mode &= ~_GL_SMOOTH; } if (mode & _GL_TEXTURE && model->num_Textcoords == 0) { qDebug(T_QString2Char("Texture模式不可用!")); mode &= ~_GL_TEXTURE; } glPushMatrix(); //glTranslatef(model->Center[0], model->Center[1], model->Center[2]); for (size_t i = 0; i < model->num_Faces; i++) { Face f = model->list_Faces[i]; if (mode&_GL_TEXTURE) { glEnable(GL_TEXTURE_2D); if (f.index_Text != -1)//绘制指定的纹理一定要将对应的纹理先启动绑定 glBindTexture(GL_TEXTURE_2D, model->textureArray[f.index_Text]); } glBegin(GL_POLYGON); //glBegin(GL_QUADS); if (mode&_GL_FLAT) { FacetNormal fn = model->list_FaceNormal[f.index_Face]; glNormal3f(fn.NX, fn.NY, fn.NZ); } for (int k = 0; k < f.list_index_Points.size(); k++) { if (mode&_GL_TEXTURE) { TextCoords tc = model->list_Textcoords[f.list_index_TextCoords[k]]; glTexCoord2f(tc.U, tc.V); } if (mode&_GL_SMOOTH&&f.list_index_VertNormals.size()>0) { VertNormals vn = model->list_Normals[f.list_index_VertNormals[k]]; glNormal3f(vn._NX, vn._NY, vn._NZ); } Point3 p = model->list_Vertices[f.list_index_Points[k]]; glVertex3f(p._X, p._Y, p._Z); } glEnd(); } glPopMatrix();}
全部的代码已经放在了GitHub上了,戳我;
代码较为初级和简陋,希望可以帮助到初学者;如果大家想学习更多的三维数据的相关知识,可以下载meshlab相关的源码进行研究,编译可以参考我写的相关文章:编译meshlab;
但是没c++基础确实看的很辛苦!!!
0 0
- Qt实现读取显示obj文件——绘制数据
- Qt实现读取显示obj文件——读取数据
- Qt实现读取显示obj文件——说明
- Qt实现读取显示obj文件——归一化坐标
- Qt实现读取显示obj文件——计算面的单位法向量
- Qt实现读取显示obj文件——创建并绑定纹理
- Qt实现读取显示obj文件——多线程加载纹理
- Qt实现读取显示obj文件——动态绑定纹理与消除纹理
- MATLAB读取和显示obj文件的数据
- Qt读取文件并显示
- vtk实战(十二)——读取.obj文件
- obj 文件读取 openGL 显示3D图
- obj-c 读取文件 。
- openGL读取obj文件
- C++读取OBJ文件中的数据(VS2013)
- Python绘制直方图(Histograms)—从文件中读取数据画图update@2017-05-17
- 读取并显示 obj (2)
- java3d显示obj文件
- elasticsearch text字段排序报错解决
- ngnix反向代理tomcat,动静态分离
- ubuntu16.04环境下部署jdk
- struts2校验(2)
- redis的配置(安装、启动、本机与虚拟机的redis的连接)
- Qt实现读取显示obj文件——绘制数据
- Linux Runtime PM介绍
- 有关DBLINK操作的语句执行机制及优化方式
- R 语言中的S3系统(笔记)
- 2016 年崛起的 JS 项目
- JavaScript使用filter方法实现100以内素数的快速筛选
- 前端根据后端返回的列表数据设变量自己排序
- 【CSS3】使用:not(:last-of-type)简化你的css代码
- javascript基础扎实了,但是很多逻辑性的功能还是不会写?