Qt3D加载obj文件时没有颜色没有旋转
Posted
技术标签:
【中文标题】Qt3D加载obj文件时没有颜色没有旋转【英文标题】:Qt3D no color no rotation when loading obj file 【发布时间】:2017-11-06 05:59:55 【问题描述】:我正在尝试创建一个最小的 obj 文件查看器。以下是我的代码,主要是复制粘贴了一些小的修改。
#include <QGuiApplication>
#include <QApplication>
#include <Qt3DCore/QEntity>
#include <Qt3DCore/QTransform>
#include <Qt3DCore/QAspectEngine>
#include <Qt3DRender/qrenderaspect.h>
#include <Qt3DRender/QCamera>
#include <Qt3DRender/QMaterial>
#include <Qt3DRender/QMesh>
#include <Qt3DExtras/Qt3DWindow>
#include <Qt3DExtras/QTorusMesh>
#include <Qt3DExtras/QOrbitCameraController>
#include <Qt3DExtras/QPhongMaterial>
Qt3DCore::QEntity* createTestScene()
Qt3DCore::QEntity* root = new Qt3DCore::QEntity;
Qt3DCore::QEntity* torus = new Qt3DCore::QEntity(root);
Qt3DRender::QMesh* mesh = new Qt3DRender::QMesh(root);
mesh->setSource(QUrl::fromLocalFile("/Users/neel/model.obj"));
Qt3DCore::QTransform* transform = new Qt3DCore::QTransform;
// transform->setScale3D(QVector3D(1.5, 1, 0.5));
transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1,0,0), 45.f ));
Qt3DRender::QMaterial* material = new Qt3DExtras::QPhongMaterial(root);
torus->addComponent(mesh);
torus->addComponent(transform);
torus->addComponent(material);
return root;
int main(int argc, char* argv[])
QApplication app(argc, argv);
Qt3DExtras::Qt3DWindow view;
Qt3DCore::QEntity* scene = createTestScene();
// camera
Qt3DRender::QCamera *camera = view.camera();
camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
camera->setPosition(QVector3D(0, 0, 40.0f));
camera->setViewCenter(QVector3D(0, 0, 0));
// manipulator
Qt3DExtras::QOrbitCameraController* manipulator = new Qt3DExtras::QOrbitCameraController(scene);
manipulator->setLinearSpeed(50.f);
manipulator->setLookSpeed(180.f);
manipulator->setCamera(camera);
view.setRootEntity(scene);
view.show();
return app.exec();
通过上面我可以加载 obj 文件,但有两个问题。
我可以平移和缩放模型,但无法使用鼠标或触控板旋转。如何添加该功能。
我的 obj 文件有不同的颜色。使用此代码,我看到的只是整个模型中的黑色。在其他 obj 查看器中,我可以看到多种颜色。
【问题讨论】:
当你说你的 obj 文件有不同的颜色时,你的意思是它们有每个顶点着色还是你在谈论一个带有漫反射纹理的 mtl 文件? 另外,我在您粘贴的代码中的任何地方都没有看到相机控制器。您需要在添加相机的位置向我们提供更多信息。 好吧,我正在从 Mathematica 将 3d 模型导出为 obj。它是一组具有多种颜色和大小的长方体。这是我的解决方案的可视化。我可以通过其他 obj 文件查看器查看 obj 文件,它以彩色显示。我对3d一无所知。我只知道 qt、C++ 和 Mathematica,我需要在我的应用程序中显示那个 obj。这是我使用的唯一代码。我只是更改了几行代码。其中大部分是复制粘贴的。这是我的应用程序中唯一需要 3d 的非常小的部分。看起来我正在使用 QOrbitCameraController。 好吧,从reference.wolfram.com/language/ref/format/OBJ.html 我们可以推测颜色是每个面的。在这种情况下,您不会使用 QPhongMaterial 类,您应该使用 QPerVertexColorMaterial 类从顶点数据中读取颜色信息。 doc.qt.io/qt-5/qt3dextras-qpervertexcolormaterial.html phong 着色器只是做简单的 blinn-phong 光照。 将QPhongMaterial
替换为QPerVertexColorMaterial
,现在看起来完全是黑色的,没有光没有阴影。
【参考方案1】:
您需要查看 Qt 中的 sceneloader 函数以了解此类加载过程。 我的意思是mtl fui
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于Qt3D加载obj文件时没有颜色没有旋转的主要内容,如果未能解决你的问题,请参考以下文章