I just downloaded your flow cover library and its a fantastic piece of work especially for a beginner who is trying to learn opengl like me. I have a couple of doubts in that.

In this piece of code.

GLfloat m[16]; memset(m,0,sizeof(m)); m[10] = 1; m[15] = 1; m[0] = 1; m[5] = 1; double trans = off * SPREADIMAGE; double f = off * FLANKSPREAD; if (f FLANKSPREAD) { f = FLANKSPREAD; } m[3] = -f; m[0] = 1-fabs(f); double sc = 0.45 * (1 - fabs(f)); trans += f * 1; glPushMatrix(); glBindTexture(GL_TEXTURE_2D,fcr.texture); glTranslatef(trans, 0, 0); glScalef(sc,sc,1.0); glMultMatrixf(m);How did you calculate the matrix m. Since I suppose m[0] and m[3] is in a column major format how did you calculate the math to use it to skew the objects ?

Thanks and regards,

[name withheld]

http://www.opengl.org/resources/faq/technical/transformations.htm

“For programming purposes, OpenGL matrices are 16-value arrays with base vectors laid out contiguously in memory. The translation components occupy the 13th, 14th, and 15th elements of the 16-element matrix, where indices are numbered from 1 to 16 as described in section 2.11.2 of the OpenGL 2.1 Specification.”

Normally *m[3]* is not used directly in standard OpenGL operations, though transformations may result in m[3] being populated. It essentially adds *x* in the source *(x,y,z,w)* vector into *w’* in the destination *(x’,y’,z’,w’)* vector, which is then used to divide through to get the final [pmath](x_r, y_r, z_r) = ({x{prime}}/{w{prime}}, {y{prime}}/{w{prime}}, {z{prime}}/{w{prime}})[/pmath]. So in this case, *m[3] = -f* and *m[15] = 1*, so [pmath]w{prime}=1-f*x[/pmath] (since *w* = 1), which is then divided through *x’,y’,z’* to give the final points.

In other words, I’m using the *x* position on the tile to divide through the points of the tile to give the perspective skewing effect.

I then multiply *m[0]* by *1 – fabs(f)* to shorten the tile in

*x*a little more.

Hope this helps.

– Bill