diff --git a/.idea/Helium-Engine.iml b/.idea/Helium-Engine.iml
index 60dfedb..0913bd0 100644
--- a/.idea/Helium-Engine.iml
+++ b/.idea/Helium-Engine.iml
@@ -8,6 +8,5 @@
-
\ No newline at end of file
diff --git a/.idea/artifacts/Helium_Engine_jar.xml b/.idea/artifacts/Helium_Engine_jar.xml
new file mode 100644
index 0000000..8413fd3
--- /dev/null
+++ b/.idea/artifacts/Helium_Engine_jar.xml
@@ -0,0 +1,152 @@
+
+
+ $PROJECT_DIR$/out/artifacts/Helium_Engine_jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/commons_io_2.xml b/.idea/libraries/commons_io_2.xml
deleted file mode 100644
index 3cd1687..0000000
--- a/.idea/libraries/commons_io_2.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Test.java b/src/Test.java
index 5ec9c1e..cba6d27 100644
--- a/src/Test.java
+++ b/src/Test.java
@@ -3,6 +3,7 @@ import org.hl.engine.io.Display;
import org.hl.engine.io.Input;
import org.hl.engine.math.lalg.Vector3f;
import org.hl.engine.math.lalg.Vector2f;
+import org.hl.engine.objects.Camera;
import org.hl.engine.objects.GameObject;
import org.lwjgl.glfw.GLFW;
@@ -29,9 +30,9 @@ public class Test extends Game {
}, new Material(new Texture("resources/textures/b.png")));
- public GameObject testObject = new GameObject(mesh, new Vector3f(0, 0, -1), new Vector3f(0, 0, 0), new Vector3f(1, 1, 1));
-
+ public GameObject testObject = new GameObject(mesh, new Vector3f(0, 0, 0 ), new Vector3f(0, 0, 0), new Vector3f(1, 1, 1));
+ public Camera camera = new Camera(new Vector3f(0, 0, 1), new Vector3f(0, 0, 0));
public void run() throws Exception {
setup();
@@ -59,7 +60,7 @@ public class Test extends Game {
// rendering the mesh
- renderer.renderMesh(testObject);
+ renderer.renderMesh(testObject, camera);
//swap buffers so the new one will appear
display.swapBuffers();
}
diff --git a/src/org/hl/engine/graphics/Renderer.java b/src/org/hl/engine/graphics/Renderer.java
index 57616f2..03d7244 100644
--- a/src/org/hl/engine/graphics/Renderer.java
+++ b/src/org/hl/engine/graphics/Renderer.java
@@ -2,6 +2,7 @@ package org.hl.engine.graphics;
import org.hl.engine.io.Display;
import org.hl.engine.math.lalg.Matrix4f;
+import org.hl.engine.objects.Camera;
import org.hl.engine.objects.GameObject;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL13;
@@ -18,7 +19,7 @@ public class Renderer {
this.display = display;
}
- public void renderMesh(GameObject object) {
+ public void renderMesh(GameObject object, Camera camera) {
// Renders the mesh by drawing it using triangles (least complicated)
GL30.glBindVertexArray(object.getMesh().getVertexArrayObject());
@@ -35,6 +36,7 @@ public class Renderer {
shader.setUniform("model", Matrix4f.transform(object.getPosition(), object.getRotation(), object.getScale()));
shader.setUniform("projection", display.getProjectionMatrix());
+ shader.setUniform("view", Matrix4f.view(camera.getPosition(), camera.getRotation()));
GL11.glDrawElements(GL11.GL_TRIANGLES, object.getMesh().getIndices().length, GL11.GL_UNSIGNED_INT, 0);
diff --git a/src/org/hl/engine/math/lalg/Matrix4f.java b/src/org/hl/engine/math/lalg/Matrix4f.java
index f5914d7..0aeed3d 100644
--- a/src/org/hl/engine/math/lalg/Matrix4f.java
+++ b/src/org/hl/engine/math/lalg/Matrix4f.java
@@ -1,5 +1,7 @@
package org.hl.engine.math.lalg;
+
+
public class Matrix4f {
public static final int SIZE = 4;
private float[][] elements = new float[SIZE][SIZE];
@@ -21,8 +23,7 @@ public class Matrix4f {
{0 , 0 , 1 , 0},
{0 , 0 , 0 , 1}
};
- Matrix4f identity = new Matrix4f(identityArray);
- return identity;
+ return new Matrix4f(identityArray);
}
public static Matrix4f translate(Vector3f translate) {
@@ -49,8 +50,7 @@ public class Matrix4f {
{z*x*C-y*sin , z*y*C + x*sin , cos + z*z*C , 0},
{0 , 0 , 0 , 1}
};
- Matrix4f result = new Matrix4f(rotArray);
- return result;
+ return new Matrix4f(rotArray);
}
public static Matrix4f scale(Vector3f scaleVec) {
@@ -80,6 +80,20 @@ public class Matrix4f {
return result;
}
+ public static Matrix4f view(Vector3f position, Vector3f rotation) {
+
+ Vector3f negative = new Vector3f(-position.getX(), -position.getY(), -position.getZ());
+ Matrix4f translationMatrix = Matrix4f.translate(negative);
+ Matrix4f rotationXMatrix = Matrix4f.rotate(rotation.getX(), new Vector3f(1, 0, 0));
+ Matrix4f rotationYMatrix = Matrix4f.rotate(rotation.getY(), new Vector3f(0, 1, 0));
+ Matrix4f rotationZMatrix = Matrix4f.rotate(rotation.getZ(), new Vector3f(0, 0, 1));
+
+ Matrix4f rotMat = Matrix4f.multiply(rotationZMatrix, Matrix4f.multiply(rotationYMatrix, rotationXMatrix));
+
+ return Matrix4f.multiply(translationMatrix, rotMat);
+
+ }
+
public static Matrix4f multiply(Matrix4f first, Matrix4f second) {
Matrix4f result = Matrix4f.identity();
@@ -112,7 +126,6 @@ public class Matrix4f {
}
public static Matrix4f transform(Vector3f position, Vector3f rotation, Vector3f scale) {
- Matrix4f result = identity();
Matrix4f translationMatrix = Matrix4f.translate(position);
Matrix4f rotationXMatrix = Matrix4f.rotate(rotation.getX(), new Vector3f(1, 0, 0));
Matrix4f rotationYMatrix = Matrix4f.rotate(rotation.getY(), new Vector3f(0, 1, 0));
diff --git a/src/org/hl/engine/objects/Camera.java b/src/org/hl/engine/objects/Camera.java
new file mode 100644
index 0000000..d690dcf
--- /dev/null
+++ b/src/org/hl/engine/objects/Camera.java
@@ -0,0 +1,30 @@
+package org.hl.engine.objects;
+
+import org.hl.engine.graphics.Mesh;
+import org.hl.engine.math.lalg.Vector3f;
+
+public class Camera{
+ private Vector3f position;
+ private Vector3f rotation;
+
+ public Camera(Vector3f position, Vector3f rotation) {
+ this.position = position;
+ this.rotation = rotation;
+ }
+
+ public Vector3f getPosition() {
+ return position;
+ }
+
+ public void setPosition(Vector3f position) {
+ this.position = position;
+ }
+
+ public Vector3f getRotation() {
+ return rotation;
+ }
+
+ public void setRotation(Vector3f rotation) {
+ this.rotation = rotation;
+ }
+}
diff --git a/src/org/hl/engine/objects/GameObject.java b/src/org/hl/engine/objects/GameObject.java
index f321819..3641d46 100644
--- a/src/org/hl/engine/objects/GameObject.java
+++ b/src/org/hl/engine/objects/GameObject.java
@@ -15,7 +15,8 @@ public class GameObject {
}
public void update() {
- position.add(0, 0, -0.1F);
+ position.add(0, 0, -0.01F);
+ rotation.add(0, 0.001F, 0);
}
public Vector3f getPosition() {
diff --git a/src/resources/shaders/mainVertex.glsl b/src/resources/shaders/mainVertex.glsl
index d7280c7..ea2c864 100644
--- a/src/resources/shaders/mainVertex.glsl
+++ b/src/resources/shaders/mainVertex.glsl
@@ -5,6 +5,7 @@ layout(location = 1) in vec3 color;
layout(location = 2) in vec2 textureCoord;
uniform mat4 model;
+uniform mat4 view;
uniform mat4 projection;
layout(location = 0) out vec3 passColor;
@@ -13,7 +14,7 @@ layout(location = 1) out vec2 passTextureCoord;
void main() {
- gl_Position = projection * model * vec4(position, 1.0);
+ gl_Position = model * view * projection * vec4(position, 1.0);
passColor = color;
passTextureCoord = textureCoord;