1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#include <QCoreApplication>
#include <QCommandLineParser>
#include <QImage>
#include <QtCore>
#include <QApplication>
#include <QScreen>
#include <iostream>
#include <QSettings>
#include <QSurfaceFormat>
#include <iostream>
#include "utils/sceneparser.h"
#include "raytracer/raytracer.h"
#include "raytracer/raytracescene.h"
#include "mainwindow.h"
int main(int argc, char *argv[])
{
// QCoreApplication a(argc, argv);
// QCommandLineParser parser;
// parser.addHelpOption();
// parser.addPositionalArgument("config", "Path of the config file.");
// parser.process(a);
// auto positionalArgs = parser.positionalArguments();
// if (positionalArgs.size() != 1) {
// std::cerr << "Not enough arguments. Please provide a path to a config file (.ini) as a command-line argument." << std::endl;
// a.exit(1);
// return 1;
// }
// QSettings settings( positionalArgs[0], QSettings::IniFormat );
// QString iScenePath = settings.value("IO/scene").toString();
// QString oImagePath = settings.value("IO/output").toString();
// RenderData metaData;
// bool success = SceneParser::parse(iScenePath.toStdString(), metaData);
// if (!success) {
// std::cerr << "Error loading scene: \"" << iScenePath.toStdString() << "\"" << std::endl;
// a.exit(1);
// return 1;
// }
// // Raytracing-relevant code starts here
// int width = settings.value("Canvas/width").toInt();
// int height = settings.value("Canvas/height").toInt();
// // Extracting data pointer from Qt's image API
// QImage image = QImage(width, height, QImage::Format_RGBX8888);
// image.fill(Qt::black);
// RGBA *data = reinterpret_cast<RGBA *>(image.bits());
// // Setting up the raytracer
// Config rtConfig{};
// rtConfig.enableShadow = settings.value("Feature/shadows").toBool();
// rtConfig.enableReflection = settings.value("Feature/reflect").toBool();
// rtConfig.enableRefraction = settings.value("Feature/refract").toBool();
// rtConfig.enableTextureMap = settings.value("Feature/texture").toBool();
// rtConfig.enableTextureFilter = settings.value("Feature/texture-filter").toBool();
// rtConfig.enableParallelism = settings.value("Feature/parallel").toBool();
// rtConfig.enableSuperSample = settings.value("Feature/super-sample").toBool();
// rtConfig.enableAntiAliasing = settings.value("Feature/post-process").toBool();
// rtConfig.enableAcceleration = settings.value("Feature/acceleration").toBool();
// rtConfig.enableDepthOfField = settings.value("Feature/depthoffield").toBool();
// rtConfig.maxRecursiveDepth = settings.value("Settings/maximum-recursive-depth").toInt();
// rtConfig.onlyRenderNormals = settings.value("Settings/only-render-normals").toBool();
// RayTracer raytracer{ rtConfig };
// RayTraceScene rtScene{ width, height, metaData };
// // Note that we're passing `data` as a pointer (to its first element)
// // Recall from Lab 1 that you can access its elements like this: `data[i]`
// raytracer.render(data, rtScene);
// // Saving the image
// success = image.save(oImagePath);
// if (!success) {
// success = image.save(oImagePath, "PNG");
// }
// if (success) {
// std::cout << "Saved rendered image to \"" << oImagePath.toStdString() << "\"" << std::endl;
// } else {
// std::cerr << "Error: failed to save image to \"" << oImagePath.toStdString() << "\"" << std::endl;
// }
// a.exit();
// return 0;
QApplication a(argc, argv);
QCoreApplication::setApplicationName("The All Americans 4D Raytracer");
QCoreApplication::setOrganizationName("CS 1230/2230");
// QCoreApplication::setApplicationVersion(QT_VERSION_STR);
QSurfaceFormat fmt;
fmt.setVersion(4, 1);
fmt.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(fmt);
MainWindow w;
w.initialize();
w.resize(800, 600);
w.show();
int return_val = a.exec();
w.finish();
return return_val;
}
|