main_3d.py

Created by valmontechno

Created on June 12, 2024

4.1 KB


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