81 lines
3.7 KiB
C++
81 lines
3.7 KiB
C++
#include <cmath>
|
|
#include <array>
|
|
#include <iostream>
|
|
#include <numbers>
|
|
#include <QApplication>
|
|
#include <QMainWindow>
|
|
#include <QTimer>
|
|
#include <QGridLayout>
|
|
#include <bgtu/computer_graphics_lab_work/renderer_api/color.hpp>
|
|
#include <bgtu/computer_graphics_lab_work/utilities/default_renderer_linear.hpp>
|
|
#include <bgtu/computer_graphics_lab_work/utilities/voxel_painter_exporter_to_packed_array.hpp>
|
|
#include <bgtu/computer_graphics_lab_work/utilities/matrix.hpp>
|
|
#include <bgtu/computer_graphics_lab_work/qt_utilities/separate_threaded_renderer.hpp>
|
|
#include <bgtu/computer_graphics_lab_work/qt_utilities/renderer_widget.hpp>
|
|
#include <bgtu/computer_graphics_lab_work/qt_utilities/keyboard_catcher_widget.hpp>
|
|
#include "sprite_data.hpp"
|
|
#include "sort.hpp"
|
|
#include "model.hpp"
|
|
|
|
namespace BGTU::ComputerGraphicsLabWork::Impl {
|
|
int main(int argc, char **argv) {
|
|
#if 1
|
|
QApplication qApplication{argc, argv};
|
|
|
|
SpriteData::Provider sprites_data_custom{0.1, 0.1, 10};
|
|
|
|
QMainWindow w{};
|
|
|
|
|
|
QtUtilities::KeyboardCatcherWidget kbd{&w};
|
|
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_Left, &sprites_data_custom, &SpriteData::Provider::dec_y_angle);
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_Right, &sprites_data_custom, &SpriteData::Provider::inc_y_angle);
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_Down, &sprites_data_custom, &SpriteData::Provider::dec_x_angle);
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_Up, &sprites_data_custom, &SpriteData::Provider::inc_x_angle);
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_A, &sprites_data_custom, &SpriteData::Provider::dec_y_angle);
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_D, &sprites_data_custom, &SpriteData::Provider::inc_y_angle);
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_S, &sprites_data_custom, &SpriteData::Provider::dec_x_angle);
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_W, &sprites_data_custom, &SpriteData::Provider::inc_x_angle);
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_PageDown, &sprites_data_custom, &SpriteData::Provider::dec_scale);
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_PageUp, &sprites_data_custom, &SpriteData::Provider::inc_scale);
|
|
QObject::connect(&kbd, &QtUtilities::KeyboardCatcherWidget::key_pressed_P, &sprites_data_custom, &SpriteData::Provider::switch_projection);
|
|
|
|
SortSprite sprites_sort{sprites, sprites_count};
|
|
SortSprite *sprites_sort_arr[1] = {&sprites_sort};
|
|
|
|
QtUtilities::SeparateThreadedDefaultRendererLinear<SpriteData> renderer_custom{};
|
|
renderer_custom.set_sprite_data_provider(&sprites_data_custom);
|
|
renderer_custom.set_sprites(reinterpret_cast<RendererApi::Sprite<SpriteData, Utilities::DefaultVoxelDrawerCache::VoxelPainterImpl> *const *>(sprites_sort_arr), 1);
|
|
renderer_custom.set_background(BGTU::ComputerGraphicsLabWork::RendererApi::Color{0, 0, 0});
|
|
|
|
|
|
QGridLayout layout{&kbd};
|
|
kbd.setLayout(&layout);
|
|
QtUtilities::RendererWidget<SpriteData> canvas_custom{&renderer_custom, &kbd};
|
|
layout.addWidget(&canvas_custom, 0, 0);
|
|
QObject::connect(&canvas_custom, &QtUtilities::_RendererWidget_SignalSlots::resized, &sprites_data_custom, &SpriteData::Provider::set_frame_size);
|
|
|
|
|
|
w.setCentralWidget(&kbd);
|
|
w.show();
|
|
|
|
QApplication::exec();
|
|
|
|
return 0;
|
|
#else
|
|
auto x = Utilities::Matrix4d::projection_orto(-2, 2, -1, 1, 0, 2);
|
|
|
|
RendererApi::PointF<3> a{1, 1, 6};
|
|
RendererApi::PointF<3> b = x * a;
|
|
|
|
|
|
return 0;
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
int main(int argc, char **argv) {
|
|
return BGTU::ComputerGraphicsLabWork::Impl::main(argc, argv);
|
|
} |