aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/utils/scenedata.h8
-rw-r--r--src/utils/sceneparser.cpp18
-rw-r--r--src/utils/sceneparser.h2
3 files changed, 21 insertions, 7 deletions
diff --git a/src/utils/scenedata.h b/src/utils/scenedata.h
index 043b84d..e60d0f0 100644
--- a/src/utils/scenedata.h
+++ b/src/utils/scenedata.h
@@ -163,11 +163,13 @@ struct ScenePrimitive {
struct SceneTransformation {
TransformationType type;
- glm::vec3 translate; // Only applicable when translating. Defines t_x, t_y, and t_z, the amounts to translate by, along each axis.
- glm::vec3 scale; // Only applicable when scaling. Defines s_x, s_y, and s_z, the amounts to scale by, along each axis.
- glm::vec3 rotate; // Only applicable when rotating. Defines the axis of rotation; should be a unit vector.
+ glm::vec4 translate; // Only applicable when translating. Defines t_x, t_y, and t_z, the amounts to translate by, along each axis.
+ glm::vec4 scale; // Only applicable when scaling. Defines s_x, s_y, and s_z, the amounts to scale by, along each axis.
+ glm::vec3 rotate3; // Only applicable when rotating. Defines the axis of rotation (for the first 3 axis); should be a unit vector.
+ glm::vec3 rotateW; // Only applicable when rotating. Defines the axis of rotation (for the last 3 axis); should be a unit vector.
float angle; // Only applicable when rotating. Defines the angle to rotate by in RADIANS, following the right-hand rule.
glm::mat4 matrix; // Only applicable when transforming by a custom matrix. This is that custom matrix.
+ glm::vec4 matrixRight4d; // Only applicable when transforming by a custom matrix. This is the 4d translation vector appended to the right of the matrix.
};
// Struct which represents a node in the scene graph/tree, to be parsed by the student's `SceneParser`.
diff --git a/src/utils/sceneparser.cpp b/src/utils/sceneparser.cpp
index 99c4f55..991dcfd 100644
--- a/src/utils/sceneparser.cpp
+++ b/src/utils/sceneparser.cpp
@@ -34,21 +34,25 @@ TextureData loadTextureFromFile(const QString &file) {
}
// helper to handle recursive creation of tree
-void initTree(SceneNode* currentNode, std::vector<RenderShapeData> *shapes, std::vector<SceneLightData> *lights, glm::mat4 currentCTM) {
+void initTree(SceneNode* currentNode, std::vector<RenderShapeData> *shapes, std::vector<SceneLightData> *lights, glm::mat4 currentCTM, glm::vec4 currentTranslation4d) {
for (auto t : currentNode->transformations) {
switch (t->type)
{
case TransformationType::TRANSFORMATION_TRANSLATE:
- currentCTM *= glm::translate(glm::vec3(t->translate[0], t->translate[1], t->translate[2]));
+ currentCTM *= glm::translate(glm::vec3(t->translate));
+ currentTranslation4d *= glm::vec4(t->translate); // TODO
break;
case TransformationType::TRANSFORMATION_SCALE:
- currentCTM *= glm::scale(glm::vec3(t->scale[0], t->scale[1], t->scale[2]));
+ currentCTM *= glm::scale(glm::vec3(t->scale));
+ currentTranslation4d *= glm::vec4(t->scale); // TODO
break;
case TransformationType::TRANSFORMATION_ROTATE:
currentCTM *= glm::rotate(t->angle, glm::vec3(t->rotate[0], t->rotate[1], t->rotate[2]));
+ // TODO: 4d rotation
break;
case TransformationType::TRANSFORMATION_MATRIX:
currentCTM *= glm::mat4(t->matrix);
+ currentTranslation4d *= glm::vec4(t->matrixRight4d); // TODO
break;
default:
std::cout << "Invalid transformation type" << std::endl;
@@ -59,7 +63,13 @@ void initTree(SceneNode* currentNode, std::vector<RenderShapeData> *shapes, std:
for(auto primitive : currentNode->primitives) {
// primitive->material.textureData = loadTextureFromFile(QString::fromStdString(primitive->material.textureMap.filename));
- RenderShapeData rsd = {*primitive, currentCTM, glm::inverse(currentCTM)};
+ RenderShapeData rsd = {
+ primitive: *primitive,
+ ctm: currentCTM,
+ translation4d: currentTranslation4d,
+ inverseCTM: glm::inverse(currentCTM),
+ inverseTranslation4d: glm::inverse(currentTranslation4d)
+ };
shapes->push_back(rsd);
}
diff --git a/src/utils/sceneparser.h b/src/utils/sceneparser.h
index 699d6fb..8155ca8 100644
--- a/src/utils/sceneparser.h
+++ b/src/utils/sceneparser.h
@@ -9,7 +9,9 @@
struct RenderShapeData {
ScenePrimitive primitive;
glm::mat4 ctm; // the cumulative transformation matrix
+ glm::vec4 translation4d; // appended to the right of the ctm (for 4d translation)
glm::mat4 inverseCTM;
+ glm::vec4 inverseTranslation4d; // appended to the right of the inverse ctm (for 4d translation)
};
// Struct which contains all the data needed to render a scene