aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2018-04-11 22:24:46 +0100
committerYann Herklotz <ymherklotz@gmail.com>2018-04-11 22:24:46 +0100
commitccdf76463228751dee100b544d854b6f1be5596c (patch)
treebc2a06ba04e56966d63455a013c49193eb339e10
parent99c106ca8ee633fc28fb18e36686aa533b6fa3c9 (diff)
downloadYAGE-ccdf76463228751dee100b544d854b6f1be5596c.tar.gz
YAGE-ccdf76463228751dee100b544d854b6f1be5596c.zip
Adding 3D support
-rw-r--r--CMakeLists.txt2
-rw-r--r--resources/objects/cube.mtl12
-rw-r--r--resources/objects/cube.obj26
-rw-r--r--yage/experimental/camera3d.h13
-rw-r--r--yage/experimental/loader.cpp45
-rw-r--r--yage/experimental/loader.h19
6 files changed, 113 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7958a646..ec0988b3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,7 +15,7 @@ set(CMAKE_CXX_STANDARD 14)
# find other libraries from source
set(EXTERNAL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external)
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/")
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
# GLFW3
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
diff --git a/resources/objects/cube.mtl b/resources/objects/cube.mtl
new file mode 100644
index 00000000..379df14c
--- /dev/null
+++ b/resources/objects/cube.mtl
@@ -0,0 +1,12 @@
+# Blender MTL File: 'None'
+# Material Count: 1
+
+newmtl Material
+Ns 96.078431
+Ka 1.000000 1.000000 1.000000
+Kd 0.640000 0.640000 0.640000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.000000
+d 1.000000
+illum 2
diff --git a/resources/objects/cube.obj b/resources/objects/cube.obj
new file mode 100644
index 00000000..82519cf5
--- /dev/null
+++ b/resources/objects/cube.obj
@@ -0,0 +1,26 @@
+# Blender v2.79 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib cube.mtl
+o Cube
+v 1.000000 -1.000000 -1.000000
+v 1.000000 -1.000000 1.000000
+v -1.000000 -1.000000 1.000000
+v -1.000000 -1.000000 -1.000000
+v 1.000000 1.000000 -0.999999
+v 0.999999 1.000000 1.000001
+v -1.000000 1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+vn 0.0000 -1.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
+vn 0.0000 0.0000 -1.0000
+usemtl Material
+s off
+f 1//1 2//1 3//1 4//1
+f 5//2 8//2 7//2 6//2
+f 1//3 5//3 6//3 2//3
+f 2//4 6//4 7//4 3//4
+f 3//5 7//5 8//5 4//5
+f 5//6 1//6 4//6 8//6
diff --git a/yage/experimental/camera3d.h b/yage/experimental/camera3d.h
index efd96dc0..6a712a17 100644
--- a/yage/experimental/camera3d.h
+++ b/yage/experimental/camera3d.h
@@ -1,8 +1,15 @@
#ifndef YAGE_EXPERIMENTAL_CAMERA3D_H
#define YAGE_EXPERIMENTAL_CAMERA3D_H
-class Camera3D {
-
-}
+#include <glm/glm.hpp>
+
+class Camera3D
+{
+public:
+ Camera3D() = default;
+
+private:
+ glm::mat4
+};
#endif
diff --git a/yage/experimental/loader.cpp b/yage/experimental/loader.cpp
new file mode 100644
index 00000000..a13af1f2
--- /dev/null
+++ b/yage/experimental/loader.cpp
@@ -0,0 +1,45 @@
+#include "loader.h"
+
+#include "../core/exception.h"
+
+#include <fstream>
+#include <sstream>
+
+namespace yage
+{
+
+void load_obj(std::string filename, std::vector<glm::vec4> &vertices,
+ std::vector<glm::vec3> &normals, std::vector<GLushort> &elements)
+{
+ std::ifstream in(filename, std::ios::in);
+
+ if (!in.is_open()) {
+ throw FileLoadException("Could not load obj file '" + filename + "'");
+ }
+
+ std::string line;
+
+ while (getline(in, line)) {
+ if (line.substr(0, 2) == "v ") {
+ std::istringstream s(line.substr(2));
+ glm::vec4 v;
+ s >> v.x >> v.y >> v.z;
+ v.w = 1.f;
+ vertices.push_back(v);
+ } else if (line.substr(0, 2) == "f ") {
+ std::istringstream s(line.substr(2));
+ GLushort a, b, c;
+ s >> a >> b >> c;
+ a--, b--, c--;
+ elements.push_back(a);
+ elements.push_back(b);
+ elements.push_back(c);
+ } else {
+ // do nothing otherwise
+ }
+ }
+
+ normals.resize()
+}
+
+} // namespace yage
diff --git a/yage/experimental/loader.h b/yage/experimental/loader.h
new file mode 100644
index 00000000..9f076bb1
--- /dev/null
+++ b/yage/experimental/loader.h
@@ -0,0 +1,19 @@
+#ifndef YAGE_EXPERIMENTAL_LOADER_H
+#define YAGE_EXPERIMENTAL_LOADER_H
+
+#include <string>
+#include <vector>
+
+#include <glad/glad.h>
+#include <glm/glm.hpp>
+
+namespace yage
+{
+
+extern void load_obj(std::string filename, std::vector<glm::vec4> &vertices,
+ std::vector<glm::vec3> &normals,
+ std::vector<GLushort> &elements);
+
+} // namespace yage
+
+#endif