Create view and projection matrix for Camera
This commit is contained in:
@@ -2,7 +2,7 @@ package com.bartlomiejpluta.samplegame.core.gl.object.mesh;
|
||||
|
||||
import com.bartlomiejpluta.samplegame.core.gl.render.Renderable;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.shader.program.ShaderProgram;
|
||||
import com.bartlomiejpluta.samplegame.core.ui.Window;
|
||||
import org.lwjgl.opengl.GL15;
|
||||
import org.lwjgl.system.MemoryStack;
|
||||
|
||||
@@ -46,7 +46,7 @@ public class Mesh implements Renderable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(ShaderManager shaderManager) {
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
glBindVertexArray(vaoId);
|
||||
glEnableVertexAttribArray(0);
|
||||
glDrawElements(GL_TRIANGLES, elementsCount, GL_UNSIGNED_INT, 0);
|
||||
|
||||
@@ -22,7 +22,9 @@ public class DefaultRenderer implements Renderer {
|
||||
shaderManager
|
||||
.createShader("default", "/shaders/default.vs", "/shaders/default.fs")
|
||||
.selectShader("default")
|
||||
.createUniform(UniformName.UNI_MODEL_MATRIX);
|
||||
.createUniform(UniformName.UNI_MODEL_MATRIX)
|
||||
.createUniform(UniformName.UNI_VIEW_MATRIX)
|
||||
.createUniform(UniformName.UNI_PROJECTION_MATRIX);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -32,7 +34,7 @@ public class DefaultRenderer implements Renderer {
|
||||
|
||||
shaderManager.selectShader("default").useSelectedShader();
|
||||
|
||||
renderable.render(shaderManager);
|
||||
renderable.render(window, shaderManager);
|
||||
|
||||
shaderManager.detachCurrentShader();
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.bartlomiejpluta.samplegame.core.gl.render;
|
||||
|
||||
import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.shader.program.ShaderProgram;
|
||||
import com.bartlomiejpluta.samplegame.core.ui.Window;
|
||||
|
||||
public interface Renderable {
|
||||
void render(ShaderManager shaderManager);
|
||||
void render(Window window, ShaderManager shaderManager);
|
||||
void cleanUp();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.bartlomiejpluta.samplegame.core.gl.shader.constant;
|
||||
|
||||
public interface UniformName {
|
||||
public static final String UNI_MODEL_MATRIX = "modelMatrix";
|
||||
String UNI_MODEL_MATRIX = "modelMatrix";
|
||||
String UNI_VIEW_MATRIX = "viewMatrix";
|
||||
String UNI_PROJECTION_MATRIX = "projectionMatrix";
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.bartlomiejpluta.samplegame.core.world.camera;
|
||||
|
||||
import com.bartlomiejpluta.samplegame.core.ui.Window;
|
||||
import com.bartlomiejpluta.samplegame.core.world.object.Object;
|
||||
import org.joml.Matrix4f;
|
||||
|
||||
public class Camera extends Object {
|
||||
private final Matrix4f projectionMatrix = new Matrix4f();
|
||||
private final Matrix4f viewMatrix = new Matrix4f();
|
||||
|
||||
public Matrix4f getProjectionMatrix(Window window) {
|
||||
return projectionMatrix
|
||||
.identity()
|
||||
.setOrtho2D(0, window.getWidth(), window.getHeight(), 0);
|
||||
}
|
||||
|
||||
public Matrix4f getViewMatrix() {
|
||||
return viewMatrix
|
||||
.identity()
|
||||
.translate(-position.x, -position.y, -position.z);
|
||||
}
|
||||
}
|
||||
@@ -11,14 +11,14 @@ public abstract class Object {
|
||||
private final Matrix4f modelMatrix = new Matrix4f();
|
||||
|
||||
@Getter
|
||||
private final Vector3f position = new Vector3f(0, 0, 0);
|
||||
protected final Vector3f position = new Vector3f(0, 0, 0);
|
||||
|
||||
@Getter
|
||||
private final Vector3f rotation = new Vector3f(0, 0, 0);
|
||||
protected final Vector3f rotation = new Vector3f(0, 0, 0);
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private float scale = 1.0f;
|
||||
protected float scale = 1.0f;
|
||||
|
||||
public Object setPosition(float x, float y, float z) {
|
||||
position.x = x;
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.bartlomiejpluta.samplegame.core.world.object;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.object.mesh.Mesh;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.render.Renderable;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.samplegame.core.ui.Window;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@@ -10,8 +11,8 @@ public abstract class RenderableObject extends Object implements Renderable {
|
||||
private final Mesh mesh;
|
||||
|
||||
@Override
|
||||
public void render(ShaderManager shaderManager) {
|
||||
mesh.render(shaderManager);
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
mesh.render(window, shaderManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,12 +3,17 @@ package com.bartlomiejpluta.samplegame.core.world.scene;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.render.Renderable;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.shader.constant.UniformName;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager;
|
||||
import com.bartlomiejpluta.samplegame.core.ui.Window;
|
||||
import com.bartlomiejpluta.samplegame.core.world.camera.Camera;
|
||||
import com.bartlomiejpluta.samplegame.core.world.object.RenderableObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class Scene implements Renderable {
|
||||
private final Camera camera;
|
||||
private final List<RenderableObject> objects = new ArrayList<>();
|
||||
|
||||
public Scene add(RenderableObject object) {
|
||||
@@ -17,10 +22,13 @@ public class Scene implements Renderable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(ShaderManager shaderManager) {
|
||||
public void render(Window window, ShaderManager shaderManager) {
|
||||
shaderManager.setUniform(UniformName.UNI_PROJECTION_MATRIX, camera.getProjectionMatrix(window));
|
||||
shaderManager.setUniform(UniformName.UNI_VIEW_MATRIX, camera.getViewMatrix());
|
||||
|
||||
for(var object : objects) {
|
||||
shaderManager.setUniform(UniformName.UNI_MODEL_MATRIX, object.getModelMatrix());
|
||||
object.render(shaderManager);
|
||||
object.render(window, shaderManager);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.bartlomiejpluta.samplegame.game.logic;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.render.Renderer;
|
||||
import com.bartlomiejpluta.samplegame.core.logic.GameLogic;
|
||||
import com.bartlomiejpluta.samplegame.core.ui.Window;
|
||||
import com.bartlomiejpluta.samplegame.core.world.camera.Camera;
|
||||
import com.bartlomiejpluta.samplegame.core.world.object.Sprite;
|
||||
import com.bartlomiejpluta.samplegame.core.world.scene.Scene;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -16,7 +17,8 @@ import org.springframework.stereotype.Component;
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class DefaultGameLogic implements GameLogic {
|
||||
private final Renderer renderer;
|
||||
private final Scene scene = new Scene();
|
||||
private final Camera camera = new Camera();
|
||||
private final Scene scene = new Scene(camera);
|
||||
|
||||
Sprite sprite;
|
||||
|
||||
@@ -26,6 +28,8 @@ public class DefaultGameLogic implements GameLogic {
|
||||
renderer.init();
|
||||
|
||||
sprite = new Sprite();
|
||||
sprite.setPosition(window.getWidth() / 2.0f, window.getHeight() / 2.0f, 0);
|
||||
sprite.setScale(100);
|
||||
scene.add(sprite);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
#version 330
|
||||
|
||||
uniform mat4 modelMatrix;
|
||||
uniform mat4 viewMatrix;
|
||||
uniform mat4 projectionMatrix;
|
||||
|
||||
layout(location=0) in vec3 position;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = modelMatrix * vec4(position, 1.0);
|
||||
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.0);
|
||||
}
|
||||
Reference in New Issue
Block a user