Qt下实现3DS文件的读入和显示
在实现了glut框架下读入和显示3DS文件成功后,我开始了在Qt这个成熟又有活力的框架下读入和显示3DS文件。(原文出自http://blog.csdn.net/jiangcaiyang123,请转载时注明出处,谢谢。)
演示程序下载地址:这里
源代码下载地址:这里
在这次移植中,我没有使用自己的三维数学库,而是使用了Qt内置的数学库。所以需要在头文件中包含QVector3D、QMatrix4x4等头文件。使用了这些头文件之后感觉Qt这一点做得很充分,我们想的它都给我们想好了。方便虽方便,在移植的过程中我还是遇到了诸多困难。
首先还是MinGW编译器的问题,可能我的设计有一些问题吧。就是最好不在Vector数据成员前面添加数据指针,否则在Vector::size( )出了某个成员函数(这个函数应该是含有Vector::push_back()一类的语句)的作用域之后再调用就会出错。具体来说,通常是这两种情况:
class AClass
{
public:
...
private:
OtherClass* m_pOC;
Qvector<OtherStruct> m_Data;
};
class AClass: publicBaseClass
{
public:
...
private:
Qvector<OtherStruct> m_Data;
};
在两种情况中,m_Data的size( )成员很有可能会出错。原因大概是前一个指针(或来自于m_pOC,或来自于指向基类BaseClass的指针)的内容将Vector<OtherStruct>m_Data类似于m_Size的成员给“擦洗”掉了。所以很有可能会出错。这个问题在std::vector中有,在QVector中也存在,只要是我使用了MinGW4.4,就可能会出现这个问题。解决方法就是避免以上两种情况,在使用指针的时候还是需要格外小心。
另外一个很困扰的问题是有关QImage存储的问题。QImage类从一个文件中读取图片,但是这个图片数据在类中的内部数据是上下颠倒的,也就是说我想要访问QImage中第一个像素的数据,需要调用QImage::mirror( )函数来将颠倒的数据扳正再访问,像这样:image.mirror( ).constBits( )[0]。这一点在纹理的显示中要引起注意,我就是因为这点曾怀疑是不是纹理贴错了,导致半天都没有出结果。
解决了这几个问题,尝试着读取几个3DS文件,发现还不错。只是在显示模型矩阵的时候出现了问题,有的时候模型的位置似乎不对。在Ubuntu实验下会出现深度测试出错的情况,现在我还不清楚该如何解决。不过完成了一件大事不应该庆祝一下么?
分享到:
相关推荐
在实现了glut框架下读入和显示3DS文件成功后,我开始了在Qt这个成熟又有活力的框架下读入和显示3DS文件。 在这次移植中,我没有使用自己的三维数学库,而是使用了Qt内置的数学库。所以需要在头文件中包含QVector3D...
在实现了glut框架下读入和显示3DS文件成功后,我开始了在Qt这个成熟又有活力的框架下读入和显示3DS文件。 在这次移植中,我没有使用自己的三维数学库,而是使用了Qt内置的数学库。所以需要在头文件中包含QVector3D...
我用的是Qt5.5实现的读取3DS文件的程序,如果用不了可以把里面的核心代码一直到你的程序里
qt读取stl文件并进行显示
qt编写,文件列表显示,具体操作函数未添加
使用Qt 实现复制文件 根据复制文件的大小 进度条显示复制进度。代码可以直接复用。
运用Qt框架实现文件搜索,将文件搜索算法进行改良,可以浏览文件夹里面的文件进行搜索,可以双击表里面的文件进行编辑,支持.docx、.xlsx、.pptx、.accdb、.txt等文件格式的编辑,供学习和研究。
Qt5.8用ftp实现上传和下载文件,并带进度条显示
OpenGL实现3DS文件中的模型自由旋转
Qt+libcurl实现FTP文件上传和下载Qt+libcurl实现FTP文件上传和下载
做个项目要求加载3DS模型,本来打算用QT3D的,搞了几天也没有在windows下安装成功,所以只能利用openGL 函数加载了,这个例子在QT5.2.1、vs2010环境下,利用OpenGL函数加载3ds模型,我是在vs2010环境中开发这个工程...
在Qt4.6.2下重新实现的导入3DS模型的代码,只是做了一个代码的移植,重新实现了drawBackground()函数,将opengl图形画在QGraphicsView上,更加灵活。3DS导入的主要代码来自Ronny Andr?Reierstad写的一个叫做3DS ...
QT4不支持JSON格式,QT5自带了库,所以QT4需要引入第三方,这里使用的是Eeli Reilin的QtJson。本资源是对json库的实现案例,适合学习和理解json库的qt读写使用。
一个简单的Demo,在树莓派4B的Qt上实现将DS18B20的数据显示到 lcdNumber上。 实测可用
用Qt来实现这么一个文件浏览器,实现以下功能: 1.可以显示指定目录下的文件列表; 2.鼠标双击文件列表里的文件夹,可以进入其子文件夹,也可返回上一级。
Qt5下加载shape文件,按照shape的各个字段显示,并点击单元格显示图片。
Qt使用QtWebApp搭建Http服务器实现文件下载
Qt实现字体文件的加载和删除
资源中包括《HEX文件格式解析.pdf》文章,使用QT实现HEX文件生成、HEX文件解析、文件读写及文件拼接功能的工程源码,因项目开发写的工程,可以直接使用,也可作为HEX文件操作参考。
使用 Qmesh 加载 obj 文件 使用 QtextureImage 加载贴图文件 使用 QDiffuseSpecularMaterial 提供光照 说明:官方示例中有创建场景相机等代码, cpp文件只包含载入核心代码.