X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Frenderer%2Fraster%2Fshapes%2Fcomposite%2Ftextcanvas%2FTextCanvas.java;h=8c3e49f51218b82d7a8b7a66d4b25083648873df;hb=a2131986d65a769e3d589e4e0370d4af0ce10c38;hp=7a0c5e58f1da0ccbe5bdf84187d62bd26e0a11fe;hpb=a38bc412f8c6ae6c8fdf9466ae9b2073c2a73614;p=sixth-3d.git diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/textcanvas/TextCanvas.java b/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/textcanvas/TextCanvas.java index 7a0c5e5..8c3e49f 100644 --- a/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/textcanvas/TextCanvas.java +++ b/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/composite/textcanvas/TextCanvas.java @@ -1,5 +1,5 @@ /* - * Sixth 3D engine. Author: Svjatoslav Agejenko. + * Sixth 3D engine. Author: Svjatoslav Agejenko. * This project is released under Creative Commons Zero (CC0) license. */ package eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.textcanvas; @@ -19,19 +19,33 @@ import java.io.StringReader; import static eu.svjatoslav.sixth.e3d.renderer.raster.Color.BLACK; import static eu.svjatoslav.sixth.e3d.renderer.raster.Color.WHITE; +import static java.lang.Math.PI; +import static java.lang.Math.abs; 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; - public static final Font FONT = CanvasCharacter.getFont((int)(FONT_CHAR_HEIGHT_TEXTURE_PIXELS / 1.066)); + public static final Font FONT = CanvasCharacter.getFont((int) (FONT_CHAR_HEIGHT_TEXTURE_PIXELS / 1.066)); private static final String GROUP_TEXTURE = "texture"; private static final String GROUP_CHARACTERS = "characters"; private final TextPointer size; @@ -120,29 +134,26 @@ public class TextCanvas extends TexturedRectangle { @Override public void beforeTransformHook(final TransformsStack transformPipe, final RenderingContext context) { + ensureOptimalRenderMode(context); + } - final double textRelativeSize = context.width - / getRelativityTracker().getDistanceToUser(); + private void ensureOptimalRenderMode(RenderingContext context) { + // if the text is too far away, use texture + final double textRelativeSize = context.width / getRelativityTracker().getDistanceToUser(); if (textRelativeSize < 2d) { - if (renderMode == RenderMode.CHARACTERS) - setRenderMode(RenderMode.TEXTURE); + setRenderMode(RenderMode.TEXTURE); return; } - final double piHalf = Math.PI / 2; - - final double deviation = Math.abs(getRelativityTracker().getAngleXZ() + // if user is looking at the text from the side, use texture + final double piHalf = PI / 2; + final double deviation = abs(getRelativityTracker().getAngleXZ() + piHalf) - + Math.abs(getRelativityTracker().getAngleYZ() + piHalf); + + abs(getRelativityTracker().getAngleYZ() + piHalf); final double maxDeviation = 0.5; - - if (deviation > maxDeviation) { - if (renderMode == RenderMode.CHARACTERS) - setRenderMode(RenderMode.TEXTURE); - } else if (renderMode == RenderMode.TEXTURE) - setRenderMode(RenderMode.CHARACTERS); + setRenderMode(deviation > maxDeviation ? RenderMode.TEXTURE : RenderMode.CHARACTERS); } public void clear() { @@ -173,8 +184,8 @@ public class TextCanvas extends TexturedRectangle { graphics.setColor(foreground.toAwtColor()); graphics.drawChars( new char[]{character,}, 0, 1, - (column * FONT_CHAR_WIDTH_TEXTURE_PIXELS) - 0, - (row * FONT_CHAR_HEIGHT_TEXTURE_PIXELS) + (int)(FONT_CHAR_HEIGHT_TEXTURE_PIXELS / 1.23f)); + (column * FONT_CHAR_WIDTH_TEXTURE_PIXELS), + (row * FONT_CHAR_HEIGHT_TEXTURE_PIXELS) + (int) (FONT_CHAR_HEIGHT_TEXTURE_PIXELS / 1.23f)); getTexture().resetResampledBitmapCache(); }