Draw the background. This may be a skybox or a solid color.
*TODO use the OpenGL cube map texture?
*/ -public class DrawBackground implements RenderPass { +public class DrawBackground extends AbstractRenderPass { private static final Logger logger = LoggerFactory.getLogger(DrawBackground.class); - private int activeStatus = ALWAYS; private final ColorRGB eraseColor = new ColorRGB(64,64,128); private ShaderProgram shader; private final Mesh mesh = new Mesh(); private final TextureWithMetadata texture; - private int canvasWidth, canvasHeight; public DrawBackground() { + super("Erase/Background"); + // build a box mesh.setRenderStyle(GL3.GL_QUADS); @@ -83,22 +83,6 @@ public DrawBackground() { texture.setDoNotExport(true); } - /** - * @return NEVER, SOMETIMES, or ALWAYS - */ - @Override - public int getActiveStatus() { - return activeStatus; - } - - /** - * @param status NEVER, SOMETIMES, or ALWAYS - */ - @Override - public void setActiveStatus(int status) { - activeStatus = status; - } - /** * @return the localized name of this overlay */ @@ -126,15 +110,6 @@ public void dispose(GLAutoDrawable glAutoDrawable) { shader.delete(gl3); } - @Override - public void reshape(GLAutoDrawable glAutoDrawable, int x, int y, int width, int height) { - canvasWidth = width; - canvasHeight = height; - } - - @Override - public void display(GLAutoDrawable glAutoDrawable) {} - @Override public void draw() { GL3 gl3 = GLContext.getCurrentGL().getGL3(); diff --git a/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawBoundingBoxes.java b/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawBoundingBoxes.java index 2acb272c2..1b20d9e4f 100644 --- a/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawBoundingBoxes.java +++ b/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawBoundingBoxes.java @@ -30,14 +30,14 @@ /** * Draw the bounding box of each {@link MeshInstance} in the scene. */ -public class DrawBoundingBoxes implements RenderPass { +public class DrawBoundingBoxes extends AbstractRenderPass { private static final Logger logger = LoggerFactory.getLogger(DrawBoundingBoxes.class); - private int activeStatus = ALWAYS; private ShaderProgram shader; private final Mesh mesh = new Mesh(); - private int canvasWidth, canvasHeight; public DrawBoundingBoxes() { + super("Bounding Boxes"); + mesh.setRenderStyle(GL3.GL_LINES); // add 8 points of a unit cube centered on the origin mesh.addVertex(-0.5f, 0.5f, 0.5f); @@ -65,30 +65,6 @@ public DrawBoundingBoxes() { mesh.addIndex(3); mesh.addIndex(7); } - /** - * @return NEVER, SOMETIMES, or ALWAYS - */ - @Override - public int getActiveStatus() { - return activeStatus; - } - - /** - * @param status NEVER, SOMETIMES, or ALWAYS - */ - @Override - public void setActiveStatus(int status) { - activeStatus = status; - } - - /** - * @return the localized name of this overlay - */ - @Override - public String getName() { - return "Bounding Boxes"; - } - @Override public void init(GLAutoDrawable glAutoDrawable) { GL3 gl3 = glAutoDrawable.getGL().getGL3(); @@ -108,15 +84,6 @@ public void dispose(GLAutoDrawable glAutoDrawable) { shader.delete(gl3); } - @Override - public void reshape(GLAutoDrawable glAutoDrawable, int x, int y, int width, int height) { - canvasWidth = width; - canvasHeight = height; - } - - @Override - public void display(GLAutoDrawable glAutoDrawable) {} - @Override public void draw() { Camera camera = Registry.getActiveCamera(); diff --git a/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawCameras.java b/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawCameras.java index dbcc73c02..9691c9d6a 100644 --- a/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawCameras.java +++ b/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawCameras.java @@ -19,14 +19,14 @@ /** * Draws each {@link Camera} as a pyramid approximating the perspective view frustum. */ -public class DrawCameras implements RenderPass { +public class DrawCameras extends AbstractRenderPass { private static final Logger logger = LoggerFactory.getLogger(DrawCameras.class); - private int activeStatus = ALWAYS; private final Mesh mesh = new Mesh(); private ShaderProgram shader; - private int canvasWidth,canvasHeight; public DrawCameras() { + super("Cameras"); + // add mesh to a list that can be unloaded and reloaded as needed. mesh.setRenderStyle(GL3.GL_LINES); Vector3d a = new Vector3d(-1,-1,-1); @@ -47,30 +47,6 @@ public DrawCameras() { mesh.addColor(0,0,0,1); mesh.addVertex((float)a.x, (float)a.y, (float)a.z); } - /** - * @return NEVER, SOMETIMES, or ALWAYS - */ - @Override - public int getActiveStatus() { - return activeStatus; - } - - /** - * @param status NEVER, SOMETIMES, or ALWAYS - */ - @Override - public void setActiveStatus(int status) { - activeStatus = status; - } - - /** - * @return the localized name of this overlay - */ - @Override - public String getName() { - return "Cameras"; - } - @Override public void init(GLAutoDrawable glAutoDrawable) { GL3 gl3 = glAutoDrawable.getGL().getGL3(); @@ -90,15 +66,6 @@ public void dispose(GLAutoDrawable glAutoDrawable) { shader.delete(gl3); } - @Override - public void reshape(GLAutoDrawable glAutoDrawable, int x, int y, int width, int height) { - canvasWidth = width; - canvasHeight = height; - } - - @Override - public void display(GLAutoDrawable glAutoDrawable) {} - @Override public void draw() { Camera camera = Registry.getActiveCamera(); diff --git a/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawDHParameters.java b/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawDHParameters.java index 36e2bee9b..5656d0fef 100644 --- a/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawDHParameters.java +++ b/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawDHParameters.java @@ -26,14 +26,14 @@ /** * Draws each {@link DHParameter} as two lines from the previous joint to the current joint. */ -public class DrawDHParameters implements RenderPass { +public class DrawDHParameters extends AbstractRenderPass { private static final Logger logger = LoggerFactory.getLogger(DrawDHParameters.class); - private int activeStatus = ALWAYS; private final Mesh mesh = new Mesh(); private ShaderProgram shader; - private int canvasWidth,canvasHeight; public DrawDHParameters() { + super("DH Parameters"); + // add mesh to a list that can be unloaded and reloaded as needed. mesh.setRenderStyle(GL3.GL_LINES); // line d @@ -44,30 +44,6 @@ public DrawDHParameters() { mesh.addColor(1,0,0,1); mesh.addVertex(0,0,0); } - /** - * @return NEVER, SOMETIMES, or ALWAYS - */ - @Override - public int getActiveStatus() { - return activeStatus; - } - - /** - * @param status NEVER, SOMETIMES, or ALWAYS - */ - @Override - public void setActiveStatus(int status) { - activeStatus = status; - } - - /** - * @return the localized name of this overlay - */ - @Override - public String getName() { - return "DH Parameters"; - } - @Override public void init(GLAutoDrawable glAutoDrawable) { GL3 gl3 = glAutoDrawable.getGL().getGL3(); @@ -87,15 +63,6 @@ public void dispose(GLAutoDrawable glAutoDrawable) { shader.delete(gl3); } - @Override - public void reshape(GLAutoDrawable glAutoDrawable, int x, int y, int width, int height) { - canvasWidth = width; - canvasHeight = height; - } - - @Override - public void display(GLAutoDrawable glAutoDrawable) {} - @Override public void draw() { Camera camera = Registry.getActiveCamera(); diff --git a/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawGroundPlane.java b/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawGroundPlane.java new file mode 100644 index 000000000..2a708f6d1 --- /dev/null +++ b/src/main/java/com/marginallyclever/ro3/render/renderpasses/DrawGroundPlane.java @@ -0,0 +1,92 @@ +package com.marginallyclever.ro3.render.renderpasses; + +import com.jogamp.opengl.GL3; +import com.jogamp.opengl.GLAutoDrawable; +import com.jogamp.opengl.GLContext; +import com.marginallyclever.convenience.helpers.MatrixHelper; +import com.marginallyclever.convenience.helpers.ResourceHelper; +import com.marginallyclever.ro3.Registry; +import com.marginallyclever.ro3.node.Node; +import com.marginallyclever.ro3.node.nodes.Camera; +import com.marginallyclever.ro3.node.nodes.Pose; +import com.marginallyclever.ro3.render.RenderPass; +import com.marginallyclever.robotoverlord.systems.render.ShaderProgram; +import com.marginallyclever.robotoverlord.systems.render.mesh.Mesh; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.vecmath.Matrix4d; +import javax.vecmath.Vector3d; +import java.util.ArrayList; +import java.util.List; + +/** + * Draw the ground plane. + */ +public class DrawGroundPlane extends AbstractRenderPass { + private static final Logger logger = LoggerFactory.getLogger(DrawGroundPlane.class); + private final Mesh mesh = MatrixHelper.createMesh(1.0); + private ShaderProgram shader; + + public DrawGroundPlane() { + super("Ground plane"); + + mesh.setRenderStyle(GL3.GL_LINES); + int v = 1000; + int stepSize=100; + for(int s=-v;s