//------------------------------------------------------------------------- // CREATE LOOK AT creates a look-at matrix for use as a view matrix matrix4 create_look_at(vector3 &camera, vector3 &target, vector3 &up){ // Builds a look-at style view matrix. // This is essentially the same matrix used by gluLookAt(). matrix4 out; vector3 zAxis = camera - target; zAxis.Normalize(); vector3 xAxis = up.Cross(zAxis); xAxis.Normalize(); vector3 yAxis = zAxis.Cross(xAxis); yAxis.Normalize(); out[0] = xAxis.x; out[4] = xAxis.y; out[8] = xAxis.z; out[12] = -xAxis.Dot(camera); out[1] = yAxis.x; out[5] = yAxis.y; out[9] = yAxis.z; out[13] = -yAxis.Dot(camera); out[2] = zAxis.x; out[6] = zAxis.y; out[10] = zAxis.z; out[14] = -zAxis.Dot(camera); out[3] = 0.0f; out[7] = 0.0f; out[11] = 0.0f; out[15] = 1.0f; return out; }
vector3 vector3::Cross(const vector3& v1, const vector3& v2) { return v1.Cross(v2); }