19,468
社区成员
发帖
与我相关
我的任务
分享
//2D图rotate/move/scale
void scr_rotate(LHxx2DIMAGE *sc,float angle,float scale)
{
float dx,dy,dw,dh;//临时变量
float sw = sc->LHxxIw;//image width
float sh = sc->LHxxIh;//image height
float sclx,scly,sclw,sclh;//复位并放缩的坐标(局部坐标系--image的坐标系)
float hotx =sw/2;//旋转中心
float hoty =sh/2;
//复位 放缩 , 旋转 ,平移
float xscale=scale;
float yscale=scale;
//复位并放缩后的区域
sclx = -hotx*scale;
scly = -hoty*scale;
sclw = (sw - hotx);
sclh = (sh - hoty);
float sint, cost;
sint = sinf(angle);
cost = cosf(angle);
float w=sc->LHxxIw/2,h=sc->LHxxIh/2;
LHxxSCREENVERTEX* ss;
sc->LHxx2DMVertexBuffer->Lock( 0, 0, (void**)&ss, 0 );
((LHxxSCREENVERTEX *)ss)[0].LHxxSx = sclx*cost - scly*sint + sc->LHxxIx+w;
((LHxxSCREENVERTEX *)ss)[0].LHxxSy = sclx*sint + scly*cost + sc->LHxxIy+h;
((LHxxSCREENVERTEX *)ss)[1].LHxxSx = sclw*cost - scly*sint + sc->LHxxIx+w;
((LHxxSCREENVERTEX *)ss)[1].LHxxSy = sclw*sint + scly*cost + sc->LHxxIy+h;
((LHxxSCREENVERTEX *)ss)[2].LHxxSx = sclx*cost - sclh*sint + sc->LHxxIx+w;
((LHxxSCREENVERTEX *)ss)[2].LHxxSy = sclx*sint + sclh*cost + sc->LHxxIy+h;
((LHxxSCREENVERTEX *)ss)[3].LHxxSx = sclw*cost - sclh*sint + sc->LHxxIx+w;
((LHxxSCREENVERTEX *)ss)[3].LHxxSy = sclw*sint + sclh*cost + sc->LHxxIy+h;
sc->LHxx2DMVertexBuffer->Unlock();
}