Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在QtCreator中导入OBJ文件_C++_Qt_Wavefront_Qvector - Fatal编程技术网

C++ 在QtCreator中导入OBJ文件

C++ 在QtCreator中导入OBJ文件,c++,qt,wavefront,qvector,C++,Qt,Wavefront,Qvector,我对使用QtCreator(版本4.10.0,基于Qt5.13.1)是新手。我以customitemgraph为例,希望用新文件替换现有的.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

我对使用QtCreator(版本4.10.0,基于Qt5.13.1)是新手。我以
customitemgraph为例
,希望用新文件替换现有的
.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
QVector::operator[]:“索引超出范围”,文件c:\Users\qt\work\install\include/QtCore/QVector.h,第448行 我试过的 我用记事本打开了
.obj
文件,看到在工作情况下,只有一个
/
字符分隔数字,而在非工作情况下,有两个斜杠,中间没有数字。在用一个斜杠替换了双斜杠之后,什么都没有改变,问题不断出现

我尝试了从中获取的一些简单的
.obj
文件来进一步诊断问题,但这些示例都不起作用

我错过什么了吗?有办法解决这个问题吗?在本例中使用my
.obj
文件的另一种方法?感谢您的帮助。

关于:

我尝试了从中获取一些简单的.obj文件来进一步诊断问题,但这些示例都不起作用

我还从–
cube.obj
中获取了样本:

#此立方体具有不同的材质
#应用于其每个面。
mtllib master.mtl
v 0.000000 2.000000 2.000000
V0.0000000.0000002.000000
v 2.0000000.0000002.000000
v 2.000000 2.000000 2.000000
v 0.000000 2.000000 0.000000
V0.0000000.0000000.000000
v 2.0000000.0000000.000000
v 2.000000 2.000000 0.000000
#8个顶点
g锋
usemtl红
f 1 2 3 4
g背
乌西姆特蓝
f 8 7 6 5
对
usemtl绿
f 4 3 7 8
陀螺
usemtl黄金
f 5 1 4 8
g左
usemtl橙
f 5 6 2 1
g底
紫罗兰
f 2 6 7 3
#6要素
示例引用了我在任何地方都找不到的
master.mtl

因此,我从头开始写了一篇——
master.mtl

#根据需要创建尽可能多的材质
#在obj文件中,每个面都在其应用的面之前按名称引用
纽姆特红
Ka 1.0000000.0000000.000000
Kd 1.0000000.0000000.000000
Ks 0.0000000.0000000.000000
新币0.000000元
纽姆特蓝
Ka 0.0000000.0000001.000000
Kd 0.0000000.0000001.000000
Ks 0.0000000.0000000.000000
新币0.000000元
纽姆特绿酒店
Ka 0.000000 1.000000 0.000000
Kd 0.000000 1.000000 0.000000
Ks 0.0000000.0000000.000000
新币0.000000元
纽姆特黄金
Ka 1.000000 1.000000 0.000000
Kd 1.000000 1.000000 0.000000
Ks 1.0000001.0000000.000000
新币0.000000元
纽姆特橙
Ka 1.0000000.500000 0.000000
Kd 1.0000000.500000 0.000000
Ks 0.0000000.0000000.000000
新币0.000000元
纽姆特紫色
Ka 1.0000000.0000001.000000
Kd 1.0000000.0000001.000000
Ks 0.0000000.0000000.000000
新币0.000000元
然后,我用我们的加载器试了一下,得到了这个:

然后,我修改了
cube.obj
以添加法线

这是一个双斜杠(
/
)出现在面索引中的示例(由于缺少纹理坐标)

带有法线的文件–
cubeN.obj

#此立方体具有不同的材质
#应用于其每个面。
mtllib master.mtl
v 0.000000 2.000000 2.000000
V0.0000000.0000002.000000
v 2.0000000.0000002.000000
v 2.000000 2.000000 2.000000
v 0.000000 2.000000 0.000000
V0.0000000.0000000.000000
v 2.0000000.0000000.000000
v 2.000000 2.000000 0.000000
vn 0 1
VN0-1
越南1 0 0
vn 0 1 0
vn-100
VN0-10
#8个顶点
g锋
usemtl红
F1//12//13//14//1
g背
乌西姆特蓝
f 8//2 7//2 6//2 5//2
对
usemtl绿
f 4//3//3 7//3 8//3
陀螺
usemtl黄金
f 5//4 1//4 4//4 8//4
g左
usemtl橙
f 5//5 6//5 2//5 1//5
g底
紫罗兰
f 2//6//6 7//6 3//6
#6要素


不确定这是否证明了什么,除了样本没有完全损坏(在我们的装载机中)。

我必须承认,今天是我第一次使用QtCreator和QML

与OP相反,我在实验中使用了更简单的样本:

在做了一些修改后,我得到了以下收据:

  • 打开QtCreator中的线框示例。
    样本使用波前OBJ文件
    trefoil.OBJ

  • 在磁盘上找到
    trefoil.obj

    我在
    ../Qt/Examples/Qt-5.13.0/qt3d/exampleresources/assets/obj
    下找到了它

  • 将中的示例文件
    cube.obj
    cubeN.obj
    存储到此文件夹中。
    在本例中,不存在参考材料文件
    master.mtl
    。 据我所知,材料在QML中定义任何加载的材料在任何情况下都将被覆盖

  • 在QtCreator的项目树视图中,将示例文件
    cube.obj
    cubeN.obj
    添加到
    资源
    /
    ../Qt/Examples/Qt-5.13.0/qt3d/exampleresources/obj.qrc
    /
    资产
    /
    /
    obj
    在一个文本编辑器中打开
    ../Qt/Examples/Qt-5.13.0/qt3d/exampleresources/obj.qrc
    ,我发现:

  • 
    资产/obj/trefoil.obj
    资产/obj/toyplane.obj
    资产/obj/ball.obj
    资产/obj/平面-10x10.obj
    资产/obj/material-sphere.obj
    资产/obj/cube.obj
    资产/obj/cubeN.obj
    
  • 我将文件
    QML
    /
    TrefoilKnot.QML
    复制到
    QML
    /
    Cube.QML
    QML
    /
    CubeN.QML
    并分别替换了
    源代码
    条目–
    Cube.QML
  • 导入Qt3D.Core 2.0 导入Qt3D.Render 2.0 实体{ id:根 不动产x:0.0 不动产y:0.0 不动产z: