Example #1
0
	Transform Transform::LookAt(const Vector3 &pos, const Vector3 &look, const Vector3 &up) {
		Matrix4x4 camToWorld;

		// Initialize fourth column of viewing matrix
		camToWorld.matrix[0][3] = pos.x;
		camToWorld.matrix[1][3] = pos.y;
		camToWorld.matrix[2][3] = pos.z;
		camToWorld.matrix[3][3] = 1;

		// Initialize first three columns of viewing matrix
		Vector3 dir, temp_up;
		Vector3::Normalize(look - pos, dir);
		Vector3::Normalize(up, temp_up);

		Vector3 left;
		
		Vector3::Normalize(Vector3::Cross(temp_up, dir),left);
		Vector3 newUp = Vector3::Cross(dir, left);
		camToWorld.matrix[0][0] = left.x;
		camToWorld.matrix[1][0] = left.y;
		camToWorld.matrix[2][0] = left.z;
		camToWorld.matrix[3][0] = 0.;
		camToWorld.matrix[0][1] = newUp.x;
		camToWorld.matrix[1][1] = newUp.y;
		camToWorld.matrix[2][1] = newUp.z;
		camToWorld.matrix[3][1] = 0.;
		camToWorld.matrix[0][2] = dir.x;
		camToWorld.matrix[1][2] = dir.y;
		camToWorld.matrix[2][2] = dir.z;
		camToWorld.matrix[3][2] = 0.;
		return Transform(camToWorld.Inverse(), camToWorld);
	}
Example #2
0
	Transform::Transform(Matrix4x4& p_mat) : matrix(p_mat), matrix_inverse(p_mat.Inverse()){}