Triangulation: Basic level with ability to place points
This commit is contained in:
		
							parent
							
								
									74b52cb8c2
								
							
						
					
					
						commit
						9d66afaaca
					
				
							
								
								
									
										73
									
								
								triangulation.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								triangulation.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,73 @@
 | 
			
		||||
import pyray as RL
 | 
			
		||||
from pyray import (Rectangle as Rect, Vector2 as Vec2, Vector3 as Vec3, Camera3D, BoundingBox)
 | 
			
		||||
import math
 | 
			
		||||
import pdb
 | 
			
		||||
import random
 | 
			
		||||
from typing import Optional, Tuple, List
 | 
			
		||||
from dataclasses import dataclass, field
 | 
			
		||||
 | 
			
		||||
screen_width = 1280
 | 
			
		||||
screen_height = 1024
 | 
			
		||||
grid_slices = 100
 | 
			
		||||
grid_spacing = 0.2
 | 
			
		||||
 | 
			
		||||
@dataclass
 | 
			
		||||
class World:
 | 
			
		||||
    cam: Camera3D
 | 
			
		||||
    floor_bb: BoundingBox
 | 
			
		||||
    rotate_cam: bool = True
 | 
			
		||||
    frame_count: int = 0
 | 
			
		||||
    vertices: List[Vec3] = field(default_factory=list)
 | 
			
		||||
 | 
			
		||||
def init() -> World:
 | 
			
		||||
    cam = Camera3D(Vec3(0, 10, 10), Vec3(0, 0, 0), Vec3(0, 1, 0), 45, RL.CAMERA_PERSPECTIVE)
 | 
			
		||||
    half_grid = grid_slices * grid_spacing * 0.5
 | 
			
		||||
    floor_bb = BoundingBox(Vec3(-half_grid, -0.01, -half_grid), Vec3(half_grid, 0.01, half_grid))
 | 
			
		||||
    return World(cam, floor_bb)
 | 
			
		||||
 | 
			
		||||
def player_input(w: World):
 | 
			
		||||
    if RL.is_key_pressed(RL.KEY_SPACE):
 | 
			
		||||
        w.rotate_cam = not w.rotate_cam
 | 
			
		||||
    if RL.is_mouse_button_pressed(0):
 | 
			
		||||
        mouse_pos = RL.get_mouse_position()
 | 
			
		||||
        ray = RL.get_mouse_ray(mouse_pos, w.cam)
 | 
			
		||||
        collision = RL.get_ray_collision_box(ray, w.floor_bb)
 | 
			
		||||
        if collision.hit:
 | 
			
		||||
            p = collision.point
 | 
			
		||||
            w.vertices.append(Vec3(p.x, 0, p.z))
 | 
			
		||||
 | 
			
		||||
def update(w: World):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
def draw_3d(w: World):
 | 
			
		||||
    RL.draw_grid(grid_slices, grid_spacing)
 | 
			
		||||
    RL.draw_bounding_box(w.floor_bb, RL.GREEN)
 | 
			
		||||
    for vert in w.vertices:
 | 
			
		||||
        RL.draw_sphere(vert, 0.1, RL.GREEN)
 | 
			
		||||
 | 
			
		||||
def draw_2d(w: World):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
RL.init_window(screen_width, screen_height, "Starter");
 | 
			
		||||
RL.set_target_fps(60)
 | 
			
		||||
 | 
			
		||||
w = init()
 | 
			
		||||
while not RL.window_should_close():
 | 
			
		||||
    player_input(w)
 | 
			
		||||
    update(w)
 | 
			
		||||
 | 
			
		||||
    # Drawing
 | 
			
		||||
    if w.rotate_cam:
 | 
			
		||||
        RL.update_camera(w.cam, RL.CameraMode.CAMERA_ORBITAL)
 | 
			
		||||
    RL.begin_drawing()
 | 
			
		||||
    RL.clear_background(RL.WHITE)
 | 
			
		||||
 | 
			
		||||
    RL.begin_mode_3d(w.cam)
 | 
			
		||||
    draw_3d(w)
 | 
			
		||||
    RL.end_mode_3d()
 | 
			
		||||
 | 
			
		||||
    draw_2d(w)
 | 
			
		||||
 | 
			
		||||
    RL.end_drawing()
 | 
			
		||||
    w.frame_count += 1
 | 
			
		||||
    
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user