2
0
Эх сурвалжийг харах

Added the ability to create a quad with the origin at the center.

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10695 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
Zer..om 12 жил өмнө
parent
commit
81d7a145a7

+ 35 - 7
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,