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;
|
||||
|
||||
import com.bartlomiejpluta.samplegame.core.gl.object.material.Material;
|
||||
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.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import org.lwjgl.opengl.GL15;
|
||||
import org.lwjgl.system.MemoryStack;
|
||||
|
||||
@@ -18,6 +22,10 @@ public class Mesh implements Renderable {
|
||||
private final List<Integer> vboIds = new ArrayList<>(2);
|
||||
private final int elementsCount;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private Material material;
|
||||
|
||||
public Mesh(float[] vertices, int[] elements) {
|
||||
try(var stack = MemoryStack.stackPush()) {
|
||||
elementsCount = elements.length;
|
||||
|
||||
@@ -24,7 +24,8 @@ public class DefaultRenderer implements Renderer {
|
||||
.selectShader("default")
|
||||
.createUniform(UniformName.UNI_MODEL_MATRIX)
|
||||
.createUniform(UniformName.UNI_VIEW_MATRIX)
|
||||
.createUniform(UniformName.UNI_PROJECTION_MATRIX);
|
||||
.createUniform(UniformName.UNI_PROJECTION_MATRIX)
|
||||
.createUniform(UniformName.UNI_OBJECT_COLOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -4,4 +4,5 @@ public interface UniformName {
|
||||
String UNI_MODEL_MATRIX = "modelMatrix";
|
||||
String UNI_VIEW_MATRIX = "viewMatrix";
|
||||
String UNI_PROJECTION_MATRIX = "projectionMatrix";
|
||||
String UNI_OBJECT_COLOR = "objectColor";
|
||||
}
|
||||
|
||||
@@ -90,7 +90,6 @@ public class Window {
|
||||
|
||||
// Set the clear color
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
public void update() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
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.render.Renderable;
|
||||
import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager;
|
||||
@@ -10,6 +11,14 @@ import lombok.RequiredArgsConstructor;
|
||||
public abstract class RenderableObject extends Object implements Renderable {
|
||||
private final Mesh mesh;
|
||||
|
||||
public void setMaterial(Material material) {
|
||||
mesh.setMaterial(material);
|
||||
}
|
||||
|
||||
public Material getMaterial() {
|
||||
return mesh.getMaterial();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Window window, ShaderManager 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) {
|
||||
shaderManager.setUniform(UniformName.UNI_MODEL_MATRIX, object.getModelMatrix());
|
||||
shaderManager.setUniform(UniformName.UNI_OBJECT_COLOR, object.getMaterial().getColor());
|
||||
object.render(window, shaderManager);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
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.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;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.joml.Vector3f;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -20,17 +19,12 @@ public class DefaultGameLogic implements GameLogic {
|
||||
private final Camera camera = new Camera();
|
||||
private final Scene scene = new Scene(camera);
|
||||
|
||||
Sprite sprite;
|
||||
|
||||
@Override
|
||||
public void init(Window window) {
|
||||
log.info("Initializing game logic");
|
||||
renderer.init();
|
||||
|
||||
sprite = new Sprite();
|
||||
sprite.setPosition(window.getWidth() / 2.0f, window.getHeight() / 2.0f);
|
||||
sprite.setScale(100);
|
||||
scene.add(sprite);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
#version 330
|
||||
|
||||
uniform vec4 objectColor;
|
||||
|
||||
out vec4 fragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
fragColor = vec4(0.0, 0.5, 0.5, 1.0);
|
||||
fragColor = objectColor;
|
||||
}
|
||||
Reference in New Issue
Block a user