X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Frenderer%2Fraster%2Fshapes%2Fcomposite%2Ftextcanvas%2FTextCanvas.java;h=4ffef134784025ef53d769c2b461587329e4b5c5;hb=7f01c45bcea9575bb33d201f81b9b0056dacb909;hp=854d756bc55a2dee998f3e1f592efb3d55977ada;hpb=a3ff3683bd0a025061667b26b6fcf56fe20f0afc;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 854d756..4ffef13 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 @@ -19,15 +19,29 @@ 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; @@ -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() { @@ -175,7 +186,6 @@ public class TextCanvas extends TexturedRectangle { new char[]{character,}, 0, 1, (column * FONT_CHAR_WIDTH_TEXTURE_PIXELS), (row * FONT_CHAR_HEIGHT_TEXTURE_PIXELS) + (int) (FONT_CHAR_HEIGHT_TEXTURE_PIXELS / 1.23f)); - getTexture().resetResampledBitmapCache(); }