Project

General

Profile

« Previous | Next » 

Revision 67038dda

Added by Leszek Koltunski over 4 years ago

Correct the Rubik app for the recent changes to the library's Node.

View differences:

src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
51 51
    private MeshRectangles mMesh;
52 52
    private DistortedScreen mScreen;
53 53
    private Static3D mScale;
54
    private float mBmpRatio;
54 55

  
55 56
///////////////////////////////////////////////////////////////////////////////////////////////////
56 57

  
......
59 60
      mView = v;
60 61

  
61 62
      // MonaLisa bitmap is 320x366, this is thus (90,108) pixels from the lower-left corner
62
      Static3D centerLeft  = new Static3D( 90-320/2, 108-366/2,0);
63
      Static3D centerLeft  = new Static3D( ( 90-320*0.5f)/320.0f, (108-366*0.5f)/366.0f, 0);
63 64
      // (176,111) from the lower left
64
      Static3D centerRight = new Static3D(176-320/2, 111-366/2,0);
65
      Static3D centerRight = new Static3D( (176-320*0.5f)/320.0f, (111-366*0.5f)/366.0f, 0);
65 66

  
66 67
      // two regions defining the areas affected by the Distort effect
67
      Static4D rLeft  = new Static4D(-10, 10, 0, 25);
68
      Static4D rRight = new Static4D( 10,  5, 0, 25);
68
      Static4D rLeft  = new Static4D( -10/320.0f, 10/366.0f, 0, 25/320.0f);
69
      Static4D rRight = new Static4D(  10/320.0f,  5/366.0f, 0, 25/320.0f);
69 70

  
70 71
      // two dynamics for interpolating through vectors of distortion. Interpolate
71 72
      // every 1000 miliseconds, indefinately ('0.0f').
......
73 74
      Dynamic3D dRight= new Dynamic3D(1000,0.0f);
74 75

  
75 76
      // two vectors of distortion the left tip of the mouth gets distorted with -
76
      // interpolated from (0,0,0) - i.e. no distortion - to (-20,20,0), i.e.
77
      // interpolated from (0,0,0) - i.e. no distortion - to (-20 pixels, 20 pixels, 0), i.e.
77 78
      // slightly to the top left.
78
      dLeft.add ( new Static3D(  0,  0, 0) );
79
      dLeft.add ( new Static3D(-20, 20, 0) );
79
      dLeft.add ( new Static3D(         0,         0, 0) );
80
      dLeft.add ( new Static3D(-20/320.0f, 20/366.0f, 0) );
80 81

  
81 82
      // likewise two vectors the right tip is distorted with.
82
      dRight.add( new Static3D(  0,  0, 0) );
83
      dRight.add( new Static3D( 20, 10, 0) );
83
      dRight.add( new Static3D(         0,         0, 0) );
84
      dRight.add( new Static3D( 20/320.0f, 10/366.0f, 0) );
84 85

  
86
      // Equip MonaLisa with the Effects we want to draw her with - i.e. two Distorts of the mouth
85 87
      mEffects = new DistortedEffects();
86 88
      mEffects.apply( new VertexEffectDistort(dLeft , centerLeft , rLeft ) );
87 89
      mEffects.apply( new VertexEffectDistort(dRight, centerRight, rRight) );
88 90

  
91
      // ... and a Scale - so far by (1,1,1), i.e. no scale. The mScale point will be computed
92
      // later, in onSurfaceChanged, when we actually know the size of the screen and know how
93
      // much to scale the initial Mesh (which is 1x1x0 in size)
89 94
      mScale= new Static3D(1,1,1);
90 95
      mEffects.apply(new MatrixEffectScale(mScale));
91 96

  
......
103 108
    
104 109
    public void onSurfaceChanged(GL10 glUnused, int width, int height) 
105 110
      {
106
      float horiRatio = (float)width / mMesh.getStretchX();
107
      float vertRatio = (float)height/ mMesh.getStretchY();
108
      float factor    = horiRatio > vertRatio ? vertRatio : horiRatio;
111
      float min= width>height ? height : width;
109 112

  
110
      mScale.set( factor,factor,factor );
113
      mScale.set( min, min*mBmpRatio, 1 );
111 114
      mScreen.resize(width, height);
112 115
      }
113 116

  
......
131 134
        catch(IOException e) { }
132 135
        }  
133 136

  
134
      int bmpHeight = bitmap.getHeight();
135
      int bmpWidth  = bitmap.getWidth();
137
      mBmpRatio = (float)bitmap.getHeight()/bitmap.getWidth();
136 138

  
137 139
      // We could have gotten here after the activity went to the background
138 140
      // for a brief amount of time; in this case mTexture is already created.
139
      // Do not leak memory by creating it the second time around.
141
      // Do not create it the second time around then.
140 142
      if( mTexture==null ) mTexture = new DistortedTexture();
141 143

  
142 144
      // likewise the Mesh
143
      // This will make the Mesh stretched by bmpWidth x bmpHeight even before any effects
144
      // are applied to it (the Mesh - MeshRectangles - is flat, so the third parameter does not
145
      // not matter). bmpWight x bmpHeight is the size of the Bitmap, thus this means that we can
146
      // conveniently work with Effects thinking in Bitmap's native size in pixels. The origin is
147
      // in Bitmap's lower-left corner, thus e.g. a rotation which is meant to rotate the bitmap
148
      // around its center has to be centered at (bmpWidth/2, bmpHeight/2, 0).
149
      // Without this call, the default size of the Mesh is 1x1x0 ( or 1x1x1 in case of not-flat
150
      // Meshes) so we would need to be rotating around (0.5,0.5,0.0).
151
      if( mMesh==null )
152
        {
153
        mMesh = new MeshRectangles(9,9*bmpHeight/bmpWidth);
154
        mMesh.setStretch(bmpWidth,bmpHeight,0);
155
        }
145
      // Create an underlying Mesh of 9x10 vertices - this is for the Distort
146
      // effect to have vertices to distort. We multiply by mBmpRatio here so
147
      // that the Mesh's cells are as close to squares as possible (when they
148
      // finally be rendered with a Scale - see mScale)
149
      if( mMesh==null ) mMesh = new MeshRectangles(9, (int)(9*mBmpRatio) );
156 150

  
157 151
      // even if mTexture wasn't null, we still need to call setTexture() on it
158 152
      // because every time activity goes to background, its OpenGL resources
......
160 154
      // to recreate the internal OpenGL textures.
161 155
      mTexture.setTexture(bitmap);
162 156

  
157
      // Build the Scene Graph - attach all Objects we want to be rendered to the Screen.
163 158
      mScreen.detachAll();
164 159
      mScreen.attach(mTexture,mEffects,mMesh);
165 160

  
166
      // All effects are by default disabled!
161
      // All effects are by default disabled! Enable all we need (and better only those)
162
      // before the call to DistortedLibrary.onCreate(). Best done here.
167 163
      VertexEffectDistort.enable();
168 164

  
169 165
      try

Also available in: Unified diff