Three numbers need a meaning
A 3D vector stores three components. Adding vectors adds matching components; multiplying by a scalar changes their scale. A position, a direction, and an RGB color can each have three numbers, but they play different roles. Do not normalize a position or treat a display color as a distance merely because the representations look alike.
The dot product multiplies matching components and adds them. dot(v, v) is the squared length. The sign of dot(a, b) tells you whether two directions broadly point together or apart. Once both are unit vectors, their dot product is the cosine of their angle.
Small math types make good value types. Pass a small vector by value, return results by value, and keep calculations separate from file access and scene construction. This makes each operation easy to inspect and test.
