diff options
Diffstat (limited to 'src/demos/xtrans/XTBasicTransition.java')
-rwxr-xr-x | src/demos/xtrans/XTBasicTransition.java | 151 |
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; } +} |