#include "Qt3DExample.h"
#include <QMesh>
#include <Qt3DWindow>
#include <QCamera>
#include <QInputAspect>
#include <QPointLight>
#include <QTransform>
#include <QFirstPersonCameraController>
#include <QPhongMaterial>
Qt3DExample
::Qt3DExample(QWidget *parent
){
// Root entity
mpRootEntity = new Qt3DCore::QEntity();
Qt3DExtras::Qt3DWindow * pView = new Qt3DExtras::Qt3DWindow();
pCentralWidget->setMinimumSize( 200, 200 );
pCentralWidget->setMaximumSize( 2000, 2000 );
resize( 1000, 1000 );
Qt3DInput::QInputAspect * input = new Qt3DInput::QInputAspect;
pView->registerAspect( input );
// Camera
Qt3DRender::QCamera * cameraEntity = pView->camera();
cameraEntity->lens()->setPerspectiveProjection( 45.0f, 16.0f / 9.0f, 0.1f, 1000.0f );
cameraEntity->setPosition( QVector3D( 0, 0, 20.0f ) );
cameraEntity->setUpVector( QVector3D( 0, 1, 0 ) );
cameraEntity->setViewCenter( QVector3D( 0, 0, 0 ) );
Qt3DCore::QEntity * lightEntity = new Qt3DCore::QEntity( mpRootEntity );
Qt3DRender::QPointLight * light = new Qt3DRender::QPointLight( lightEntity );
light->setColor( "white" );
light->setIntensity( 1 );
lightEntity->addComponent( light );
Qt3DCore::QTransform * lightTransform = new Qt3DCore::QTransform( lightEntity );
lightTransform->setTranslation( cameraEntity->position() );
lightEntity->addComponent( lightTransform );
// For camera controls
Qt3DExtras::QFirstPersonCameraController * camController = new Qt3DExtras::QFirstPersonCameraController( mpRootEntity );
camController->setCamera( cameraEntity );
// Set root object of the scene
pView->setRootEntity( mpRootEntity );
mpMesh = new Qt3DRender::QMesh();
mpMesh->setMeshName( "mesh" );
// Import mesh data from a ply file (Copperkey.ply located at same level of the executable)
QUrl url
= QUrl::fromLocalFile( "Copperkey.ply" );
mpMesh->setSource( url );
auto status = mpMesh->status(); // Returns None
auto pGeometry = mpMesh->geometry(); // Returns NULL
// Mesh Transform
Qt3DCore::QTransform * meshTransform = new Qt3DCore::QTransform();
meshTransform->setScale( 0.1f );
meshTransform->setRotation( QQuaternion::fromAxisAndAngle( QVector3D( 0.0f, 1.0f, 0.0f ), 25.0f ) );
meshTransform->setTranslation( QVector3D( 5.0f, 4.0f, 0.0f ) );
// Mesh material
Qt3DExtras::QPhongMaterial * meshMaterial = new Qt3DExtras::QPhongMaterial();
meshMaterial
->setDiffuse
( QColor( QRgb
( 0xbeb32b
) ) );
// Mesh entity
mpMeshEntity = new Qt3DCore::QEntity( mpRootEntity );
mpMeshEntity->addComponent( mpMesh );
mpMeshEntity->addComponent( meshMaterial );
mpMeshEntity->addComponent( meshTransform );
setCentralWidget( pCentralWidget );
}
void Qt3DExample
::keyPressEvent( QKeyEvent * pEvent
) {
auto status = mpMesh->status(); // Returns Ready
auto pGeometry = mpMesh->geometry(); // Returns a valid pointer
// Set a breakpoint on this line:
int foo = 42;
}