Hello marcelluss,
I recommend you to implement an aftershadow to put emphasis on the rotational transition. To achieve this effect you should remember a set of drawing parameters for the rectangle in the time between now and not too distant into the past. The time can be either modelled by the passed-frame count or any time function inside MTA. Then you will have to draw N amount of rectangles instead of a single one. The older the rectangle is the less alpha level it should be rendered with (multiply the original alpha with a new factor).
To get the basic rotation working you need to use the dxDrawMaterialPrimitive3D function in connection with a HLSL pixel shader. First you determine the center point of the rectangle on the screen to draw. Based on that you apply a "3D" matrix in screen-space coordinates around the previously calculated center point and set a decent rotation to it. Also we define an arbitrary distance D in pixels that the image should be away from the camera (minimum is half of the biggest side length of the rectangle). Calculate the 4 rectangle corner points (RCP) of the 3D screen space rotation, finally to calculate the virtual distance VD of each point to the virtual camera (taking D into account), calculating the fraction PS = VD/D and dividing the X,Y coordinates by PS to modell a frustum-based projection ... (you can look further down a post to see a method using dxDrawMaterialPrimitive)
Next we assume that there is no 3D world space software-side vertex clipping being performed by either MTA or the used drawing code (see Remarks). Push the rectangle as draw-call with coordinate z=0 to the Direct3D 9 rasterizer. Inside of the vertex shader we have to multiply the inverse of the D3D9 projection matrix with the received position coordinate (to nullify the multiplication that D3D9 performs by-spec for each vertex). Thus we have received the screen-space coordinates as pushed into the Lua MTA draw-call. Then we do apply the screen-space Direct3D 9 rasterization cross-hair to it, inside of the same vertex shader, as demonstrated by the following image:
Inside of the pixel shader we set the depth of the vertex to 0. We also disable the depth-test comparison by setting the ZFunc to Never while having depth enabled (maybe optional).
And that should be it. Hopefully this is of help to you.
Good luck! ?