3D spaceshooter with online scoreboard, online demos, ship building. Now entirely defunct, but might be resurrected
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
sector/src/net/sector/util/RenderUtils.java

521 lines
13 KiB

package net.sector.util;
import static org.lwjgl.opengl.GL11.*;
import com.porcupine.color.HSV;
import com.porcupine.color.RGB;
import com.porcupine.coord.Coord;
import com.porcupine.coord.Rect;
/**
* Render utilities
*
* @author Ondřej Hruška (MightyPork)
*/
public class RenderUtils {
/**
* Translate with coord
*
* @param coord coord
*/
public static void translate(Coord coord) {
glTranslated(coord.x, coord.y, coord.z);
}
/**
* Bing GL color
*
* @param color RGB color
*/
public static void setColor(RGB color) {
glColor4d(color.r, color.g, color.b, color.a);
}
/**
* Render quad 2D
*
* @param rect rectangle
*/
public static void quadRect(Rect rect) {
quadCoord(rect.getMin(), rect.getMax());
}
/**
* Render quad 2D
*
* @param left units from left
* @param bottom units from bottom
* @param width quad width
* @param height quad height
*/
public static void quadSize(double left, double bottom, double width, double height) {
glBegin(GL_QUADS);
glVertex2d(left, bottom + height);
glVertex2d(left + width, bottom + height);
glVertex2d(left + width, bottom);
glVertex2d(left, bottom);
glEnd();
}
/**
* Render quad 2D
*
* @param min min coord
* @param max max coord
*/
public static void quadCoord(Coord min, Coord max) {
quadCoord(min.x, min.y, max.x, max.y);
}
/**
* Render quad with absolute coords (from screen bottom)
*
* @param left left x
* @param bottom bottom y
* @param right right x
* @param top top y
*/
public static void quadCoord(double left, double bottom, double right, double top) {
glBegin(GL_QUADS);
glVertex2d(left, top);
glVertex2d(right, top);
glVertex2d(right, bottom);
glVertex2d(left, bottom);
glEnd();
}
/**
* Render quad with coloured border with outset effect
*
* @param rect rectangle
* @param border border width
* @param fill fill color
* @param inset true for inset, false for outset
*/
public static void quadRectOutset(Rect rect, double border, RGB fill, boolean inset) {
quadCoordOutset(rect.getMin(), rect.getMax(), border, fill, inset);
}
/**
* Render quad with coloured border with outset effect
*
* @param min min coord
* @param max max coord
* @param border border width
* @param fill fill color
* @param inset true for inset, false for outset
*/
public static void quadCoordOutset(Coord min, Coord max, double border, RGB fill, boolean inset) {
quadCoordOutset(min.x, min.y, max.x, max.y, border, fill, inset);
}
/**
* Render quad with coloured border with outset effect
*
* @param minX left X
* @param minY bottom Y
* @param maxX right X
* @param maxY top Y
* @param border border width
* @param fill fill color
* @param inset true for inset, false for outset
*/
public static void quadCoordOutset(double minX, double minY, double maxX, double maxY, double border, RGB fill, boolean inset) {
HSV hsv = fill.toHSV();
HSV h;
h = hsv.copy();
h.s *= 0.6;
RGB a = h.toRGB();
h = fill.toHSV();
h.v *= 0.6;
RGB b = h.toRGB();
RGB leftTopC, rightBottomC;
if (!inset) {
leftTopC = a;
rightBottomC = b;
} else {
leftTopC = b;
rightBottomC = a;
}
double bdr = border;
RenderUtils.setColor(leftTopC);
// left + top
glBegin(GL_QUADS);
glVertex2d(minX, minY);
glVertex2d(minX + bdr, minY + bdr);
glVertex2d(minX + bdr, maxY - bdr);
glVertex2d(minX, maxY);
glVertex2d(minX, maxY);
glVertex2d(minX + bdr, maxY - bdr);
glVertex2d(maxX - bdr, maxY - bdr);
glVertex2d(maxX, maxY);
glEnd();
RenderUtils.setColor(rightBottomC);
// right + bottom
glBegin(GL_QUADS);
glVertex2d(maxX, minY);
glVertex2d(maxX, maxY);
glVertex2d(maxX - bdr, maxY - bdr);
glVertex2d(maxX - bdr, minY + bdr);
glVertex2d(minX, minY);
glVertex2d(maxX, minY);
glVertex2d(maxX - bdr, minY + bdr);
glVertex2d(minX + bdr, minY + bdr);
glEnd();
RenderUtils.setColor(fill);
RenderUtils.quadCoord(minX + bdr, minY + bdr, maxX - bdr, maxY - bdr);
}
/**
* Render quad with coloured border
*
* @param rect rect
* @param border border width
* @param borderColor border color
* @param insideColor filling color
*/
public static void quadRectBorder(Rect rect, double border, RGB borderColor, RGB insideColor) {
quadCoordBorder(rect.getMin(), rect.getMax(), border, borderColor, insideColor);
}
/**
* Render quad with coloured border
*
* @param min min
* @param max max
* @param border border width
* @param borderColor border color
* @param insideColor filling color
*/
public static void quadCoordBorder(Coord min, Coord max, double border, RGB borderColor, RGB insideColor) {
quadCoordBorder(min.x, min.y, max.x, max.y, border, borderColor, insideColor);
}
/**
* Render quad with coloured border
*
* @param minX min x
* @param minY min y
* @param maxX max x
* @param maxY max y
* @param border border width
* @param borderColor border color
* @param insideColor filling color
*/
public static void quadCoordBorder(double minX, double minY, double maxX, double maxY, double border, RGB borderColor, RGB insideColor) {
double bdr = border;
RenderUtils.setColor(borderColor);
//@formatter:off
RenderUtils.quadCoord(minX, minY, minX + bdr, maxY);
RenderUtils.quadCoord(maxX - bdr, minY, maxX, maxY);
RenderUtils.quadCoord(minX + bdr, maxY - bdr, maxX - bdr, maxY);
RenderUtils.quadCoord(minX + bdr, minY, maxX - bdr, minY + bdr);
//@formatter:on
RenderUtils.setColor(insideColor);
RenderUtils.quadCoord(minX + bdr, minY + bdr, maxX - bdr, maxY - bdr);
}
/**
* Render quad 2D with gradient vertical
*
* @param rect rect
* @param colorTop top color
* @param colorBottom bottom color
*/
public static void quadRectGradV(Rect rect, RGB colorTop, RGB colorBottom) {
quadCoordGradV(rect.getMin(), rect.getMax(), colorTop, colorBottom);
}
/**
* Render quad 2D with gradient vertical
*
* @param min min coord
* @param max max coord
* @param colorTop top color
* @param colorBottom bottom color
*/
public static void quadCoordGradV(Coord min, Coord max, RGB colorTop, RGB colorBottom) {
quadCoordGradV(min.x, min.y, max.x, max.y, colorTop, colorBottom);
}
/**
* Render quad 2D with gradient vertical
*
* @param minX min X
* @param minY min Y
* @param maxX max X
* @param maxY max Y
* @param colorTop top color
* @param colorBottom bottom color
*/
public static void quadCoordGradV(double minX, double minY, double maxX, double maxY, RGB colorTop, RGB colorBottom) {
glBegin(GL_QUADS);
setColor(colorTop);
glVertex2d(minX, maxY);
glVertex2d(maxX, maxY);
setColor(colorBottom);
glVertex2d(maxX, minY);
glVertex2d(minX, minY);
glEnd();
}
/**
* Render quad 2D with gradient vertical
*
* @param rect rect
* @param colorOuter outer color
* @param colorMiddle middle color
*/
public static void quadRectGradVBilinear(Rect rect, RGB colorOuter, RGB colorMiddle) {
quadCoordGradVBilinear(rect.getMin(), rect.getMax(), colorOuter, colorMiddle);
}
/**
* Render quad 2D with gradient vertical
*
* @param min min coord
* @param max max coord
* @param colorOuter outer color
* @param colorMiddle middle color
*/
public static void quadCoordGradVBilinear(Coord min, Coord max, RGB colorOuter, RGB colorMiddle) {
quadCoordGradVBilinear(min.x, min.y, max.x, max.y, colorOuter, colorMiddle);
}
/**
* Render quad 2D with gradient vertical
*
* @param minX min X
* @param minY min Y
* @param maxX max X
* @param maxY max Y
* @param colorOuter outer color
* @param colorMiddle middle color
*/
public static void quadCoordGradVBilinear(double minX, double minY, double maxX, double maxY, RGB colorOuter, RGB colorMiddle) {
glBegin(GL_QUADS);
setColor(colorOuter);
glVertex2d(minX, maxY);
glVertex2d(maxX, maxY);
setColor(colorMiddle);
glVertex2d(maxX, (maxY + minY) / 2);
glVertex2d(minX, (maxY + minY) / 2);
setColor(colorMiddle);
glVertex2d(minX, (maxY + minY) / 2);
glVertex2d(maxX, (maxY + minY) / 2);
setColor(colorOuter);
glVertex2d(maxX, minY);
glVertex2d(minX, minY);
glEnd();
}
/**
* Render quad 2D with gradient horizontal
*
* @param rect rect
* @param colorOuter color outer
* @param colorMiddle color inner
*/
public static void quadRectGradHBilinear(Rect rect, RGB colorOuter, RGB colorMiddle) {
quadCoordGradHBilinear(rect.getMin(), rect.getMax(), colorOuter, colorMiddle);
}
/**
* Render quad 2D with gradient horizontal
*
* @param min min coord
* @param max max coord
* @param colorOuter color outer
* @param colorMiddle color inner
*/
public static void quadCoordGradHBilinear(Coord min, Coord max, RGB colorOuter, RGB colorMiddle) {
quadCoordGradHBilinear(min.x, min.y, max.x, max.y, colorOuter, colorMiddle);
}
/**
* Render quad 2D with gradient horizontal
*
* @param minX min x
* @param minY min y
* @param maxX max x
* @param maxY max y
* @param colorOuter color outer
* @param colorMiddle color inner
*/
public static void quadCoordGradHBilinear(double minX, double minY, double maxX, double maxY, RGB colorOuter, RGB colorMiddle) {
glBegin(GL_QUADS);
setColor(colorOuter);
glVertex2d(minX, maxY);
setColor(colorMiddle);
glVertex2d((minX + maxX) / 2, maxY);
setColor(colorMiddle);
glVertex2d((minX + maxX) / 2, minY);
setColor(colorOuter);
glVertex2d(minX, minY);
setColor(colorMiddle);
glVertex2d((minX + maxX) / 2, maxY);
setColor(colorOuter);
glVertex2d(maxX, maxY);
setColor(colorOuter);
glVertex2d(maxX, minY);
setColor(colorMiddle);
glVertex2d((minX + maxX) / 2, minY);
glEnd();
}
/**
* Render quad 2D with gradient horizontal
*
* @param rect rect
* @param colorLeft color left
* @param colorRight color right
*/
public static void quadRectGradH(Rect rect, RGB colorLeft, RGB colorRight) {
quadCoordGradH(rect.getMin(), rect.getMax(), colorLeft, colorRight);
}
/**
* Render quad 2D with gradient horizontal
*
* @param min min coord
* @param max max coord
* @param colorLeft color left
* @param colorRight color right
*/
public static void quadCoordGradH(Coord min, Coord max, RGB colorLeft, RGB colorRight) {
quadCoordGradH(min.x, min.y, max.x, max.y, colorLeft, colorRight);
}
/**
* Render quad 2D with gradient horizontal
*
* @param minX units from left
* @param minY units from bottom
* @param maxX quad width
* @param maxY quad height
* @param colorLeft color left
* @param colorRight color right
*/
public static void quadCoordGradH(double minX, double minY, double maxX, double maxY, RGB colorLeft, RGB colorRight) {
glBegin(GL_QUADS);
setColor(colorLeft);
glVertex2d(minX, maxY);
setColor(colorRight);
glVertex2d(maxX, maxY);
setColor(colorRight);
glVertex2d(maxX, minY);
setColor(colorLeft);
glVertex2d(minX, minY);
glEnd();
}
/**
* Render textured rect (texture must be binded beforehand)
*
* @param quad rect descriptor
* @param textures texture coords
*/
public static void quadRectTextured(Rect quad, Rect textures) {
double left = quad.x1();
double bottom = quad.y1();
double right = quad.x2();
double top = quad.y2();
double tleft = textures.x1();
double tbottom = textures.y1();
double tright = textures.x2();
double ttop = textures.y2();
glBegin(GL_QUADS);
glTexCoord2d(tleft, ttop);
glVertex2d(left, top);
glTexCoord2d(tright, ttop);
glVertex2d(right, top);
glTexCoord2d(tright, tbottom);
glVertex2d(right, bottom);
glTexCoord2d(tleft, tbottom);
glVertex2d(left, bottom);
glEnd();
}
// /**
// * Render quad 2D (coords from screen top)
// *
// * @param left units from left
// * @param top units from bottom
// * @param width quad width
// * @param height quad height
// */
// public static void quadTop(double left, double top, double width, double height) {
// double bottom = App.inst.getSize().y - top - height;
// quadSize(left, bottom, width, height);
// }
//
// /**
// * Render quad 2D with gradient vertical (coords from screen top)
// *
// * @param left units from left
// * @param top units from bottom
// * @param width quad width
// * @param height quad height
// * @param colorTop top color
// * @param colorBottom bottom color
// */
// public static void quadTopGradV(double left, double top, double width, double height, RGB colorTop, RGB colorBottom) {
// double bottom = App.inst.getSize().y - top - height;
// quadGradV(left, bottom, width, height, colorTop, colorBottom);
// }
//
// /**
// * Render quad 2D with gradient horizontal (coords from screen top)
// *
// * @param left units from left
// * @param top units from bottom
// * @param width quad width
// * @param height quad height
// * @param colorLeft color left
// * @param colorRight color right
// */
// public static void quadTopGradH(double left, double top, double width, double height, RGB colorLeft, RGB colorRight) {
// double bottom = App.inst.getSize().y - top - height;
// quadGradH(left, bottom, width, height, colorLeft, colorRight);
// }
}