Revision 277eddbb
Added by Leszek Koltunski over 4 years ago
src/main/java/org/distorted/library/effectqueue/EffectQueueMatrix.java | ||
---|---|---|
37 | 37 |
private static float[] mMVPMatrix = new float[16]; |
38 | 38 |
private static float[] mModelViewMatrix = new float[16]; |
39 | 39 |
|
40 |
private static int[] mStretchH = new int[MAIN_VARIANTS]; |
|
41 | 40 |
private static int[] mMVPMatrixH = new int[MAIN_VARIANTS]; |
42 | 41 |
private static int[] mMVMatrixH = new int[MAIN_VARIANTS]; |
43 | 42 |
|
... | ... | |
52 | 51 |
|
53 | 52 |
static void uniforms(int mProgramH, int variant) |
54 | 53 |
{ |
55 |
mStretchH[variant] = GLES30.glGetUniformLocation(mProgramH, "u_Stretch"); |
|
56 | 54 |
mMVPMatrixH[variant]= GLES30.glGetUniformLocation(mProgramH, "u_MVPMatrix"); |
57 | 55 |
mMVMatrixH[variant] = GLES30.glGetUniformLocation(mProgramH, "u_MVMatrix"); |
58 | 56 |
} |
... | ... | |
101 | 99 |
// combined Model-View-Projection matrix |
102 | 100 |
Matrix.multiplyMM(mMVPMatrix, 0, projection, 0, mModelViewMatrix, 0); |
103 | 101 |
|
104 |
GLES30.glUniform3f( mStretchH[variant] , mesh.getStretchX() , mesh.getStretchY() , mesh.getStretchZ() ); |
|
105 | 102 |
GLES30.glUniformMatrix4fv(mMVMatrixH[variant] , 1, false, mModelViewMatrix, 0); |
106 | 103 |
GLES30.glUniformMatrix4fv(mMVPMatrixH[variant], 1, false, mMVPMatrix , 0); |
107 | 104 |
} |
src/main/java/org/distorted/library/mesh/MeshBase.java | ||
---|---|---|
514 | 514 |
{ |
515 | 515 |
return (component>=0 && component<mComponent.size()) ? mComponent.get(component).mTextureMap : null; |
516 | 516 |
} |
517 |
|
|
518 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
519 |
/** |
|
520 |
* Sometimes we want to display a Mesh on a rectangular screen. Then we need to stretch it by |
|
521 |
* different factors in x and y (or z) directions. If we also wanted do display some vertex effects |
|
522 |
* done on this mesh, let's say a bulge done by a Distort effect, and wanted the bulge to be round, |
|
523 |
* (i.e the same in x and y directions) then doing so without this method would be impossible. |
|
524 |
* |
|
525 |
* This sets 'stretch' factors in each 3 dimensions. All vertices of this Mesh will be premultiplied |
|
526 |
* by those factors in the very first line of the Vertex Shader, before any Effects are done on it. |
|
527 |
* Using this we can thus pre-stretch the mesh to aspect ratio equal to the surface we eventually |
|
528 |
* want to display the Mesh on, and this way we can achieve a round Distort bulge! |
|
529 |
* |
|
530 |
* This could also be used to pre-stretch a Rectangles Mesh to a size equal (in pixels) to the bitmap |
|
531 |
* this mesh is textured with - and this lets us work with all Effects in natural, pixel units. |
|
532 |
* |
|
533 |
* @param sx stretch factor in x. |
|
534 |
* @param sy stretch factor in y. |
|
535 |
* @param sz stretch factor in z. |
|
536 |
*/ |
|
537 |
public void setStretch(float sx, float sy, float sz) |
|
538 |
{ |
|
539 |
mStretchX = sx; |
|
540 |
mStretchY = sy; |
|
541 |
mStretchZ = sz; |
|
542 |
} |
|
543 |
|
|
544 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
545 |
/** |
|
546 |
* Returns the x-factor set by setStretch(). |
|
547 |
*/ |
|
548 |
public float getStretchX() |
|
549 |
{ |
|
550 |
return mStretchX; |
|
551 |
} |
|
552 |
|
|
553 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
554 |
/** |
|
555 |
* Returns the y-factor set by setStretch(). |
|
556 |
*/ |
|
557 |
public float getStretchY() |
|
558 |
{ |
|
559 |
return mStretchY; |
|
560 |
} |
|
561 |
|
|
562 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
563 |
/** |
|
564 |
* Returns the z-factor set by setStretch(). |
|
565 |
*/ |
|
566 |
public float getStretchZ() |
|
567 |
{ |
|
568 |
return mStretchZ; |
|
569 |
} |
|
570 | 517 |
} |
571 | 518 |
|
572 | 519 |
|
src/main/res/raw/main_vertex_shader.glsl | ||
---|---|---|
31 | 31 |
out vec3 v_Normal; // |
32 | 32 |
out vec2 v_TexCoordinate; // |
33 | 33 |
|
34 |
uniform vec3 u_Stretch; // MeshBase.mStretch{X,Y,Z} |
|
35 | 34 |
uniform mat4 u_MVPMatrix; // the combined model/view/projection matrix. |
36 | 35 |
uniform mat4 u_MVMatrix; // the combined model/view matrix. |
37 | 36 |
uniform float u_Inflate; // how much should we inflate (>0.0) or deflate (<0.0) the mesh. |
... | ... | |
93 | 92 |
|
94 | 93 |
void main() |
95 | 94 |
{ |
96 |
vec3 v = u_Stretch*a_Position;
|
|
95 |
vec3 v = a_Position + u_Inflate*a_Inflate;
|
|
97 | 96 |
vec3 n = a_Normal; |
98 | 97 |
|
99 |
v += u_Inflate*u_Stretch*a_Inflate; |
|
100 |
|
|
101 | 98 |
#if NUM_VERTEX>0 |
102 | 99 |
int effect=0; |
103 | 100 |
|
... | ... | |
110 | 107 |
#endif |
111 | 108 |
|
112 | 109 |
v_Position = v; |
113 |
v_endPosition = v + (0.2*u_Stretch.x)*n;
|
|
110 |
v_endPosition = v + 0.4*n;
|
|
114 | 111 |
v_TexCoordinate = a_TexCoordinate; |
115 | 112 |
v_Normal = normalize(vec3(u_MVMatrix*vec4(n,0.0))); |
116 | 113 |
gl_Position = u_MVPMatrix*vec4(v,1.0); |
Also available in: Unified diff
Remove the MeshBase.{set/get}Stretch API altogether.