/
FaDaQ
/
ModernGL-Demo
Обзор
Документация
Войти
/
FaDaQ
/
ModernGL-Demo
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
camera.py
52 строки
2 KB
FaDaQ
create: camera.py, cube.py, instanced_draw.py, label.py, settings.json, transform.py, fluid.png, grass.png, meteor.png, planks.png, stone.jpg
02 июн 2026, 14:37
Верифицирован
02 июн 2026, 14:37
db0a0b4
Код
Авторство
О чём код?
import numpy as np import moderngl as mgl from pyglm import glm, glm_typing import math from transform import Transform class Camera3D: def __init__(self, gl_context: mgl.Context, position: glm.vec3 = glm.vec3(0), rotation: glm.vec3 = glm.vec3(0), fov: float = 45.0): self.transform = Transform(position, glm.vec3(1), rotation) self.up = glm.vec3(0, 1, 0) self.fov = fov self.gl = gl_context @property def forward(self): yaw = self.transform.rotation.y pitch = self.transform.rotation.x front = glm.vec3( math.cos(math.radians(yaw)) * math.cos(math.radians(pitch)), math.sin(math.radians(pitch)), math.sin(math.radians(yaw)) * math.cos(math.radians(pitch)) ) front = glm.normalize(front) return glm.normalize(front) @property def right(self): rotation = self.transform.rotation yaw = rotation.y # Угол поворота вокруг Y # Вектор right перпендикулярен направлению взгляда # Для yaw-rotation: right = (-sin(yaw), 0, cos(yaw)) right = glm.vec3( -math.sin(math.radians(yaw)), 0, math.cos(math.radians(yaw)) ) return glm.normalize(right) @property def view(self): return glm.transpose(glm.lookAt(self.transform.position, self.transform.position + self.forward, self.up)) @property def projection(self, near: float = 0.1, far: float = 2000): viewport = self.gl.viewport return glm.transpose(glm.perspective(self.fov, viewport[2] / viewport[3], near, far))