[skycastle-commits] SF.net SVN: skycastle: [494] trunk/skycastle/modules/ui/src/main/java/org/ skycastle/sketch/rendering/StrokeRenderer.java

  • From: zzorn@xxxxxxxxxxxxxxxxxxxxx
  • To: skycastle-commits@xxxxxxxxxxxxx
  • Date: Mon, 28 Apr 2008 12:56:41 -0700

Revision: 494
          http://skycastle.svn.sourceforge.net/skycastle/?rev=494&view=rev
Author:   zzorn
Date:     2008-04-28 12:56:40 -0700 (Mon, 28 Apr 2008)

Log Message:
-----------
Okay got lines to turn toward the direction of travel now, althought I still 
need to do something for the missalignments that happen when the pen moves so 
slowly that no clear direction can be computed between adjacent points.  

It probably needs to look at the radius of the brush, and somehow average along 
that travel distance.

Runs out of memory fast, as the rendering is really suboptimal in memory usage.

Modified Paths:
--------------
    
trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/rendering/StrokeRenderer.java

Modified: 
trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/rendering/StrokeRenderer.java
===================================================================
--- 
trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/rendering/StrokeRenderer.java
 2008-04-28 18:34:37 UTC (rev 493)
+++ 
trunk/skycastle/modules/ui/src/main/java/org/skycastle/sketch/rendering/StrokeRenderer.java
 2008-04-28 19:56:40 UTC (rev 494)
@@ -3,6 +3,7 @@
 import com.jme.bounding.BoundingBox;
 import com.jme.image.Image;
 import com.jme.image.Texture;
+import com.jme.math.FastMath;
 import com.jme.math.Vector2f;
 import com.jme.math.Vector3f;
 import com.jme.renderer.ColorRGBA;
@@ -81,11 +82,11 @@
                                                                                
    false );
     private static final int NUMBER_OF_TRIANGLES_PER_SEGMENT = 4;
     private static final int NUMBER_OF_INDICES_IN_SEGMENT = 3 * 
NUMBER_OF_TRIANGLES_PER_SEGMENT;
-    private static final float DEFAULT_WIDTH = 8f;
+    private static final float DEFAULT_WIDTH = 28f;
     private static final float DEFAULT_RED = 0;
     private static final float DEFAULT_GREEN = 0;
     private static final float DEFAULT_BLUE = 0f;
-    private static final float DEFAULT_ALPHA = 0.7f;
+    private static final float DEFAULT_ALPHA = 0.2f;
 
     //======================================================================
     // Public Methods
@@ -251,6 +252,7 @@
 
         updateBounds();
     }
+
 /*
     public void setPlaceholderTexture( final Texture texture, final 
BoundingRectangle textureArea )
     {
@@ -297,17 +299,28 @@
         final DataSample pointState = new DataSample();
 
         int pointIndex = 0;
-        for ( final DataSample strokePoint : myStroke.getPoints() )
+        final int numberOfPoints = myStroke.getPoints().size();
+        for ( int i = 0; i < numberOfPoints; i++ )
         {
+            final int prevIndex = Math.max( i - 1, 0 );
+            final int nextIndex = Math.min( i + 1, numberOfPoints - 1 );
+
+            final DataSample previousPoint = myStroke.getPoints().get( 
prevIndex );
+            final DataSample strokePoint = myStroke.getPoints().get( i );
+            final DataSample nextPoint = myStroke.getPoints().get( nextIndex );
+
             pointState.updateValuesWith( strokePoint );
 
-            initializePoint( pointState, pointIndex++ );
+            initializePoint( pointState, pointIndex++, previousPoint, 
nextPoint );
         }
     }
 
 
     @SuppressWarnings( { "PointlessArithmeticExpression" } )
-    private void initializePoint( final DataSample strokePoint, final int 
pointIndex )
+    private void initializePoint( final DataSample strokePoint,
+                                  final int pointIndex,
+                                  final DataSample previousPoint,
+                                  final DataSample nextPoint )
     {
         final int index = pointIndex * 3;
 
@@ -321,14 +334,20 @@
         final float colorB = strokePoint.getVariable( "colorB", DEFAULT_BLUE );
         final float colorA = strokePoint.getVariable( "colorA", DEFAULT_ALPHA 
);
 
-        final Vector3f positionLeft = new Vector3f( xPos, yPos + width, zPos );
-        final ColorRGBA colorLeft = new ColorRGBA( colorR, colorG, colorB, 0 );
 
         final Vector3f positionMid = new Vector3f( xPos, yPos, zPos );
         final ColorRGBA colorMid = new ColorRGBA( colorR, colorG, colorB, 
colorA );
 
-        final Vector3f positionRight = new Vector3f( xPos, yPos - width, zPos 
);
+
+        final Vector2f leftEdgeOffset = calculateLeftEdgeOffset( 
previousPoint, nextPoint, width );
+
+        final ColorRGBA colorLeft = new ColorRGBA( colorR, colorG, colorB, 0 );
+        final Vector3f positionLeft = new Vector3f( positionMid );
+        positionLeft.addLocal( leftEdgeOffset.x, leftEdgeOffset.y, 0 );
+
         final ColorRGBA colorRight = new ColorRGBA( colorR, colorG, colorB, 0 
);
+        final Vector3f positionRight = new Vector3f( positionMid );
+        positionRight.addLocal( -leftEdgeOffset.x, -leftEdgeOffset.y, 0 );
 
         setPointData( index + 0, positionLeft, colorLeft );
         setPointData( index + 1, positionMid, colorMid );
@@ -336,6 +355,24 @@
     }
 
 
+    private Vector2f calculateLeftEdgeOffset( final DataSample previousPoint,
+                                              final DataSample nextPoint,
+                                              final float width )
+    {
+        final Vector2f v = new Vector2f( nextPoint.getVariable( "x", 0 ),
+                                         nextPoint.getVariable( "y", 0 ) );
+        v.subtractLocal( new Vector2f( previousPoint.getVariable( "x", 0 ),
+                                       previousPoint.getVariable( "y", 0 ) ) );
+        v.normalizeLocal();
+
+        v.rotateAroundOrigin( FastMath.HALF_PI, true );
+
+        v.multLocal( 0.5f * width );
+
+        return v;
+    }
+
+
     private void setPointData( final int index, final Vector3f position, final 
ColorRGBA color )
     {
         BufferUtils.setInBuffer( position, myVertexes, index );


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

Other related posts:

  • » [skycastle-commits] SF.net SVN: skycastle: [494] trunk/skycastle/modules/ui/src/main/java/org/ skycastle/sketch/rendering/StrokeRenderer.java