Acorn Arcade forums: Programming: Rotated & scaled sprite plotting
|
Rotated & scaled sprite plotting |
|
MrTAToad (01:35 11/2/2013)
|
|
Nicholas Kingsley |
Message #121893, posted by MrTAToad at 01:35, 11/2/2013 |
Member
Posts: 36
|
I've got SpriteOp 56 displaying rotated and scaled sprites now.
However, the origin of the plotting is at the bottom left, whilst I want it to be the middle (ie subtract half the width and height off the X & Y position of the sprite).
My translation code is currently (with sinp and cosp being the radian of an angle) :
scaleMatrix[0]=(int) ((endScale*cosp)*65536.0); scaleMatrix[1]=(int) ((endScale*sinp)*65536.0); scaleMatrix[2]=(int) ((endScale*-sinp)*65536.0); scaleMatrix[3]=(int) ((endScale*cosp)*65536.0); scaleMatrix[4]=nx*256; scaleMatrix[5]=ny*256;
sourceCoords[0]=animXPos; sourceCoords[1]=animXPos; sourceCoords[2]=useWidth; sourceCoords[3]=useHeight;
inreg.r[0]=56+512; inreg.r[1]=(int) spriteInfo->spriteBlockInfo->spriteArea; inreg.r[2]=(int) spriteInfo->spritePtr; inreg.r[3]=1<<1; inreg.r[4]=(int) &sourceCoords; inreg.r[5]=0+8; inreg.r[6]=(int) &scaleMatrix; inreg.r[7]=-1; _kernel_swi(OS_SpriteOp,&inreg,&outreg);
Would the scaling matrix need to take into account half the width/height of the sprite or are the coordinate values incorrect ? I presume to convert from Draw units to OS units would be multiplication by 256...
nx and ny have been converted to OS units beforehand
[Edited by MrTAToad at 01:36, 11/2/2013] |
|
[ Log in to reply ] |
|
|
Acorn Arcade forums: Programming: Rotated & scaled sprite plotting |