Add support for material color
The GL_DEPTH_TEST (in the Window.java) has been disabled (removed) because in the 2D graphics we don't need that, even more it was making alpha color-channel unusable.
This commit is contained in:
@@ -0,0 +1,24 @@
|
|||||||
|
package com.bartlomiejpluta.samplegame.core.gl.object.material;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.joml.Vector4f;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public class Material {
|
||||||
|
private final Vector4f color = new Vector4f();
|
||||||
|
|
||||||
|
private Material(float r, float g, float b, float alpha) {
|
||||||
|
setColor(r, g, b, alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColor(float r, float g, float b, float alpha) {
|
||||||
|
color.x = r;
|
||||||
|
color.y = g;
|
||||||
|
color.z = b;
|
||||||
|
color.w = alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Material colored(float r, float g, float b, float alpha) {
|
||||||
|
return new Material(r, g, b, alpha);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,12 @@
|
|||||||
package com.bartlomiejpluta.samplegame.core.gl.object.mesh;
|
package com.bartlomiejpluta.samplegame.core.gl.object.mesh;
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.samplegame.core.gl.object.material.Material;
|
||||||
import com.bartlomiejpluta.samplegame.core.gl.render.Renderable;
|
import com.bartlomiejpluta.samplegame.core.gl.render.Renderable;
|
||||||
import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager;
|
import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager;
|
||||||
import com.bartlomiejpluta.samplegame.core.ui.Window;
|
import com.bartlomiejpluta.samplegame.core.ui.Window;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
import org.lwjgl.opengl.GL15;
|
import org.lwjgl.opengl.GL15;
|
||||||
import org.lwjgl.system.MemoryStack;
|
import org.lwjgl.system.MemoryStack;
|
||||||
|
|
||||||
@@ -18,6 +22,10 @@ public class Mesh implements Renderable {
|
|||||||
private final List<Integer> vboIds = new ArrayList<>(2);
|
private final List<Integer> vboIds = new ArrayList<>(2);
|
||||||
private final int elementsCount;
|
private final int elementsCount;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private Material material;
|
||||||
|
|
||||||
public Mesh(float[] vertices, int[] elements) {
|
public Mesh(float[] vertices, int[] elements) {
|
||||||
try(var stack = MemoryStack.stackPush()) {
|
try(var stack = MemoryStack.stackPush()) {
|
||||||
elementsCount = elements.length;
|
elementsCount = elements.length;
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ public class DefaultRenderer implements Renderer {
|
|||||||
.selectShader("default")
|
.selectShader("default")
|
||||||
.createUniform(UniformName.UNI_MODEL_MATRIX)
|
.createUniform(UniformName.UNI_MODEL_MATRIX)
|
||||||
.createUniform(UniformName.UNI_VIEW_MATRIX)
|
.createUniform(UniformName.UNI_VIEW_MATRIX)
|
||||||
.createUniform(UniformName.UNI_PROJECTION_MATRIX);
|
.createUniform(UniformName.UNI_PROJECTION_MATRIX)
|
||||||
|
.createUniform(UniformName.UNI_OBJECT_COLOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,4 +4,5 @@ public interface UniformName {
|
|||||||
String UNI_MODEL_MATRIX = "modelMatrix";
|
String UNI_MODEL_MATRIX = "modelMatrix";
|
||||||
String UNI_VIEW_MATRIX = "viewMatrix";
|
String UNI_VIEW_MATRIX = "viewMatrix";
|
||||||
String UNI_PROJECTION_MATRIX = "projectionMatrix";
|
String UNI_PROJECTION_MATRIX = "projectionMatrix";
|
||||||
|
String UNI_OBJECT_COLOR = "objectColor";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,6 @@ public class Window {
|
|||||||
|
|
||||||
// Set the clear color
|
// Set the clear color
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
glEnable(GL_DEPTH_TEST);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update() {
|
public void update() {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.bartlomiejpluta.samplegame.core.world.object;
|
package com.bartlomiejpluta.samplegame.core.world.object;
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.samplegame.core.gl.object.material.Material;
|
||||||
import com.bartlomiejpluta.samplegame.core.gl.object.mesh.Mesh;
|
import com.bartlomiejpluta.samplegame.core.gl.object.mesh.Mesh;
|
||||||
import com.bartlomiejpluta.samplegame.core.gl.render.Renderable;
|
import com.bartlomiejpluta.samplegame.core.gl.render.Renderable;
|
||||||
import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager;
|
import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager;
|
||||||
@@ -10,6 +11,14 @@ import lombok.RequiredArgsConstructor;
|
|||||||
public abstract class RenderableObject extends Object implements Renderable {
|
public abstract class RenderableObject extends Object implements Renderable {
|
||||||
private final Mesh mesh;
|
private final Mesh mesh;
|
||||||
|
|
||||||
|
public void setMaterial(Material material) {
|
||||||
|
mesh.setMaterial(material);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Material getMaterial() {
|
||||||
|
return mesh.getMaterial();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(Window window, ShaderManager shaderManager) {
|
public void render(Window window, ShaderManager shaderManager) {
|
||||||
mesh.render(window, shaderManager);
|
mesh.render(window, shaderManager);
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
package com.bartlomiejpluta.samplegame.core.world.object;
|
|
||||||
|
|
||||||
import com.bartlomiejpluta.samplegame.core.gl.object.mesh.Mesh;
|
|
||||||
|
|
||||||
public class Sprite extends RenderableObject {
|
|
||||||
private static final float[] VERTICES = new float[]{
|
|
||||||
-0.5f, 0.5f, 0.0f,
|
|
||||||
-0.5f, -0.5f, 0.0f,
|
|
||||||
0.5f, -0.5f, 0.0f,
|
|
||||||
0.5f, 0.5f, 0.0f
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final int[] ELEMENTS = new int[]{
|
|
||||||
0, 1, 2,
|
|
||||||
2, 3, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
public Sprite() {
|
|
||||||
super(new Mesh(VERTICES, ELEMENTS));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -28,6 +28,7 @@ public class Scene implements Renderable {
|
|||||||
|
|
||||||
for(var object : objects) {
|
for(var object : objects) {
|
||||||
shaderManager.setUniform(UniformName.UNI_MODEL_MATRIX, object.getModelMatrix());
|
shaderManager.setUniform(UniformName.UNI_MODEL_MATRIX, object.getModelMatrix());
|
||||||
|
shaderManager.setUniform(UniformName.UNI_OBJECT_COLOR, object.getMaterial().getColor());
|
||||||
object.render(window, shaderManager);
|
object.render(window, shaderManager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
package com.bartlomiejpluta.samplegame.game.logic;
|
package com.bartlomiejpluta.samplegame.game.logic;
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.samplegame.core.gl.object.material.Material;
|
||||||
import com.bartlomiejpluta.samplegame.core.gl.render.Renderer;
|
import com.bartlomiejpluta.samplegame.core.gl.render.Renderer;
|
||||||
import com.bartlomiejpluta.samplegame.core.logic.GameLogic;
|
import com.bartlomiejpluta.samplegame.core.logic.GameLogic;
|
||||||
import com.bartlomiejpluta.samplegame.core.ui.Window;
|
import com.bartlomiejpluta.samplegame.core.ui.Window;
|
||||||
import com.bartlomiejpluta.samplegame.core.world.camera.Camera;
|
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 com.bartlomiejpluta.samplegame.core.world.scene.Scene;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.joml.Vector3f;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -20,17 +19,12 @@ public class DefaultGameLogic implements GameLogic {
|
|||||||
private final Camera camera = new Camera();
|
private final Camera camera = new Camera();
|
||||||
private final Scene scene = new Scene(camera);
|
private final Scene scene = new Scene(camera);
|
||||||
|
|
||||||
Sprite sprite;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(Window window) {
|
public void init(Window window) {
|
||||||
log.info("Initializing game logic");
|
log.info("Initializing game logic");
|
||||||
renderer.init();
|
renderer.init();
|
||||||
|
|
||||||
sprite = new Sprite();
|
|
||||||
sprite.setPosition(window.getWidth() / 2.0f, window.getHeight() / 2.0f);
|
|
||||||
sprite.setScale(100);
|
|
||||||
scene.add(sprite);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
#version 330
|
#version 330
|
||||||
|
|
||||||
|
uniform vec4 objectColor;
|
||||||
|
|
||||||
out vec4 fragColor;
|
out vec4 fragColor;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
fragColor = vec4(0.0, 0.5, 0.5, 1.0);
|
fragColor = objectColor;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user