Я пытаюсь отобразить файл STL в Qt3DWindow.
Я начал с примера кода в примере Qt 3D Basic shape C++ и добавил код, который, по моему мнению, должен отображать STL как QMesh.
Я также добавил тор в представление для проверки работоспособности камеры и контроллера, и они действительно работают (я могу просматривать тор).< /p>
Кроме того, я подключил сигнал QMesh::statusChanged, чтобы убедиться, что сетка stl успешно загружается (и это так).
Кроме того, я проверил, что файл stl загружается в meshlab без проблем.
Таким образом, тор виден, а сетка stl — нет.
Для полноты картины моя среда — Qt 6.7 .1 в Fedora 40.
Что я пропустил?
Весь проект находится на https://github.com/StevePunak/test3d.git, но соответствующие код здесь:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow();
view->defaultFrameGraph()->setClearColor(QColor(Qt::white));
// Root entity
Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();
// ----------------------- My STL mesh code BEGIN -----------------------
// Transform for positioning and scaling
Qt3DCore::QTransform *stlTransform = new Qt3DCore::QTransform();
stlTransform->setScale(1.0f);
// Material for the STL
Qt3DExtras::QPhongMaterial *stlMaterial = new Qt3DExtras::QPhongMaterial();
stlMaterial->setAmbient(QColor(Qt::blue));
// STL mesh
Qt3DRender::QMesh *stlMesh = new Qt3DRender::QMesh();
stlMesh->setSource(QUrl::fromLocalFile(":/storm.stl"));
connect(stlMesh, &Qt3DRender::QMesh::statusChanged, this, &MainWindow::onMeshStatusChanged); // sanity check
// Entity for the mesh
Qt3DCore::QEntity *meshEntity = new Qt3DCore::QEntity(rootEntity);
meshEntity->addComponent(stlMesh);
meshEntity->addComponent(stlTransform);
meshEntity->addComponent(stlMaterial);
// ----------------------- My STL mesh code END -----------------------
// Create Torus from Qt example as a sanity check
Qt3DExtras::QPhongMaterial *torusMaterial = new Qt3DExtras::QPhongMaterial();
torusMaterial->setAmbient(QColor(Qt::blue));
Qt3DCore::QEntity *torusEntity = new Qt3DCore::QEntity(rootEntity);
Qt3DExtras::QTorusMesh *torusMesh = new Qt3DExtras::QTorusMesh;
torusMesh->setRadius(5);
torusMesh->setMinorRadius(1);
torusMesh->setRings(100);
torusMesh->setSlices(20);
Qt3DCore::QTransform *torusTransform = new Qt3DCore::QTransform;
torusTransform->setScale3D(QVector3D(1.5, 1, 0.5));
torusTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1, 0, 0), 45.0f));
torusEntity->addComponent(torusMesh);
torusEntity->addComponent(torusTransform);
torusEntity->addComponent(torusMaterial);
// Camera
Qt3DRender::QCamera *camera = view->camera();
camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
camera->setPosition(QVector3D(0, 0, 10.0f));
camera->setViewCenter(QVector3D(0, 0, 0));
// Camera controller
Qt3DExtras::QOrbitCameraController *camController = new Qt3DExtras::QOrbitCameraController(rootEntity);
camController->setCamera(camera);
view->setRootEntity(rootEntity);
view->show();
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ot-visible
QMesh в Qt3DWindow не виден [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
1731966161
Anonymous
Я пытаюсь отобразить файл STL в Qt3DWindow.
Я начал с примера кода в примере Qt 3D Basic shape C++ и добавил код, который, по моему мнению, должен отображать STL как QMesh.
Я также добавил тор в представление для проверки работоспособности камеры и контроллера, и они действительно работают (я могу просматривать тор).< /p>
Кроме того, я подключил сигнал QMesh::statusChanged, чтобы убедиться, что сетка stl успешно загружается (и это так).
Кроме того, я проверил, что файл stl загружается в meshlab без проблем.
Таким образом, тор виден, а сетка stl — нет.
Для полноты картины моя среда — Qt 6.7 .1 в Fedora 40.
Что я пропустил?
Весь проект находится на https://github.com/StevePunak/test3d.git, но соответствующие код здесь:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow();
view->defaultFrameGraph()->setClearColor(QColor(Qt::white));
// Root entity
Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();
// ----------------------- My STL mesh code BEGIN -----------------------
// Transform for positioning and scaling
Qt3DCore::QTransform *stlTransform = new Qt3DCore::QTransform();
stlTransform->setScale(1.0f);
// Material for the STL
Qt3DExtras::QPhongMaterial *stlMaterial = new Qt3DExtras::QPhongMaterial();
stlMaterial->setAmbient(QColor(Qt::blue));
// STL mesh
Qt3DRender::QMesh *stlMesh = new Qt3DRender::QMesh();
stlMesh->setSource(QUrl::fromLocalFile(":/storm.stl"));
connect(stlMesh, &Qt3DRender::QMesh::statusChanged, this, &MainWindow::onMeshStatusChanged); // sanity check
// Entity for the mesh
Qt3DCore::QEntity *meshEntity = new Qt3DCore::QEntity(rootEntity);
meshEntity->addComponent(stlMesh);
meshEntity->addComponent(stlTransform);
meshEntity->addComponent(stlMaterial);
// ----------------------- My STL mesh code END -----------------------
// Create Torus from Qt example as a sanity check
Qt3DExtras::QPhongMaterial *torusMaterial = new Qt3DExtras::QPhongMaterial();
torusMaterial->setAmbient(QColor(Qt::blue));
Qt3DCore::QEntity *torusEntity = new Qt3DCore::QEntity(rootEntity);
Qt3DExtras::QTorusMesh *torusMesh = new Qt3DExtras::QTorusMesh;
torusMesh->setRadius(5);
torusMesh->setMinorRadius(1);
torusMesh->setRings(100);
torusMesh->setSlices(20);
Qt3DCore::QTransform *torusTransform = new Qt3DCore::QTransform;
torusTransform->setScale3D(QVector3D(1.5, 1, 0.5));
torusTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1, 0, 0), 45.0f));
torusEntity->addComponent(torusMesh);
torusEntity->addComponent(torusTransform);
torusEntity->addComponent(torusMaterial);
// Camera
Qt3DRender::QCamera *camera = view->camera();
camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
camera->setPosition(QVector3D(0, 0, 10.0f));
camera->setViewCenter(QVector3D(0, 0, 0));
// Camera controller
Qt3DExtras::QOrbitCameraController *camController = new Qt3DExtras::QOrbitCameraController(rootEntity);
camController->setCamera(camera);
view->setRootEntity(rootEntity);
view->show();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79201075/qmesh-in-qt3dwindow-is-not-visible[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия