def move_along_view(self, camera, distance): px, py, pz = gh_camera.get_position(camera._id) vx, vy, vz = gh_camera.get_view_vector(camera._id) px = px + (vx * distance) py = py + (vy * distance) pz = pz + (vz * distance) gh_camera.set_position(camera._id, px, py, pz)
def ComputeProjectiveScaleFactor(self, camera, lookat_x, lookat_y, lookat_z, screen_height, fov): fov_rad = fov * math.pi / 180.0 focalLength = (0.5 * screen_height) / (math.tan(fov_rad / 2)) px, py, pz = gh_camera.get_position(camera._id) dx = lookat_x - px dy = lookat_y - py dz = lookat_z - pz pivotDistance = math.sqrt((dx * dx) + (dy * dy) + (dz * dz)) S = pivotDistance / focalLength return S
def strafe_h_xz(self, camera, dist, update_lookat): v = vec3() u = vec3() v.x, v.y, v.z = gh_camera.get_view_vector(camera._id) v.neg() u.x, u.y, u.z = gh_camera.get_up_vector(camera._id) xvec = v.cross(u) p = vec3() p.x, p.y, p.z = gh_camera.get_position(camera._id) p.x = p.x + (xvec.x * dist) p.z = p.z + (xvec.z * dist) gh_camera.set_position(camera._id, p.x, p.y, p.z) if (update_lookat == 1): lookat_x = camera._lookat_x + (xvec.x * dist) lookat_y = camera._lookat_y + (xvec.y * dist) lookat_z = camera._lookat_z + (xvec.z * dist) self.set_orbit_lookat(camera, lookat_x, lookat_y, lookat_z)