log in | register | forums
Show:
Go:
Forums
Username:

Password:

User accounts
Register new account
Forgot password
Forum stats
List of members
Search the forums

Advanced search
Recent discussions
- Archive Edition 27:2 reviewed (News:)
- RISC OS 5.30 arrives (News:7)
- Rougol Talk May 2024 - Andy Vawer (News:)
- Rougol May 2024 meeting on monday with Andy Vawer (News:1)
- WROCC May 2024 meeting - Gerph talks games (News:)
- Drag'n'Drop 13i3 edition reviewed (News:1)
- Wakefield Show 2024 in Pictures (News:5)
- April 2024 News Summary (News:2)
- Upgrading your RISC OS system to 5.30 (News:2)
- WROCC May 2024 meeting on wednesday - Gerph talks games (News:)
Latest postings RSS Feeds
RSS 2.0 | 1.0 | 0.9
Atom 0.3
Misc RDF | CDF
 
View on Mastodon
@www.iconbar.com@rss-parrot.net
Site Search
 
Article archives
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