Exemple #1
0
    def __init__(self, radius):
        self.radius = radius

        self.albedo = Color(1.0, 0.0, 0.0, 1.0)

        self.transform = Transform()

        self.material = None
Exemple #2
0
 def __init__(self):
     self.objects = []
     self.post_processing_effects = []
     self.background_color = Color(0.0,0.0,0.0,1.0)
     self.light = None
     self.ssaa_level = 1
     self.min_marching_distance = 0.06
     self.max_marching_steps = 40
    def update(self):
        self.f += 1
        c = self.getKeyRaw()
        if c != -1:
            self.c = c
        c = self.getKeyRaw()
        if self.getKeyRaw() == ord('o'):
            self.fountain = not self.fountain
        elif c == ord('m'):
            self.clear = not self.clear
        elif c == ord('n'):
            self.monochrome = not self.monochrome
        if self.fountain:
            p = self.instantiate(Particle)
            p.x = self.screen.width
            p.y = self.screen.height * 4 // 5
        delta_time = str(round(1 / self.delta_time))
        fixed_delta_time = str(round(1 / self.fixed_delta_time))
        gameObjects = str(len(self.gameObjects))
        self.screen.addstr(0, self.screen.width - len(delta_time), delta_time)
        self.screen.addstr(1, self.screen.width - len(fixed_delta_time),
                           fixed_delta_time)
        self.screen.addstr(0, 0, gameObjects)
        color = Color(h=(self.f * 2) if not self.monochrome else 0,
                      s=1.0,
                      l=0.5).toRGB()
        """for y, row in enumerate(self.map):
			for x, column in enumerate(row):
				# if True in self.map[y][x]:
				if self.tiles[y][x]:
					char = sum([2**self.correction[i] if column[i] else 0 for i in range(8)])
					self.screen.addstr(y, x, chr(10240 + char), color)"""
        for pos in self.tiles:
            y = pos[0]
            x = pos[1]
            char = sum([
                2**self.correction[i] if self.map[y][x][i] else 0
                for i in range(8)
            ])
            # self.screen.addstr(y, x, chr(10240 + char), color, -1)
            self.screen.addstr(y, x, chr(10240 + char), color)
        self.screen.addstr(0, 0, "", Colors.white)
        if self.clear:
            self.tiles = {}
            self.map = [[[False for i in range(8)]
                         for x in range(self.screen.width)]
                        for y in range(self.screen.height)]
        keyboard = [
            "1234567890-=", "qwertyuiop[]", "asdfghjkl;'", "zxcvbnm,./"
        ]
        # usable = "qweasdzxcomrf-=" + ("hjkl" if HJKL else "ijkl")
        for i in range(0, 4):
            layer = keyboard[i]
            offset = i - 1 if i > 1 else 0
            for s in layer:
                self.screen.addstr(
                    self.screen.height - 5 + i,
                    self.screen.width - 25 + offset, s, Colors.green
                    if s in "wasdqezxcvrfmnohjkl" else Colors.white)
                offset += 2
        # self.screen.addstr(self.screen.height - 5, self.screen.width - 30, "1 2 3 4 5 6 7 8 9 0 - =")
        # self.screen.addstr(self.screen.height - 4, self.screen.width - 30, "q w e r t y u i o p [ ] \\")
        # self.screen.addstr(self.screen.height - 3, self.screen.width - 29, "a s d f g h j k l ; ' ent")
        # self.screen.addstr(self.screen.height - 2, self.screen.width - 28, "z x c v b n m , . / shft")
        if self.c == ord('p'):
            self.close()
            return
        elif self.c != -1:
            self.screen.addstr(1, 0, chr(self.c))
        # if self.clear:
        # 	self.screen.clear()
        self.screen.refresh()
#!/usr/bin/env python3
# -*- coding: utf8 -*-

from engine.color import Color

default = [Color(r=200, g=200, b=200), -1]

bar = [Color(r=215, g=215, b=105), Color(r=88, g=88, b=88)]
bar_active = [default[0], Color(r=174, g=96, b=96)]
button = [Color(r=0, g=0, b=0), Color(r=215, g=215, b=105)]
button_active = [Color(r=0, g=0, b=0), Color(r=125, g=215, b=85)]
box = [default[0], -1]
box_active = [Color(r=215, g=96, b=96), -1]

Exemple #5
0
class Sphere:
    def __init__(self, radius):
        self.radius = radius

        self.albedo = Color(1.0, 0.0, 0.0, 1.0)

        self.transform = Transform()

        self.material = None

    def pre_render(self):
        pass

    def set_material(self, material):
        self.material = material

    def render(self, scene, interception):
        if self.material != None:
            return self.material.render(scene, interception)

        light = scene.get_light()

        if light is None:
            return self.albedo
        else:
            render_color = self.albedo.clone()

            light_direction = light.transform.position.minus(
                interception['hit_point']).normalized()
            dotNL = light_direction.dot_product(interception['normal'])
            # print("Dot light and normal: " + str(dotNL))
            rgb_value = render_color.rgb().multiply(max(0.0, dotNL))
            rgb_value = rgb_value.multiply(light.intensity)
            render_color.set_rgb(rgb_value)

            return render_color

        return self.albedo

    def intercepts(self, ray):
        # geometric solution
        # https://www.scratchapixel.com/lessons/3d-basic-rendering/minimal-ray-tracer-rendering-simple-shapes/ray-sphere-intersection

        # print('Sphere intercepts ray ' + str(ray))

        radius2 = self.radius * self.radius

        L = self.transform.position.minus(ray.origin)
        tca = L.dot_product(ray.direction)

        d2 = L.dot_product(L) - tca * tca
        if d2 > radius2:
            return {
                'result': False,
                'hit_point': Vector3.zero,
                'normal': None,
                'uv': Vector2.zero
            }
        thc = np.sqrt(radius2 - d2)
        t0 = tca - thc
        t1 = tca + thc

        if t0 > t1:
            tmp = t1
            t1 = t0
            t0 = tmp

        if t0 < 0:
            t0 = t1  # if t0 is negative, let's use t1 instead
            if t0 < 0:
                return {
                    'result': False,
                    'hit_point': Vector3.zero,
                    'normal': None,
                    'uv': Vector2.zero
                }  # both t0 and t1 are negative
        t = t0

        hit_point = ray.origin.add(ray.direction.multiply(t))
        normal = hit_point.minus(self.transform.position).normalized()

        v = normal

        v = self.transform.apply_transform_to_direction(v)

        longlat = Vector2(np.arctan2(v.x, v.z) + np.pi, np.arccos(-v.y))
        uv = Vector2(longlat.x / (2 * np.pi), longlat.y / np.pi)
        # uv.y = 1f - uv.y;
        # uv.x = 1f - uv.x;

        return {
            'result': True,
            'hit_point': hit_point,
            'normal': normal,
            'uv': uv
        }
Exemple #6
0
 def __init__(self, size):
     self.size = size
     self.transform = Transform()
     self.color = Color.random()
Exemple #7
0
 def init(self):
     Entity.init(self)
     if (self._type == CELL_TYPE_EMPTY):
         self.addComponent(CellRenderComponent(CELL_SIZE, CELL_SIZE, CELL_BORDER_WIDTH, Color(25, 25, 25), Color.BLACK))
     if (self._type == CELL_TYPE_BLOCK):
         self.addComponent(CellRenderComponent(CELL_SIZE, CELL_SIZE, CELL_BORDER_WIDTH, Color.BLUE, Color.BLACK))
Exemple #8
0
 def __init__(self):
     self.objects = []
     self.post_processing_effects = []
     self.background_color = Color(0.0, 0.0, 0.0, 1.0)
     self.light = None
     self.ssaa_level = 1