forked from StanislavPetrovV/Software_3D_engine
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprojection.py
31 lines (27 loc) · 834 Bytes
/
projection.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import math
import numpy as np
class Projection:
def __init__(self, render):
NEAR = render.camera.near_plane
FAR = render.camera.far_plane
RIGHT = math.tan(render.camera.h_fov / 2)
LEFT = -RIGHT
TOP = math.tan(render.camera.v_fov / 2)
BOTTOM = -TOP
m00 = 2 / (RIGHT - LEFT)
m11 = 2 / (TOP - BOTTOM)
m22 = (FAR + NEAR) / (FAR - NEAR)
m32 = -2 * NEAR * FAR / (FAR - NEAR)
self.projection_matrix = np.array([
[m00, 0, 0, 0],
[0, m11, 0, 0],
[0, 0, m22, 1],
[0, 0, m32, 0]
])
HW, HH = render.H_WIDTH, render.H_HEIGHT
self.to_screen_matrix = np.array([
[HW, 0, 0, 0],
[0, -HH, 0, 0],
[0, 0, 1, 0],
[HW, HH, 0, 1]
])