【发布时间】:2020-02-06 15:05:12
【问题描述】:
我是使用 Qt Creator(版本 4.10.0,基于 Qt 5.13.1)的新手。我已经使用了customitemgraph example,我想用新文件替换现有的.obj 文件。
我从网上下载了一些免费的模型。其中一些有效,但另一些无效。
这里有两个例子。
使用记事本打开的.obj 文件的摘录,该文件正在运行
...
vn 0.3531 -0.8627 -0.3620
vn 0.3815 -0.9243 -0.0148
usemtl Default_OBJ
s 1
f 1/1/1 2/2/2 3/3/3 4/4/4
f 2/2/2 5/5/5 6/6/6 3/3/3
f 4/4/4 3/3/3 7/7/7 8/8/8
...
一个不工作的案例:
...
vn -0.1013 -0.8959 -0.4325
vn -0.1003 -0.8978 -0.4287
usemtl Body
s 1
f 225536//133387 225537//133388 225544//133389 225543//133390
f 225537//133388 225538//133391 225545//133392 225544//133389
f 225538//133391 225539//133393 225546//133394 225545//133392
f 225539//133393 225540//133395 225547//133396 225546//133394
...
当它不起作用时,错误消息是:
tot 4ASSERT failure in QVector<T>::operator[]: "index out of range", file c:\Users\qt\work\install\include/QtCore/qvector.h, line 448
我尝试过的
我用记事本打开了.obj 文件,发现在工作的情况下只有一个/ 字符分隔数字,而在不工作的情况下有// 两个斜杠,中间没有数字。用一个单斜杠替换双斜杠后没有任何变化,问题仍然存在。
我尝试了一些取自here 的简单.obj 文件来进一步诊断问题,但这些示例都不起作用。
我错过了什么吗?有没有解决的办法?在此示例中使用我的 .obj 文件的另一种方法?感谢您的帮助。
【问题讨论】:
-
根据this spec,这些 face 值之间不应有斜线。然而,最终使用的索引太大了。您可以通过在调试器中运行代码并捕获该异常来找出位置。
-
@trojanfoe 谢谢,但您链接的网站是我用于手工制作示例的网站,但它们不起作用。我会尝试使用调试器并更新我的答案......
-
我对斜线的理解是错误的(我看的不够仔细)。让你的解析器处理双斜杠,但为了避免崩溃,在访问它们之前检查向量的长度并在优雅地返回之前生成错误消息(或者如果你不喜欢优雅地抛出异常,这也可以) .
-
@trojanfoe 我刚刚查看了我的 impl。用于波前对象。它读取 _with _ 斜线的面部索引。如果我只注意到我在哪里找到了规范。我是按照……写的。虽然,索引值看起来确实很大。
-
是的,
//可能显示缺少值,而.obj只是完全损坏。