X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Frenderer%2Fraster%2Fshapes%2Fbasic%2Ftexturedpolygon%2FTexturedPolygon.java;h=2cd60e74693af6ac3266714184ce64bc4ad2654e;hb=9f20345e99404017a98d3ae95b7588cabb31a9bf;hp=cafcbbf7ee946f2d331b0824501c983cf756af88;hpb=9dcd9d8a7d3bc16eb6fde3681cd32e02dc0707e9;p=sixth-3d.git diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/texturedpolygon/TexturedPolygon.java b/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/texturedpolygon/TexturedPolygon.java index cafcbbf..2cd60e7 100644 --- a/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/texturedpolygon/TexturedPolygon.java +++ b/src/main/java/eu/svjatoslav/sixth/e3d/renderer/raster/shapes/basic/texturedpolygon/TexturedPolygon.java @@ -1,12 +1,7 @@ /* - * Sixth 3D engine. Copyright ©2012-2018, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 3 of the GNU Lesser General Public License - * or later as published by the Free Software Foundation. - * + * Sixth 3D engine. Author: Svjatoslav Agejenko. + * This project is released under Creative Commons Zero (CC0) license. */ - package eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.texturedpolygon; import eu.svjatoslav.sixth.e3d.geometry.Point2D; @@ -20,18 +15,32 @@ import eu.svjatoslav.sixth.e3d.renderer.raster.texture.TextureBitmap; import java.awt.*; import static eu.svjatoslav.sixth.e3d.geometry.Polygon.pointWithinPolygon; +import static java.util.Arrays.sort; + +/** + * Textured polygon. + *
+ * + *
+ * This is how perspective-correct texture rendering is implemented: + * If polygon is sufficiently small, it is rendered without perspective correction. + * Otherwise, it is sliced into smaller polygons. + *+ */ public class TexturedPolygon extends AbstractCoordinateShape { public final Texture texture; - final PolygonBorderInterpolator[] is = new PolygonBorderInterpolator[]{ - new PolygonBorderInterpolator(), new PolygonBorderInterpolator(), - new PolygonBorderInterpolator()}; /** * Polygon texture coordinates. */ public Point2D texturePoint1, texturePoint2, texturePoint3; - private boolean showBorders = false; + + /** + * If
true
then polygon borders will be drawn.
+ * It is used for debugging purposes.
+ */
+ public boolean showBorders = false;
private double totalTextureDistance = -1;
public TexturedPolygon(final Point3D p1, final Point3D p2,
@@ -51,8 +60,8 @@ public class TexturedPolygon extends AbstractCoordinateShape {
final PolygonCoordinate pc2, final PolygonCoordinate pc3,
final Texture texture) {
- this(pc1.space, pc2.space, pc3.space, pc1.texture, pc2.texture,
- pc3.texture, texture);
+ this(pc1.spaceCoordinate, pc2.spaceCoordinate, pc3.spaceCoordinate, pc1.textureCoordinate, pc2.textureCoordinate,
+ pc3.textureCoordinate, texture);
}
private void computeTotalTextureDistance() {
@@ -141,11 +150,11 @@ public class TexturedPolygon extends AbstractCoordinateShape {
projectedPoint3.roundToInteger();
if (mouseInteractionController != null)
- if (renderBuffer.mouseEvent != null)
+ if (renderBuffer.getMouseEvent() != null)
if (pointWithinPolygon(
- renderBuffer.mouseEvent.coordinate, projectedPoint1,
+ renderBuffer.getMouseEvent().coordinate, projectedPoint1,
projectedPoint2, projectedPoint3))
- renderBuffer.objectUnderMouse = mouseInteractionController;
+ renderBuffer.setCurrentObjectUnderMouseCursor(mouseInteractionController);
// Show polygon boundaries (for debugging)
if (showBorders)
@@ -176,8 +185,7 @@ public class TexturedPolygon extends AbstractCoordinateShape {
yBottom = renderBuffer.height - 1;
// paint
- double totalVisibleDistance = projectedPoint1
- .getDistanceTo(projectedPoint2);
+ double totalVisibleDistance = projectedPoint1.getDistanceTo(projectedPoint2);
totalVisibleDistance += projectedPoint1.getDistanceTo(projectedPoint3);
totalVisibleDistance += projectedPoint2.getDistanceTo(projectedPoint3);
@@ -187,6 +195,10 @@ public class TexturedPolygon extends AbstractCoordinateShape {
final TextureBitmap zoomedBitmap = texture.getZoomedBitmap(scaleFactor);
+ final PolygonBorderInterpolator[] is = new PolygonBorderInterpolator[]{
+ new PolygonBorderInterpolator(), new PolygonBorderInterpolator(),
+ new PolygonBorderInterpolator()};
+
is[0].setPoints(projectedPoint1, projectedPoint2, texturePoint1,
texturePoint2);
is[1].setPoints(projectedPoint1, projectedPoint3, texturePoint1,
@@ -194,7 +206,7 @@ public class TexturedPolygon extends AbstractCoordinateShape {
is[2].setPoints(projectedPoint2, projectedPoint3, texturePoint2,
texturePoint3);
- java.util.Arrays.sort(is);
+ sort(is);
for (int y = yTop; y < yBottom; y++)
if (is[0].containsY(y)) {