diff --git a/engine/src/core/com/jme3/scene/shape/Quad.java b/engine/src/core/com/jme3/scene/shape/Quad.java index 283882dc2..7a42bc651 100644 --- a/engine/src/core/com/jme3/scene/shape/Quad.java +++ b/engine/src/core/com/jme3/scene/shape/Quad.java @@ -77,6 +77,21 @@ public class Quad extends Mesh { updateGeometry(width, height, flipCoords); } + /** + * Create a quad with the given width and height. The quad + * is always created in the XY plane. + * + * @param width The X extent or width + * @param height The Y extent or width + * @param flipCoords If true, the texture coordinates will be flipped + * along the Y axis. + * @param originAtCenter If true then the origin of the quad will be at the center + * of the quad, rather than at one corner. + */ + public Quad(float width, float height, boolean flipCoords, boolean originAtCenter){ + updateGeometry(width, height, flipCoords, originAtCenter); + } + public float getHeight() { return height; } @@ -88,16 +103,29 @@ public class Quad extends Mesh { public void updateGeometry(float width, float height){ updateGeometry(width, height, false); } - + public void updateGeometry(float width, float height, boolean flipCoords) { + updateGeometry(width, height, flipCoords, false); + } + + public void updateGeometry(float width, float height, boolean flipCoords, boolean originAtCenter) { this.width = width; this.height = height; - setBuffer(Type.Position, 3, new float[]{0, 0, 0, - width, 0, 0, - width, height, 0, - 0, height, 0 - }); - + if (originAtCenter) { + float halfWidth = width*0.5f; + float halfHeight = height*0.5f; + setBuffer(Type.Position, 3, new float[]{-halfWidth, -halfHeight, 0, + halfWidth, -halfHeight, 0, + halfWidth, halfHeight, 0, + -halfWidth, halfHeight, 0 + }); + } else { + setBuffer(Type.Position, 3, new float[]{0, 0, 0, + width, 0, 0, + width, height, 0, + 0, height, 0 + }); + } if (flipCoords){ setBuffer(Type.TexCoord, 2, new float[]{0, 1,