I have no idea what I'm doing lol
This commit is contained in:
parent
fd46a55009
commit
9112b3c297
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
__pycache__
|
||||||
|
renders/*
|
48
main_scene.py
Normal file
48
main_scene.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import pygame
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
import raytracer # raytracer.py
|
||||||
|
|
||||||
|
##### CONFIG #####
|
||||||
|
window_size = (1280, 720)
|
||||||
|
|
||||||
|
# raytracer config
|
||||||
|
vertical_fov = 90 # fov in degrees
|
||||||
|
|
||||||
|
##################
|
||||||
|
|
||||||
|
|
||||||
|
# convert fov to radians
|
||||||
|
vertical_fov = np.radians(vertical_fov)
|
||||||
|
|
||||||
|
|
||||||
|
# pygame init
|
||||||
|
pygame.init()
|
||||||
|
window = pygame.display.set_mode(window_size)
|
||||||
|
clock = pygame.time.Clock()
|
||||||
|
|
||||||
|
|
||||||
|
# raytracer init
|
||||||
|
focal_length = 1 / np.tan(vertical_fov / 2)
|
||||||
|
rt = raytracer.Raytracer(window_size, focal_length)
|
||||||
|
|
||||||
|
rt.update_cam_rot((np.radians(70), np.radians(-27), 0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# main loop
|
||||||
|
while True:
|
||||||
|
# events
|
||||||
|
for event in pygame.event.get():
|
||||||
|
if event.type == pygame.QUIT:
|
||||||
|
pygame.quit()
|
||||||
|
quit()
|
||||||
|
|
||||||
|
window.fill((0, 0, 0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# update
|
||||||
|
pygame.display.update()
|
||||||
|
clock.tick(60)
|
24
raytracer.py
Normal file
24
raytracer.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import numpy as np
|
||||||
|
|
||||||
|
# Z up
|
||||||
|
|
||||||
|
class Raytracer:
|
||||||
|
def __init__(self, window_size, focal_length):
|
||||||
|
self.window_size = window_size
|
||||||
|
self.focal_length = focal_length
|
||||||
|
|
||||||
|
self.cam_pos = np.zeros(3, dtype=np.float32)
|
||||||
|
self.cam_rot = np.zeros(3, dtype=np.float32)
|
||||||
|
self.cam_dir = np.zeros(3, dtype=np.float32)
|
||||||
|
|
||||||
|
def update_cam_rot(self, cam_rot): # pitch (down - top) | yaw (left - right) | roll
|
||||||
|
self.cam_rot = np.array(cam_rot, dtype=np.float32)
|
||||||
|
|
||||||
|
#### calculate camera direction ####
|
||||||
|
self.pitch_sin = np.sin(self.cam_rot[0])
|
||||||
|
|
||||||
|
self.cam_dir[0] = -np.sin(self.cam_rot[1]) * self.pitch_sin # from yaw and pitch
|
||||||
|
self.cam_dir[1] = np.cos(self.cam_rot[1]) * self.pitch_sin # from yaw and pitch
|
||||||
|
self.cam_dir[2] = -np.cos(self.cam_rot[0]) # from pitch
|
||||||
|
|
||||||
|
print(self.cam_dir)
|
Loading…
x
Reference in New Issue
Block a user