I've looked into it a bit more, and I might be onto something, but I'm not sure, and I'd like some advice please. I found a function called Transformation, which takes as inputs:

- a translation vector

- a vector for the rotation point, and a quaternion to rotate

- a vector for the point to scale around, a vector for the amount of scaling, and a quaternion for rotating the axes along which to scale (so it doesn't necessarily scale on the default axes)

This sounds like the transform function somewhat known from X3D. There are also the functions named AffineTransform with less parameters. Both can be used. It is probably so that for your use case

* the scalingCenter is (0,0,0)

* the scalingRotation is (1,0,0,0)

* the scaling is (1,1,1)

* the rotationCenter is (0,0,0)

* the rotation is (your-rotation)

* the translation is (your-translation)

However: It would be easier to just set the elements of the transform matrix from the parameters you already have. Assuming that SlimDX uses row vectors, the 1st row stores the sideways vector, the 2nd row stores the upward vector, the 3rd row stores the forward vector, and the 4th row stores the position vector. (Notice please that the rows stores homogeneous coordinate vectors, so that each of the direction vectors has a 0 as its last element, while the position vector has a 1.)

So, if you have pairwise orthogonal vectors right, up, and forward then you can use the setters Matrix.Mxx for that purpose. If they are not pairwise orthogonal then you need to apply the cross product before using the vectors.