package eu.svjatoslav.sixth.e3d.gui;
/**
- * A pointer to a character in a text.
+ * A pointer to a character in a text using row and column.
+ * <p>
+ * It can be used to represent a cursor position in a text.
+ * Also, it can be used to represent beginning and end of a selection.
*/
public class TextPointer implements Comparable<TextPointer> {
+ /**
+ * The row of the character. Starts from 0.
+ */
public int row;
+
+ /**
+ * The column of the character. Starts from 0.
+ */
public int column;
public TextPointer() {
import eu.svjatoslav.sixth.e3d.geometry.Point3D;
+import static java.lang.Math.cos;
+import static java.lang.Math.sin;
+
/**
- * Used to represent transformation in a 3D space.
+ * Used to represent orientation in a 3D space.
+ *
+ * Orientations are represented as two angles of rotation around the XZ and YZ axes.
+ * The angles are stored as sines and cosines to avoid unnecessary trigonometric calculations.
+ *
+ * Orientations are used for rotating object coordinates in a 3D space.
*/
public class Orientation implements Cloneable {
-
+ /**
+ * The sine and cosine of the angles.
+ */
private double s1, c1, s2, c2;
/**
computeMultipliers();
}
+ /**
+ * Creates a new orientation with the specified angles.
+ * @param angleXZ The angle of rotation around the XZ axis.
+ * @param angleYZ The angle of rotation around the YZ axis.
+ */
public Orientation(final double angleXZ, final double angleYZ) {
this.angleXZ = angleXZ;
this.angleYZ = angleYZ;
* Computes the sine and cosine of the angles.
*/
private void computeMultipliers() {
- s1 = Math.sin(angleXZ);
- c1 = Math.cos(angleXZ);
+ s1 = sin(angleXZ);
+ c1 = cos(angleXZ);
- s2 = Math.sin(angleYZ);
- c2 = Math.cos(angleYZ);
+ s2 = sin(angleYZ);
+ c2 = cos(angleYZ);
}
+ /**
+ * Rotates the specified point around the XZ and YZ axes relative to the origin.
+ * @param point3d The point to rotate.
+ */
public void rotate(final Point3D point3d) {
+ // Rotate around the XZ axis.
final double z1 = (point3d.z * c1) - (point3d.x * s1);
point3d.x = (point3d.z * s1) + (point3d.x * c1);
+ // Rotate around the YZ axis.
point3d.z = (z1 * c2) - (point3d.y * s2);
point3d.y = (z1 * s2) + (point3d.y * c2);
}
+ /**
+ * Rotates current orientation around the XZ and YZ axes.
+ */
public void rotate(final double angleXZ, final double angleYZ) {
this.angleXZ += angleXZ;
this.angleYZ += angleYZ;
/**
* Used to represent transformation in a 3D space.
- * Transformations are represented as a translation and an orientation.
+ * Transformations are represented as a translation and an {@link Orientation}.
*/
public class Transform implements Cloneable {
+ /**
+ * The translation is applied after the orientation.
+ */
private final Point3D translation;
+
+ /**
+ * The orientation is applied before the translation.
+ */
private final Orientation orientation;
public Transform() {
return translation;
}
+ /**
+ * Applies this transform to the specified point in a 3D space.
+ *
+ * @param point to apply this transform to
+ */
public void transform(final Point3D point) {
orientation.rotate(point);
point.add(translation);
--- /dev/null
+/**
+ * Sixth 3D engine. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
+ * <p>
+ * Math that is needed for the project.
+ */
+
+package eu.svjatoslav.sixth.e3d.math;
+
-/*
+/**
* Sixth 3D engine. Author: Svjatoslav Agejenko.
* This project is released under Creative Commons Zero (CC0) license.
+ * <p>
*
* Various 3D renderers utilizing different rendering approaches.
*
package eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.textcanvas;
public enum RenderMode {
- TEXTURE, // Text is rendered on textured polygon
- CHARACTERS // Text is rendered as high quality, anti-aliazed tiles
+ /**
+ * Text is rendered as a textured polygon.
+ */
+ TEXTURE,
+
+ /**
+ * Text is rendered as high quality, anti-aliazed tiles.
+ */
+ CHARACTERS
}
public class TextCanvas extends TexturedRectangle {
- // character size in world coordinates
+ /**
+ * Font character width in world coordinates.
+ */
public static final int FONT_CHAR_WIDTH = 8;
+
+ /**
+ * Font character height in world coordinates.
+ */
public static final int FONT_CHAR_HEIGHT = 16;
- // character size on texture
+ /**
+ * Font character width in texture pixels.
+ */
public static final int FONT_CHAR_WIDTH_TEXTURE_PIXELS = 16;
+
+ /**
+ * Font character height in texture pixels.
+ */
public static final int FONT_CHAR_HEIGHT_TEXTURE_PIXELS = 32;
--- /dev/null
+/**
+ * Sixth 3D engine. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
+ * <p>
+ *
+ * Text canvas is a canvas that can be used to render text.
+ */
+
+package eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.textcanvas;
\ No newline at end of file