aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bottone <nick@bottone.io>2023-12-08 15:03:09 -0500
committerNicholas Bottone <nick@bottone.io>2023-12-08 15:03:09 -0500
commit3c39ba9ce8710332c87e713d0881fcc7a510b8f2 (patch)
tree7830158596ed807c8661cbb89673245365fe42ee
parentf5b9e57575cd0ab35fc3d5658e86fede76cca46b (diff)
Fix cameraData position and up arrays to allow for 3-4 elements
-rw-r--r--.gitignore3
-rw-r--r--src/utils/scenefilereader.cpp48
2 files changed, 39 insertions, 12 deletions
diff --git a/.gitignore b/.gitignore
index bd423f0..bd664f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,5 +30,8 @@
*.exe
*.out
*.app
+
+# Misc
build/
.vscode/
+.DS_Store
diff --git a/src/utils/scenefilereader.cpp b/src/utils/scenefilereader.cpp
index 049219e..ad744a5 100644
--- a/src/utils/scenefilereader.cpp
+++ b/src/utils/scenefilereader.cpp
@@ -447,17 +447,23 @@ bool ScenefileReader::parseCameraData(const QJsonObject &cameradata) {
// Parse the camera data
if (cameradata["position"].isArray()) {
QJsonArray position = cameradata["position"].toArray();
- if (position.size() != 3) {
- std::cout << "cameraData position must have 3 elements" << std::endl;
+ if (position.size() != 3 && position.size() != 4) {
+ std::cout << "cameraData position must have 3-4 elements" << std::endl;
return false;
}
- if (!position[0].isDouble() || !position[1].isDouble() || !position[2].isDouble()) {
+ if (!position[0].isDouble() || !position[1].isDouble() || !position[2].isDouble() || (position.size() == 4 && !position[3].isDouble())) {
std::cout << "cameraData position must be a floating-point value" << std::endl;
return false;
}
m_cameraData.pos.x = position[0].toDouble();
m_cameraData.pos.y = position[1].toDouble();
m_cameraData.pos.z = position[2].toDouble();
+ if (position.size() == 4) {
+ m_cameraData.pos.w = position[3].toDouble();
+ }
+ else {
+ m_cameraData.pos.w = 1.f;
+ }
}
else {
std::cout << "cameraData position must be an array" << std::endl;
@@ -466,17 +472,23 @@ bool ScenefileReader::parseCameraData(const QJsonObject &cameradata) {
if (cameradata["up"].isArray()) {
QJsonArray up = cameradata["up"].toArray();
- if (up.size() != 3) {
- std::cout << "cameraData up must have 3 elements" << std::endl;
+ if (up.size() != 3 && up.size() != 4) {
+ std::cout << "cameraData up must have 3-4 elements" << std::endl;
return false;
}
- if (!up[0].isDouble() || !up[1].isDouble() || !up[2].isDouble()) {
+ if (!up[0].isDouble() || !up[1].isDouble() || !up[2].isDouble() || (up.size() == 4 && !up[3].isDouble())) {
std::cout << "cameraData up must be a floating-point value" << std::endl;
return false;
}
m_cameraData.up.x = up[0].toDouble();
m_cameraData.up.y = up[1].toDouble();
m_cameraData.up.z = up[2].toDouble();
+ if (up.size() == 4) {
+ m_cameraData.up.w = up[3].toDouble();
+ }
+ else {
+ m_cameraData.up.w = 1.f;
+ }
}
else {
std::cout << "cameraData up must be an array" << std::endl;
@@ -516,17 +528,23 @@ bool ScenefileReader::parseCameraData(const QJsonObject &cameradata) {
if (cameradata.contains("look")) {
if (cameradata["look"].isArray()) {
QJsonArray look = cameradata["look"].toArray();
- if (look.size() != 3) {
- std::cout << "cameraData look must have 3 elements" << std::endl;
+ if (look.size() != 3 && look.size() != 4) {
+ std::cout << "cameraData look must have 3-4 elements" << std::endl;
return false;
}
- if (!look[0].isDouble() || !look[1].isDouble() || !look[2].isDouble()) {
+ if (!look[0].isDouble() || !look[1].isDouble() || !look[2].isDouble() || (look.size() == 4 && !look[3].isDouble())) {
std::cout << "cameraData look must be a floating-point value" << std::endl;
return false;
}
m_cameraData.look.x = look[0].toDouble();
m_cameraData.look.y = look[1].toDouble();
m_cameraData.look.z = look[2].toDouble();
+ if (look.size() == 4) {
+ m_cameraData.look.w = look[3].toDouble();
+ }
+ else {
+ m_cameraData.look.w = 1.f;
+ }
}
else {
std::cout << "cameraData look must be an array" << std::endl;
@@ -536,17 +554,23 @@ bool ScenefileReader::parseCameraData(const QJsonObject &cameradata) {
else if (cameradata.contains("focus")) {
if (cameradata["focus"].isArray()) {
QJsonArray focus = cameradata["focus"].toArray();
- if (focus.size() != 3) {
- std::cout << "cameraData focus must have 3 elements" << std::endl;
+ if (focus.size() != 3 && focus.size() != 4) {
+ std::cout << "cameraData focus must have 3-4 elements" << std::endl;
return false;
}
- if (!focus[0].isDouble() || !focus[1].isDouble() || !focus[2].isDouble()) {
+ if (!focus[0].isDouble() || !focus[1].isDouble() || !focus[2].isDouble() || (focus.size() == 4 && !focus[3].isDouble())) {
std::cout << "cameraData focus must be a floating-point value" << std::endl;
return false;
}
m_cameraData.look.x = focus[0].toDouble();
m_cameraData.look.y = focus[1].toDouble();
m_cameraData.look.z = focus[2].toDouble();
+ if (focus.size() == 4) {
+ m_cameraData.look.w = focus[3].toDouble();
+ }
+ else {
+ m_cameraData.look.w = 1.f;
+ }
}
else {
std::cout << "cameraData focus must be an array" << std::endl;