Thanks Jason. One month later and I finally got it working. You were
correct but it has taken a bit of time me to get my head around what
was going on. You suggestion would rotate the texture around the point
at which it was drawn but I wanted to rotate it around it's mid-point.
I see now that the secret is to:
- translate the origin to a draw point plus half the width and height.
- rotate
- translate back by half the width and height.
- draw
Here is my code. Note to anyone looking at this that I have just tried
it out and I am sure it can be tidied up. Also most importantly I am
adjusting the co-ordinate system to match that of canvas where the top
left is (0,0). This is because by drawing primitives as set to work in
Canvas as well.
surface.glMatrixMode(GL10.GL_MODELVIEW);
Grid.beginDrawing(surface, true, false);
surface.glBindTexture(GL10.GL_TEXTURE_2D, ids[index]);
surface.glLoadIdentity();
surface.glPushMatrix();
// Draw using the DrawTexture extension.
float drawWidth = texture.getDrawWidth();
float drawHeight = texture.getDrawHeight();
float ypos = screenHeight - drawHeight - y;
if (angle>0)
{
float halfWidth = drawWidth/2;
float halfHeight = drawHeight/2;
surface.glTranslatef(x+halfWidth, ypos+halfHeight, 0);
surface.glRotatef(-angle, 0.0f, 0.0f, 1.0f);
surface.glTranslatef(-halfWidth, -halfHeight, 0);
}
else
{
surface.glTranslatef(x, ypos, 0);
}
texture.getGrid().draw(surface, true, true);
surface.glPopMatrix();
Grid.endDrawing(surface);
surface.glDisable(GL10.GL_TEXTURE_2D);
Al.
On Oct 15, 3:37 pm, Jason <[email protected]> wrote:
> You want to call glLoadIdentity before anything else, and remember
> that the commands are on a stack, so are processed in "reverse" order.
>
> The glLoadIdentity will reset everything, so your matrix will be at
> 0,0. This means you draw, rotate, then translate; but you push the
> commands to do this onto the stack in reverse order.
>
> Here's what I do:
>
> // Load the identity matrix so we always start from 0,0
> gl.glLoadIdentity();
>
> // push a copy of the matrix on the stack to manipulate
> gl.glPushMatrix();
>
> // translate to target coordinates.
> gl.glTranslatef(x, y, 0.0f);
>
> // Scale if needed
> // gl.glScalef(scaleX, scaleY, 1.0f);
>
> // Rotate (must be in degrees)
> gl.glRotatef((float)Math.toDegrees(angle), 0, 0, 1.0f);
>
> // push the draw command last
> grid.draw(gl);
>
> // finally pop the matrix
> gl.glPopMatrix();
>
> There is NO need to re-translate back anywhere.. and certainly no need
> to perform an additional rotation as suggested.
>
> On Oct 15, 8:42šam, Kostya Vasilyev <[email protected]> wrote:
>
>
>
>
>
>
>
> > Add another rotate call before the non-working translate, with the inverse
> > angle (in your case, the value in 'angle' without the '-').
>
> > This will reverse the rotation so the translate call can undo the
> > translation.
>
> > --
> > Kostya Vasilyev --http://kmansoft.wordpress.com
>
> > 15.10.2010 1:30 ÐÏÌØÚÏ×ÁÔÅÌØ "Alistair." <[email protected]>
> > ÎÁÐÉÓÁÌ:
>
> > Alas, that had no effect. I have _something_ sort of working
>
> > š š š š š šsurface.glMatrixMode(GL10.GL_MODELVIEW);
>
> > surface.glEnable(GL10.GL_TEXTURE_2D);
>
> > surface.glBindTexture(GL10.GL_TEXTUR...
> > š š š š š šGrid.beginDrawing(surface, true, false);
>
> > š š š š š šsurface.glPushMatrix();
>
> > // Draw using the DrawTexture extension.
> > š š š š š šint drawHeight = texture.getDrawHeight();
> > š š š š š šint drawWidth = texture.getDrawWidth();
> > š š š š š šfloat ypos = screenHeight - drawHeight- y;
>
> > š š š š š šsurface.glLoadIdentity();
>
> > š š š š š šsurface.glTranslatef(x, ypos, 0);
>
> > surface.glRotatef(-angle, 0.0f, 0.0f, 1.0f);
> > š š š š š šsurface.glTranslatef(-x, -ypos, 0); // THIS NOT DOING WHAT
> > I THOUGHT WOULD
>
> > š š š š š štexture.getGrid().draw(surface, true, false);
>
> > š š š š š šsurface.glPopMatrix();
>
> > š š š š š šGrid.endDrawing(surface);
>
> > surface.glDisable(GL10.GL_TEXTURE_2D);
> > What I can't seem to get working now it the re-translate back to the
> > original point after the rotation.
>
> > On Oct 12, 6:02 am, Kunal Kant <[email protected]> wrote:
>
> > > remove that line " surface.glLoad...
> > > <[email protected]>wrote:
>
> > > > I am trying to rotate a bitmap in OpenGL. I have searched around and
> > > > come up w...
> > > > [email protected]<android-developers%2Bunsubs
> > > > [email protected]><android-developers%2Bunsubs
>
> > [email protected]>
>
> > > > For more options, visit this group at
> > > >http://groups.google.com/group/android-developers?hl=en...
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en