def reset(self): tangent = math.tan(self.FIELD_OF_VIEW_IN_DEGREES / 2.0 / 180.0 * math.pi) distanceFromTarget = self.sceneRadius / tangent self.position = Point3D(0, 0, distanceFromTarget) # print(self.position) self.target = Point3D(0, 0, 0) # print(self.target) self.up = self.ground.returnCopy() t2p = self.position - self.target M1 = Matrix4x4.rotationAroundOrigin(np.pi / 3, Vector3D(1, 0, 0)) # print('M1',M1) # M2 = Matrix4x4.rotationAroundOrigin( np.pi/2, Vector3D(1,0,0) ) # print(M2) M3 = Matrix4x4.rotationAroundOrigin(-np.pi / 6, Vector3D(0, 1, 0)) # print('M3',M3) # t2p = M2 * t2p # t2p = M1 * t2p # M_temp = Matrix4x4() # M_temp.m = [ 0.0, 0.0, -1.0, 0.0, # -1.0, 0.0, 0.0, 0.0, # 0.0, 1.0, 0.0, 0.0, # 0.0, 0.0, 0.0, 1.0 ] t2p = M1 * t2p t2p = M3 * t2p self.position = self.target + t2p self.ground = Vector3D(0, 0, 1)
def orbit(self, old_x_pixels, old_y_pixels, new_x_pixels, new_y_pixels): pixelsPerDegree = self.viewportRadiusInPixels / float(self.ORBITING_SPEED_IN_DEGREES_PER_RADIUS_OF_VIEWPORT) radiansPerPixel = 1.0 / pixelsPerDegree * math.pi / 180.0 t2p = self.position - self.target M = Matrix4x4.rotationAroundOrigin((old_x_pixels - new_x_pixels) * radiansPerPixel, self.ground) t2p = M * t2p self.up = M * self.up right = (self.up ^ t2p).normalized() M = Matrix4x4.rotationAroundOrigin((old_y_pixels - new_y_pixels) * radiansPerPixel, right) t2p = M * t2p self.up = M * self.up self.position = self.target + t2p
def orbit(self,old_x_pixels,old_y_pixels,new_x_pixels,new_y_pixels): pixelsPerDegree = self.viewportRadiusInPixels / float(self.ORBITING_SPEED_IN_DEGREES_PER_RADIUS_OF_VIEWPORT) radiansPerPixel = 1.0 / pixelsPerDegree * math.pi / 180.0 t2p = self.position - self.target M = Matrix4x4.rotationAroundOrigin( (old_x_pixels - new_x_pixels) * radiansPerPixel, self.ground ) t2p = M * t2p self.up = M * self.up right = (self.up ^ t2p).normalized() M = Matrix4x4.rotationAroundOrigin( (old_y_pixels - new_y_pixels) * radiansPerPixel, right ) t2p = M * t2p self.up = M * self.up self.position = self.target + t2p
def transform(self): tangent = math.tan( self.FIELD_OF_VIEW_IN_DEGREES/2.0 / 180.0 * math.pi ) viewportRadius = self.nearPlane * tangent 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) glFrustum( - 0.5 * viewportWidth, 0.5 * viewportWidth, # left, right - 0.5 * viewportHeight, 0.5 * viewportHeight, # bottom, top self.nearPlane, self.farPlane ) M = Matrix4x4.lookAt(self.position, self.target, self.up, False) glMultMatrixf(M.get())