README screenshots.
This commit is contained in:
@@ -33,12 +33,14 @@ MainWindow::MainWindow(QWidget * parent) : QMainWindow(parent)
|
||||
|
||||
// Add GUI 'view' toolbar option to show debug console.
|
||||
ui_->menuView->addAction(qtkWidget->getActionToggleConsole());
|
||||
|
||||
// Refresh GUI widgets when scene or objects are updated.
|
||||
connect(qtkWidget->getScene(),
|
||||
&Qtk::Scene::sceneUpdated,
|
||||
this,
|
||||
&MainWindow::refreshScene);
|
||||
connect(qtkWidget, &Qtk::QtkWidget::objectFocusChanged,
|
||||
connect(qtkWidget,
|
||||
&Qtk::QtkWidget::objectFocusChanged,
|
||||
ui_->qtk__ToolBox,
|
||||
&Qtk::ToolBox::updateFocus);
|
||||
}
|
||||
@@ -71,8 +73,8 @@ MainWindow::~MainWindow()
|
||||
|
||||
MainWindow * MainWindow::getMainWindow()
|
||||
{
|
||||
static MainWindow window;
|
||||
return &window;
|
||||
static auto * window = new MainWindow;
|
||||
return window;
|
||||
}
|
||||
|
||||
Qtk::QtkWidget * MainWindow::getQtkWidget(int64_t index)
|
||||
|
||||
@@ -48,10 +48,9 @@ namespace Ui
|
||||
* Any application using a QtkWidget can set a custom scene in their main
|
||||
* function. See the MainWindow::MainWindow constructor as an example.
|
||||
*/
|
||||
class EmptyScene : public Qtk::Scene {
|
||||
void init() override {
|
||||
setSceneName("Empty Scene");
|
||||
}
|
||||
class EmptyScene : public Qtk::Scene
|
||||
{
|
||||
void init() override { setSceneName("Empty Scene"); }
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -260,8 +260,8 @@ void QtkScene::init()
|
||||
/* Test spartan Model with phong lighting, specular and normal mapping. */
|
||||
model = addObject(new Qtk::Model("spartanTest",
|
||||
":/models/models/spartan/spartan.obj",
|
||||
":/shaders/model-normals.vert",
|
||||
":/shaders/model-normals.frag"));
|
||||
":/shaders/model-phong.vert",
|
||||
":/shaders/model-phong.frag"));
|
||||
model->getTransform().setTranslation(0.0f, -1.0f, 10.0f);
|
||||
model->getTransform().scale(2.0f);
|
||||
model->setUniform("uMaterial.ambient", QVector3D(1.0f, 1.0f, 1.0f));
|
||||
|
||||
@@ -83,7 +83,11 @@ void QtkWidget::initializeGL()
|
||||
// Connect the frameSwapped signal to call the update() function
|
||||
connect(this, SIGNAL(frameSwapped()), this, SLOT(update()));
|
||||
|
||||
toggleConsole();
|
||||
// Add the debug console widget to the window and set its hidden state.
|
||||
MainWindow::getMainWindow()->addDockWidget(
|
||||
Qt::DockWidgetArea::BottomDockWidgetArea, mConsole);
|
||||
mConsole->setHidden(!mConsoleActive);
|
||||
|
||||
// Initialize OpenGL debug context
|
||||
mDebugLogger = new QOpenGLDebugLogger(this);
|
||||
if (mDebugLogger->initialize()) {
|
||||
@@ -144,15 +148,8 @@ void QtkWidget::setScene(Scene * scene)
|
||||
|
||||
void QtkWidget::toggleConsole()
|
||||
{
|
||||
if (mConsoleActive) {
|
||||
mConsole->setHidden(true);
|
||||
mConsoleActive = false;
|
||||
} else {
|
||||
MainWindow::getMainWindow()->addDockWidget(
|
||||
Qt::DockWidgetArea::BottomDockWidgetArea, mConsole);
|
||||
mConsole->setHidden(false);
|
||||
mConsoleActive = true;
|
||||
}
|
||||
mConsole->setHidden(mConsoleActive);
|
||||
mConsoleActive = !mConsoleActive;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -210,7 +210,7 @@ namespace Qtk
|
||||
QOpenGLDebugLogger * mDebugLogger;
|
||||
Qtk::Scene * mScene;
|
||||
Qtk::DebugConsole * mConsole;
|
||||
bool mConsoleActive = false;
|
||||
bool mConsoleActive = true;
|
||||
};
|
||||
} // namespace Qtk
|
||||
|
||||
|
||||
@@ -41,36 +41,33 @@ void Qtk::TreeView::updateView(const Qtk::Scene * scene)
|
||||
mSceneName = scene->getSceneName();
|
||||
auto objects = scene->getObjects();
|
||||
for (const auto & object : objects) {
|
||||
auto item =
|
||||
new QTreeWidgetItem(QStringList(QString(object->getName().c_str())));
|
||||
ui->treeWidget->insertTopLevelItem(0, item);
|
||||
QStringList list(QStringList(QString(object->getName().c_str())));
|
||||
ui->treeWidget->insertTopLevelItem(0, new QTreeWidgetItem(list));
|
||||
}
|
||||
}
|
||||
|
||||
void Qtk::TreeView::itemFocus(QTreeWidgetItem * item, int column)
|
||||
{
|
||||
QString name = item->text(column);
|
||||
const QString & name = item->text(column);
|
||||
auto scene = MainWindow::getMainWindow()->getQtkWidget()->getScene();
|
||||
auto & transform = Qtk::Scene::getCamera().getTransform();
|
||||
auto object = scene->getObject(name);
|
||||
Transform3D * objectTransform;
|
||||
// If the object is a mesh or model, focus the camera on it.
|
||||
if (object == Q_NULLPTR) {
|
||||
qDebug() << "Attempt to get non-existing object with name '" << name
|
||||
<< "'\n";
|
||||
} else if (object->getType() == Object::QTK_MESH) {
|
||||
objectTransform = &dynamic_cast<MeshRenderer *>(object)->getTransform();
|
||||
} else if (object->getType() == Object::QTK_MODEL) {
|
||||
objectTransform = &dynamic_cast<Model *>(object)->getTransform();
|
||||
return;
|
||||
}
|
||||
auto focusScale = objectTransform->getScale();
|
||||
const Transform3D & objectTransform = object->getTransform();
|
||||
|
||||
auto & camera_transform = Qtk::Scene::getCamera().getTransform();
|
||||
auto focusScale = objectTransform.getScale();
|
||||
float width = focusScale.x() / 2.0f;
|
||||
float height = focusScale.y() / 2.0f;
|
||||
QVector3D pos = objectTransform->getTranslation();
|
||||
QVector3D pos = objectTransform.getTranslation();
|
||||
// pos.setX(pos.x() + width);
|
||||
pos.setY(pos.y() + height);
|
||||
transform.setTranslation(pos);
|
||||
transform.translate(0.0f, 0.0f, 3.0f);
|
||||
camera_transform.setTranslation(pos);
|
||||
camera_transform.translate(0.0f, 0.0f, 3.0f);
|
||||
|
||||
// Emit signal from qtk widget for new object focus. Triggers GUI updates.
|
||||
emit MainWindow::getMainWindow() -> getQtkWidget()->objectFocusChanged(name);
|
||||
|
||||
@@ -216,7 +216,7 @@ namespace Qtk
|
||||
/**
|
||||
* @return Transform3D attached to this MeshRenderer.
|
||||
*/
|
||||
inline Transform3D & getTransform() { return mTransform; }
|
||||
inline Transform3D & getTransform() override { return mTransform; }
|
||||
|
||||
[[nodiscard]] inline std::string getVertexShader() const override
|
||||
{
|
||||
|
||||
@@ -129,7 +129,7 @@ namespace Qtk
|
||||
/**
|
||||
* @return Transform3D attached to this Model.
|
||||
*/
|
||||
inline Transform3D & getTransform() { return mTransform; }
|
||||
inline Transform3D & getTransform() override { return mTransform; }
|
||||
|
||||
[[nodiscard]] inline std::string getVertexShader() const override
|
||||
{
|
||||
|
||||
@@ -111,6 +111,11 @@ namespace Qtk
|
||||
return mTransform;
|
||||
}
|
||||
|
||||
[[nodiscard]] inline virtual Transform3D & getTransform()
|
||||
{
|
||||
return mTransform;
|
||||
}
|
||||
|
||||
[[nodiscard]] inline virtual std::string getVertexShader() const
|
||||
{
|
||||
return "Base Object has no vertex shader.";
|
||||
|
||||
@@ -118,11 +118,9 @@ void Scene::setSkybox(Skybox * skybox)
|
||||
|
||||
void Scene::initSceneObjectName(Object * object)
|
||||
{
|
||||
if (!mObjectCount.count(object->getName())) {
|
||||
mObjectCount[object->getName()] = 1;
|
||||
} else {
|
||||
mObjectCount[object->getName()]++;
|
||||
}
|
||||
mObjectCount[object->getName()] = mObjectCount.count(object->getName()) + 1;
|
||||
|
||||
// If the object exists make it's name unique.
|
||||
auto count = mObjectCount[object->getName()];
|
||||
if (count > 1) {
|
||||
object->setName(object->getName() + " (" + std::to_string(count) + ")");
|
||||
|
||||
Reference in New Issue
Block a user