/// Loops through an input array transforming each vec4 by the matrix. kmVec4* kmVec4TransformArray(kmVec4* pOut, unsigned int outStride, const kmVec4* pV, unsigned int vStride, const kmMat4* pM, unsigned int count) { unsigned int i = 0; //Go through all of the vectors while (i < count) { const kmVec4* in = pV + (i * vStride); //Get a pointer to the current input kmVec4* out = pOut + (i * outStride); //and the current output kmVec4Transform(out, in, pM); //Perform transform on it ++i; } return pOut; }
kmVec3* kmVec3TransformCoord(kmVec3* pOut, const kmVec3* pV, const kmMat4* pM) { /* a = (Vx, Vy, Vz, 1) b = (a×M)T Out = 1⁄bw(bx, by, bz) */ kmVec4 v; kmVec4 inV; kmVec4Fill(&inV, pV->x, pV->y, pV->z, 1.0); kmVec4Transform(&v, &inV,pM); pOut->x = v.x / v.w; pOut->y = v.y / v.w; pOut->z = v.z / v.w; return pOut; }