CDC's have a 4x4 matrix for rotating, scaling, skewing and shifting in 3 dimensions. To make the graphics routines use the transform, you must set the DCF_TRANSFORMATION flag. The matrix consists of ints that have been scaled 32 bits (GR_SCALE). See ::/Demo/Lectures/FixedPoint.ZC to learn why. See Mat4x4IdentEqu(), Mat4x4IdentNew(), Mat4x4Equ() and Mat4x4New(). See Mat4x4RotX(), Mat4x4RotY(), Mat4x4RotZ() and Mat4x4Scale() to rotate about axes and scale. Combine them with Mat4x4MulMat4x4Equ()/Mat4x4MulMat4x4New() and assign them to the CDC.dc with DCMat4x4Set(). See ::/Demo/Graphics/Box.ZC. You can rotate single points using Mat4x4MulXYZ(). The 4th dimension allows a neat trick where you can place pos shifts (translations), into the matrix and Mat4x4MulMat4x4Equ/ Mat4x4MulMat4x4New them to combine rotation/shift operations. Normally, you can't combine pos shift operations. See Mat4x4TranslationEqu() and ::/Demo/Graphics/Transform.ZC. Finally, CDC's have an x, y and z which is an additional shift (translation). The transformation is implemented as a callback on the CDC's transform() member. The default transform() callback is DCTransform(). See ::/Demo/Games/Talons.ZC or ::/Demo/Games/CastleFrankenstein.ZC to see how to change the transform() callback for foreshortening.