def getProjection(self, jittered=False, point=None): if self.is_perspective: viewportRadius = self.near_plane * math.tan( self.fov_degrees / 2.0 / 180.0 * math.pi) else: viewportRadius = self.ortogrphic_width * 0.5 if self.viewportWidthInPixels < self.viewportHeightInPixels: viewportWidth = 2.0 * viewportRadius viewportHeight = viewportWidth * self.viewportHeightInPixels / float( self.viewportWidthInPixels) else: viewportHeight = 2.0 * viewportRadius viewportWidth = viewportHeight * self.viewportWidthInPixels / float( self.viewportHeightInPixels) left = 0.5 * viewportWidth right = -0.5 * viewportWidth bottom = -0.5 * viewportHeight top = 0.5 * viewportHeight if jittered: if not point: x_j = random.uniform( -.75, .75) * viewportWidth / self.viewportWidthInPixels y_j = random.uniform( -.75, .75) * viewportHeight / self.viewportHeightInPixels else: x_j = (point[0] - 0.5) * 1.0 * viewportWidth / self.viewportWidthInPixels y_j = (point[1] - 0.5 ) * 1.0 * viewportHeight / self.viewportHeightInPixels left += x_j right += x_j top += y_j bottom += y_j if self.is_perspective: return Matrix44.perspective_projection_bounds( left, right, top, bottom, self.near_plane, self.far_plane) else: return Matrix44.orthogonal_projection(left, right, top, bottom, self.near_plane, self.far_plane)