try: import os os.environ['KANDINSKY_ZOOM_RATIO'] = '2' isPc = True except: isPc = False from v_math import * from graphics_3d import * import graphics_engine as gh import kandinsky as kd from time import monotonic from ion import * SPEED = 1 ROTATION_SPEED = 1 mesh = [ Edge3(Vector3(0, 0, 2), Vector3(1, 0, 2)), Edge3(Vector3(1, 0, 2), Vector3(1, 1, 2)), Edge3(Vector3(1, 1, 2), Vector3(0, 1, 2)), Edge3(Vector3(0, 1, 2), Vector3(0, 0, 2)), Edge3(Vector3(0, 0, 3), Vector3(1, 0, 3)), Edge3(Vector3(1, 0, 3), Vector3(1, 1, 3)), Edge3(Vector3(1, 1, 3), Vector3(0, 1, 3)), Edge3(Vector3(0, 1, 3), Vector3(0, 0, 3)), Edge3(Vector3(0, 0, 2), Vector3(0, 0, 3)), Edge3(Vector3(1, 0, 2), Vector3(1, 0, 3)), Edge3(Vector3(1, 1, 2), Vector3(1, 1, 3)), Edge3(Vector3(0, 1, 2), Vector3(0, 1, 3)), ] camera = Camera(Vector3(3.37, 1, -3.46), -0.08, 0.56, 5) showPos = True gh.TOP = 18 * showPos def drawCameraPosition(): gh.logNumber(camera.position.x, Vector2(0, 0), '#ff0000') gh.logNumber(camera.position.y, Vector2(60, 0), '#00ff00') gh.logNumber(camera.position.z, Vector2(120, 0), '#0000ff') gh.logNumber(camera.pitch, Vector2(180, 0), '#aa0000') gh.logNumber(camera.yaw, Vector2(240, 0), '#00aa00') drawCameraPosition() deltaTime = 0 lastTime = monotonic() firstFrame = True while True: if any((firstFrame, keydown(KEY_DOWN), keydown(KEY_UP), keydown(KEY_LEFT), keydown(KEY_RIGHT), keydown(KEY_MINUS), keydown(KEY_PLUS), keydown(KEY_ALPHA), keydown(KEY_LEFTPARENTHESIS), keydown(KEY_RIGHTPARENTHESIS))): firstFrame = False if keydown(KEY_ALPHA): showPos = not showPos gh.TOP = 18 * showPos kd.fill_rect(0, 0, gh.WIDTH, gh.HEIGHT, '#ffffff') if showPos: drawCameraPosition() else: kd.fill_rect(0, gh.TOP, gh.WIDTH, gh.HEIGHT, '#ffffff') if keydown(KEY_OK) or keydown(KEY_SHIFT): if keydown(KEY_DOWN): camera.pitch = max(-QUARTER_CIRCLE, camera.pitch - ROTATION_SPEED * deltaTime) if keydown(KEY_UP): camera.pitch = min(QUARTER_CIRCLE, camera.pitch + ROTATION_SPEED * deltaTime) if keydown(KEY_LEFT): camera.yaw = (camera.yaw + ROTATION_SPEED * deltaTime) % CIRCLE if keydown(KEY_RIGHT): camera.yaw = (camera.yaw - ROTATION_SPEED * deltaTime) % CIRCLE if showPos: gh.logNumber(camera.pitch, Vector2(180, 0), '#aa0000') gh.logNumber(camera.yaw, Vector2(240, 0), '#00aa00') else: if keydown(KEY_DOWN): camera.position = camera.position.sub(camera.getForward().mulK(SPEED * deltaTime)) if keydown(KEY_UP): camera.position = camera.position.add(camera.getForward().mulK(SPEED * deltaTime)) if keydown(KEY_LEFT): camera.position = camera.position.sub(camera.getRight().mulK(SPEED * deltaTime)) if keydown(KEY_RIGHT): camera.position = camera.position.add(camera.getRight().mulK(SPEED * deltaTime)) if showPos: gh.logNumber(camera.position.x, Vector2(0, 0), '#ff0000') gh.logNumber(camera.position.z, Vector2(120, 0), '#0000ff') n = keydown(KEY_PLUS) - keydown(KEY_MINUS) if n: camera.position.y += n * SPEED * deltaTime if showPos: gh.logNumber(camera.position.y, Vector2(60, 0), '#00ff00') n = keydown(KEY_RIGHTPARENTHESIS) - keydown(KEY_LEFTPARENTHESIS) if n: camera.focalLenth = max(1, camera.focalLenth + n * SPEED * deltaTime) drawMesh(mesh, '#00ffff', camera) drawMesh([Edge3(Vector3(0, 0, 0), Vector3(1, 0, 0))], '#ff0000', camera) drawMesh([Edge3(Vector3(0, 0, 0), Vector3(0, 1, 0))], '#00ff00', camera) drawMesh([Edge3(Vector3(0, 0, 0), Vector3(0, 0, 1))], '#0000ff', camera) while keydown(KEY_ALPHA): pass elif isPc: kd.get_pixel(0, 0) time = monotonic() deltaTime = time - lastTime lastTime = time