summaryrefslogtreecommitdiffstats
path: root/src/demos/xtrans/XTBasicTransition.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/demos/xtrans/XTBasicTransition.java')
-rwxr-xr-xsrc/demos/xtrans/XTBasicTransition.java151
1 files changed, 151 insertions, 0 deletions
diff --git a/src/demos/xtrans/XTBasicTransition.java b/src/demos/xtrans/XTBasicTransition.java
new file mode 100755
index 0000000..a6bfd0f
--- /dev/null
+++ b/src/demos/xtrans/XTBasicTransition.java
@@ -0,0 +1,151 @@
+package demos.xtrans;
+
+import javax.media.opengl.*;
+import gleem.linalg.*;
+
+/** A basic transition supporting animated translation, rotation about
+ a pivot point, scrolling and fading effects. */
+
+public class XTBasicTransition implements XTTransition {
+ protected Vec3f pivot = new Vec3f();
+ protected Vec3f axis = new Vec3f();
+ protected InterpolatedFloat angle;
+ protected InterpolatedVec3f translation;
+ protected InterpolatedQuad3f vertices;
+ protected InterpolatedQuad2f texcoords;
+ protected InterpolatedFloat alpha;
+ protected float percentage;
+
+ /** Constructs a new transition object with all of its initial state
+ set to zero. */
+ public XTBasicTransition() {
+ }
+
+ public void update(float percentage) {
+ this.percentage = percentage;
+ }
+
+ public void draw(GL gl) {
+ float percent = percentage;
+ Quad3f vts = vertices.getCurrent(percent);
+ Quad2f tex = texcoords.getCurrent(percent);
+
+ if (translation != null) {
+ Vec3f trans = translation.getCurrent(percent);
+ gl.glTranslatef(trans.x(), trans.y(), trans.z());
+ }
+ // Rotate about pivot point
+ gl.glTranslatef(pivot.x(), pivot.y(), pivot.z());
+ if (angle != null) {
+ gl.glRotatef(angle.getCurrent(percent), axis.x(), axis.y(), axis.z());
+ }
+ gl.glTranslatef(-pivot.x(), -pivot.y(), -pivot.z());
+
+ gl.glBegin(GL.GL_TRIANGLES);
+ float a = 1.0f;
+ if (alpha != null) {
+ a = alpha.getCurrent(percent);
+ }
+ gl.glColor4f(1, 1, 1, a);
+ // Triangle 1
+ gl.glTexCoord2f(tex.getVec(0).x(), tex.getVec(0).y());
+ gl.glVertex3f (vts.getVec(0).x(), vts.getVec(0).y(), vts.getVec(0).z());
+ gl.glTexCoord2f(tex.getVec(1).x(), tex.getVec(1).y());
+ gl.glVertex3f (vts.getVec(1).x(), vts.getVec(1).y(), vts.getVec(1).z());
+ gl.glTexCoord2f(tex.getVec(3).x(), tex.getVec(3).y());
+ gl.glVertex3f (vts.getVec(3).x(), vts.getVec(3).y(), vts.getVec(3).z());
+ // Triangle 2
+ gl.glTexCoord2f(tex.getVec(3).x(), tex.getVec(3).y());
+ gl.glVertex3f (vts.getVec(3).x(), vts.getVec(3).y(), vts.getVec(3).z());
+ gl.glTexCoord2f(tex.getVec(1).x(), tex.getVec(1).y());
+ gl.glVertex3f (vts.getVec(1).x(), vts.getVec(1).y(), vts.getVec(1).z());
+ gl.glTexCoord2f(tex.getVec(2).x(), tex.getVec(2).y());
+ gl.glVertex3f (vts.getVec(2).x(), vts.getVec(2).y(), vts.getVec(2).z());
+ gl.glEnd();
+ }
+
+ /** Returns the rotation axis for this transition. By default this
+ axis is not set, so if an interpolator is specified for the
+ rotation angle the axis of rotation must be specified as
+ well. */
+ public Vec3f getRotationAxis() { return axis; }
+
+ /** Sets the rotation axis for this transition. By default this axis
+ is not set, so if an interpolator is specified for the rotation
+ angle the axis of rotation must be specified as well. */
+ public void setRotationAxis(Vec3f axis) { this.axis.set(axis); }
+
+ /** Returns the interpolator for the rotation angle for this
+ transition. By default this interpolator is null, meaning that
+ the transition does not perform any rotation. */
+ public InterpolatedFloat getRotationAngle() { return angle; }
+
+ /** Sets the interpolator for the rotation angle for this
+ transition. By default this interpolator is null, meaning that
+ the transition does not perform any rotation. */
+ public void setRotationAngle(InterpolatedFloat angle) { this.angle = angle; }
+
+ /** Returns the pivot point for this transition's rotation. By
+ default this is set to the origin, which corresponds to the
+ upper-left corner of the component being animated. */
+ public Vec3f getPivotPoint() { return pivot; }
+
+ /** Sets the pivot point for this transition's rotation. By default
+ this is set to the origin, which corresponds to the upper-left
+ corner of the component being animated. */
+ public void setPivotPoint(Vec3f point) { pivot.set(point); }
+
+ /** Returns the interpolator for this transition's translation. By
+ default the translation is a fixed vector from the origin to the
+ upper left corner of the component being animated; the vertices
+ are specified relative to that point in the +x and -y
+ directions. */
+ public InterpolatedVec3f getTranslation() { return translation; }
+
+ /** Sets the interpolator for this transition's translation. By
+ default the translation is a fixed vector from the origin to the
+ upper left corner of the component being animated; the vertices
+ are specified relative to that point in the +x and -y
+ directions. */
+ public void setTranslation(InterpolatedVec3f interp) { translation = interp; }
+
+ /** Returns the interpolator for the vertices of this transition's
+ component when drawn on screen. By default the vertices are
+ specified with the upper-left corner of the component at the
+ origin and the component extending in the +x (right) and -y
+ (down) directions; the units of the vertices correspond to the
+ on-screen size of the component in pixels. The component's
+ location is specified using the translation interpolator. */
+ public InterpolatedQuad3f getVertices() { return vertices; }
+
+ /** Sets the interpolator for the vertices of this transition's
+ component when drawn on screen. By default the vertices are
+ specified with the upper-left corner of the component at the
+ origin and the component extending in the +x (right) and -y
+ (down) directions; the units of the vertices correspond to the
+ on-screen size of the component in pixels. The component's
+ location is specified using the translation interpolator. */
+ public void setVertices(InterpolatedQuad3f interp) { vertices = interp; }
+
+ /** Returns the interpolator for the texture coordinates of this
+ transition's component when drawn on screen. By default these
+ are set so that at either the start or end point (depending on
+ whether this is an "in" or "out" transition) the texture
+ coordinates specify rendering of the component's entire
+ contents. */
+ public InterpolatedQuad2f getTexCoords() { return texcoords; }
+
+ /** Sets the interpolator for the texture coordinates of this
+ transition's component when drawn on screen. By default these
+ are set so that at either the start or end point (depending on
+ whether this is an "in" or "out" transition) the texture
+ coordinates specify rendering of the component's entire
+ contents. */
+ public void setTexCoords(InterpolatedQuad2f interp) { texcoords = interp; }
+
+ /** Returns the interpolator for this component's alpha value. */
+ public InterpolatedFloat getAlpha() { return alpha; }
+
+ /** Sets the interpolator for this component's alpha value. */
+ public void setAlpha(InterpolatedFloat interp) { alpha = interp; }
+}