1
\$\begingroup\$

I am trying to implement zoom using Slick2D library.

As I understand, to zoom something on non (0,0) coordinates, we need:

  • translate so the target point is in (0,0)
  • apply scale factor
  • translate the target point back from (0,0)

Code example :

 aGraphics.translate(-width/2, -height/2);
 aGraphics.scale(2,2);
 aGraphics.translate(width/2, height/2);

The issue is, as far I understand, that the scale factor is applied to the translation too. To compensate this, I have use the next code :

 aGraphics.translate(-width/2, -height/2);
 aGraphics.scale(2,2);
 aGraphics.translate(width/4, height/4);

Is this expected behaviour for graphics ? Can I workaround the above effect using push/pop matrix ?

\$\endgroup\$
4
  • 1
    \$\begingroup\$ After you scale your object by scale, your coordinates will be scale times bigger. So try multiplying the offset by the scale factor, after the scale have been applied. aGraphics.translate(offsetX*scaleX, offsetY*scaleY); \$\endgroup\$ Jul 9, 2013 at 16:10
  • \$\begingroup\$ Yep. You've adjusted the second translation backwards; you need to use (width, height) in the second one instead of (width/4, height/4). \$\endgroup\$ Jul 9, 2013 at 17:04
  • \$\begingroup\$ @NathanReed, could you please detail your answer? Yes - it's expected, or Yes - there is a workaround ? \$\endgroup\$
    – StKiller
    Jul 9, 2013 at 18:39
  • \$\begingroup\$ @AndreiPodoprîgora I was agreeing with Gustavo's comment. \$\endgroup\$ Jul 9, 2013 at 20:45

1 Answer 1

0
\$\begingroup\$

Seems that slick 2d doesn't consider the center coordinates when scaling. It just multiplies any coordinates using current scale.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .