关于D3DXMatrixTransformation2D函数的问题,请大家帮忙看一下,谢谢

时间:2023-01-29 20:39:41
void Sprite_Transform_Draw(LPDIRECT3DTEXTURE9 image, int x, int y, int width, int height, 
    int frame, int columns, float rotation, float scaling, D3DCOLOR color)
{
    //create a scale vector
    D3DXVECTOR2 scale( scaling, scaling );

    //create a translate vector
    D3DXVECTOR2 trans( x, y );

    //set center by dividing width and height by two
    D3DXVECTOR2 center( (float)( width * scaling )/2, (float)( height * scaling )/2);

    //create 2D transformation matrix
    D3DXMATRIX mat;
    D3DXMatrixTransformation2D( &mat, NULL, 0, &scale, &center, rotation, &trans );
    
    //tell sprite object to use the transform
    spriteobj->SetTransform( &mat );

    //calculate frame location in source image
    int fx = (frame % columns) * width;
    int fy = (frame / columns) * height;
    RECT srcRect = {fx, fy, fx + width, fy + height};

    //draw the sprite frame
    spriteobj->Draw( image, &srcRect, NULL, NULL, color );
}
这段代码使一个物体旋转伸缩,但是物体缩放时是以物体左上角的左边为中心缩放的,请问一下能不能是它按照物体的中心为中心点进行缩放。

5 个解决方案

#1


第二个参数是缩放的中心?

#2


是的,但是好像不是简单的给个坐标就行的,搞不好会把其他的给弄乱

#3


用这个函数
D3DXMatrixAffineTransformation2D

#4


或者
你制定缩放中心看

    D3DXMatrixTransformation2D( &mat,  &center, 0, &scale, &center, rotation, &trans );

#5


我现在还是direct初学者,楼上的那个函数还不会用,如果可以的话还是想先用D3DXMatrixTransformation2D把问题解决掉。
顺便说一下我刚有研究了一下,把D3DXMatrixTransformation2D中的第二个设置缩放中心点的参数给出后,再把旋转关掉就可以成功了,可把缩放和旋转一起运作里面的物体就又会满屏幕乱窜,麻烦大家再帮帮忙,谢谢

#1


第二个参数是缩放的中心?

#2


是的,但是好像不是简单的给个坐标就行的,搞不好会把其他的给弄乱

#3


用这个函数
D3DXMatrixAffineTransformation2D

#4


或者
你制定缩放中心看

    D3DXMatrixTransformation2D( &mat,  &center, 0, &scale, &center, rotation, &trans );

#5


我现在还是direct初学者,楼上的那个函数还不会用,如果可以的话还是想先用D3DXMatrixTransformation2D把问题解决掉。
顺便说一下我刚有研究了一下,把D3DXMatrixTransformation2D中的第二个设置缩放中心点的参数给出后,再把旋转关掉就可以成功了,可把缩放和旋转一起运作里面的物体就又会满屏幕乱窜,麻烦大家再帮帮忙,谢谢