3dviewer icon indicating copy to clipboard operation
3dviewer copied to clipboard

是否可以正常启动程序

Open BL961118 opened this issue 5 years ago • 18 comments

您好,我下载了您的文件进行了尝试,搭建好了环境,但是运行出现了比较多的语法错误。请问这个程序本身是可以正常运行的吗?还是需要做一些其他的修改? 希望您能给予一些帮助

BL961118 avatar Mar 19 '20 11:03 BL961118

请问你使用的是什么环境呢?

这个代码在Linux和Windows上能成功编译,我刚才也测试过,在Linux上使用Qt5.14.1, 能成功编译并且运行,代码直接从github clone下来,不需要做任何修改。需要下载glm这个库。

wkcn avatar Mar 20 '20 12:03 wkcn

我使用的是win10系统,安装了vs2012和QT5.0.2,glm库也已经加进来了。请问您的windows上是如何配置的呢?能否告知一下,我作为参考再试试

BL961118 avatar Mar 20 '20 12:03 BL961118

可能需要把shadow build的勾取消掉,我记得没有额外的配置了。

你编译的时候,遇到的编译错误信息是怎样的呢?可以粘贴到这里吗?

wkcn avatar Mar 20 '20 14:03 wkcn

第一次运行的时候出现了这个报错。我查看了我的QT安装目录下没有找到这个文件。不知道是不是版本问题呢 error C1083: 无法打开包括文件:“QOpenGLWidget”: No such file or directory

BL961118 avatar Mar 20 '20 14:03 BL961118

我现在没有Windows的开发环境可以测试。 Linux上是可以编译的,代码是没有问题的。

“QOpenGLWidget”: No such file or directory 看上去是Qt配置的问题,可以尝试这个解决方法: https://blog.csdn.net/weixin_30267697/article/details/95825706

这里有编译好的Windows下的二进制版本: https://github.com/wkcn/3dviewer/releases

wkcn avatar Mar 20 '20 16:03 wkcn

非常感谢您的帮助已经解决了这一问题。但在运行时出现了这样的报错 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 "void __cdecl read_mtl(class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::map<class std::basic_string<char,struct std::char_traits,class std::allocator >,struct MTL,struct std::less<class std::basic_string<char,struct std::char_traits,class std::allocator > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits,class std::allocator > const ,struct MTL> > > &)" (?read_mtl@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAV?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UMTL@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UMTL@@@std@@@2@@2@@Z),该符号在函数 "class Model __cdecl loadObj(class std::basic_string<char,struct std::char_traits,class std::allocator >)" (?loadObj@@YA?AVModel@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 中被引用 我排查原因时发现read_mtl函数似乎未在工程内定义,导致了报错 请您指正一下

BL961118 avatar Mar 21 '20 21:03 BL961118

@BL961118 已经修复这个Bug了,是因为readlmtl.cpp没有加进*.pro文件里。 谢谢您~

wkcn avatar Mar 22 '20 01:03 wkcn

十分感谢您的及时回复和帮助,工程已经顺利运行(windows的配置可参考VS2015+QT5.9.0)

BL961118 avatar Mar 23 '20 01:03 BL961118

我导入了一个包含材质的obj模型,点线面的信息可以显示出来,但是材质没有加载进来。 不知道这是因为什么导致的。再次请教您一下。

BL961118 avatar Mar 26 '20 05:03 BL961118

如果直接使用图片*.png等格式贴图,需要选择“纹理模式”; 如果使用*.mtl进行贴图,需要选择“材质模式”。

Releases下的二进制文件可以正常在Windows10下运行。

我最新编译的Linux版可以正常显示纹理,但无法显示材质。有可能是最新版的Qt无法加载dds等文件,正在检查中。

wkcn avatar Mar 26 '20 13:03 wkcn

已经查到了原因,是因为5.8以上版本的Qt默认不能加载*.dds文件。

纹理在这一行加载: https://github.com/wkcn/3dviewer/blob/e42dfe2a9f7862d861977a730f9420928663d6f6/src/shape.cpp#L5-L10

Qt5的文档中:https://doc.qt.io/qt-5/qtimageformats-index.html

Note: For security reasons, the Direct Draw Surface (DDS) handler is not built by default since Qt 5.8. Users who still want this handler can build it from the source project.

wkcn avatar Mar 26 '20 13:03 wkcn

不好意思,请问可以教一下如何构建这个DDS吗?对于QT还不是很熟悉,自己没有研究出来。谢谢

BL961118 avatar Mar 27 '20 03:03 BL961118

最简单的方法是使用5.8版本以下的Qt. 或者将贴图转换为Qt支持的格式。 如果要用5.8以上(含5.8)版本的Qt, 需要下载Qt的源码编译Qt, 这个比较麻烦。

wkcn avatar Mar 27 '20 04:03 wkcn

我可以写一个dds转tiff的脚本

wkcn avatar Mar 27 '20 04:03 wkcn

在官网上QT版本直接从5.1跳至5.9,中间的版本找不到下载资源,所以用了高版本。不知道为什么会出现这种现象。

BL961118 avatar Mar 27 '20 04:03 BL961118

5.8版本以上的都不支持dds文件。Qt的发行版本方面我不清楚。

wkcn avatar Mar 27 '20 04:03 wkcn

我测试了一下,把贴图转换成*.png格式,是可以正常显示的。但是*.tiff, *.tga, *.webp等格式是无法读取的。原因是新版Qt的QImage无法读取这些格式的图片。

wkcn avatar Mar 27 '20 04:03 wkcn

我的模型一共是包含三个文件obj、mtl、jpg(在mtl里用到的纹理图片),点击添加模型加载进来以后就丢失了纹理,在纹理模式和材质模式下都没有显示。这是不是说明读取纹理失败了呢

BL961118 avatar Mar 27 '20 05:03 BL961118