Suggestion: wouldn't it be better to rename "Get[Near/Far]Plane" to "Get[Near/Far]PlaneDistance", and name GetCameraPlanePoints something like GetPlaneCorners (Camera is a given since we're in CCamera).

Also, this comes down to personal preference I guess, but I think CVector3D points[4] is (far) more readable than std::array<CVector3D, 4> points. Maybe with a using PlaneCorners = std::array<CVector3D, 4>; ?

Fixes @elexis's notes from IRC (2019-07-03#0ad-dev):
I didn't fix 22:02 < elexis> Vladislav: quad[0] = { ... } ?, because I didn't check that the code have to be inlined. So probably later.

It would construct one Vector3D and then assign it, probably copy-assign too. So indeed.
The redundant quad[i] references should be most likely optimized.

But perhaps we could add a Vector3D Set method that consumes the 3 arguments, making it more failsafe (as coordinates can only be assigned in triplets, making it less of a chance to assign to a wrong index etc.).