https://doc.qt.io/qt-6/qt3d-simple-cpp-example.html
simple-qt3d.pro
TARGET = simple-qt3d.bin
QT += core gui widgets 3dcore 3dextras 3drender 3dinput
SOURCES += simple-qt3d.cc
# dnf install qt5-qt3d-devel
simple-qt3d.cc
#include
#include
// #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// #include
#include
#include
Qt3DCore::QEntity *createScene()
{
Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity;
Qt3DCore::QEntity *torusEntity = new Qt3DCore::QEntity (rootEntity);
Qt3DExtras::QPhongMaterial *material = new Qt3DExtras::QPhongMaterial (rootEntity);
material->setAmbient (QColor ("blue"));
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(material);
Qt3DCore::QEntity *sphereEntity = new Qt3DCore::QEntity(rootEntity);
Qt3DExtras::QSphereMesh *sphereMesh = new Qt3DExtras::QSphereMesh;
sphereMesh->setRadius(3);
sphereMesh->setGenerateTangents(true);
sphereEntity->addComponent(sphereMesh);
sphereEntity->addComponent(material);
return rootEntity;
}
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
Qt3DExtras::Qt3DWindow view;
Qt3DCore::QEntity *scene = createScene();
// 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));
// For camera controls
Qt3DExtras::QOrbitCameraController *camController = new Qt3DExtras::QOrbitCameraController(scene);
camController->setLinearSpeed( 50.0f );
camController->setLookSpeed( 180.0f );
camController->setCamera(camera);
view.setRootEntity(scene);
view.show();
return app.exec();
}
const int N = 3; // pocet rozmeru
const int P = 8; // pocet policek v jedne rade
using namespace Qt3DCore;
using namespace Qt3DExtras;
Qt3DCore::QEntity *createScene()
{
Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity;
QPhongMaterial *whiteMaterial = new QPhongMaterial (rootEntity);
whiteMaterial->setAmbient (QColor ("white"));
Qt3DExtras::QPhongMaterial *yellowMaterial = new Qt3DExtras::QPhongMaterial (rootEntity);
yellowMaterial->setAmbient (QColor ("yellow"));
const float W = 10; // sirka a vyska policka sachovnice
const float H = 0.1; // vyska policka
for (int z = 0; z < P; z++)
for (int x = 0; x < P; x++)
for (int y = 0; y < P; y++)
{
QEntity * boxEntity = new QEntity (rootEntity);
QCuboidMesh * boxMesh = new QCuboidMesh;
boxMesh->setXExtent (W);
boxMesh->setZExtent (W);
boxMesh->setYExtent (H);
Qt3DCore::QTransform * boxTransform = new Qt3DCore::QTransform;
boxTransform->setTranslation (QVector3D (x*W, z*W, y*W));
boxEntity->addComponent (boxMesh);
boxEntity->addComponent (boxTransform);
if ((x+y+z)%2 == 0)
boxEntity->addComponent (whiteMaterial);
else
boxEntity->addComponent (yellowMaterial);
}
}