コード例 #1
0
    def cast_ray(self, orig, direction):
        material, intersect = self.scene_intersect(orig, direction)

        if material is None:
            return self.activeTexture

        light_dir = norm(sub(self.light.position, intersect.point))
        light_distance = length(sub(self.light.position, intersect.point))

        offset_normal = mul(intersect.normal,
                            1.1)  # avoids intercept with itself
        shadow_orig = sub(
            intersect.point,
            offset_normal) if dot(light_dir, intersect.normal) < 0 else sum(
                intersect.point, offset_normal)
        shadow_material, shadow_intersect = self.scene_intersect(
            shadow_orig, light_dir)
        shadow_intensity = 0

        if shadow_material and length(sub(shadow_intersect.point,
                                          shadow_orig)) < light_distance:
            shadow_intensity = 0.9

        intensity = self.light.intensity * max(
            0, dot(light_dir, intersect.normal)) * (1 - shadow_intensity)

        reflection = reflect(light_dir, intersect.normal)
        specular_intensity = self.light.intensity * (max(
            0, -dot(reflection, direction))**material.spec)

        diffuse = material.diffuse * intensity * material.albedo[0]
        specular = color(255, 255,
                         255) * specular_intensity * material.albedo[1]
        return diffuse + specular
コード例 #2
0
 def cast_ray(self, orig, direction):
     #funcion de rayo que nos va a retorar un color
     impacted_material = self.scene_intersect(orig, direction)
     if impacted_material:  #si si impacto retornamos el ojo
         #print('impacted material', impacted_material.diffuse)
         return impacted_material.diffuse
         #return color (200, 0, 0)
     else:
         #print('color', color(0,0,200))
         return color(77, 158, 179)
コード例 #3
0
#MATERIALS

from mathfunc import color
from dataclasses import dataclass


class Material(object):
    def __init__(self, diffuse, albedo, spec):
        self.diffuse = diffuse
        self.albedo = albedo
        self.spec = spec


ivory = Material(diffuse=color(100, 100, 80), albedo=(0.6, 0.3, 0.1), spec=5)
brown = Material(diffuse=color(212, 163, 108), albedo=(0.6, 0.3, 0.1), spec=5)
darkbrown = Material(diffuse=color(143, 86, 23),
                     albedo=(0.6, 0.3, 0.1),
                     spec=5)
green = Material(diffuse=color(139, 150, 18),
                 albedo=(0.9, 0.1, 0, 0, 0),
                 spec=10)
red = Material(diffuse=color(224, 47, 16), albedo=(0.9, 0.1, 0, 0, 0), spec=10)
snow = Material(diffuse=color(209, 232, 237), albedo=(0.6, 0.3, 0.1), spec=5)
coal = Material(diffuse=color(0, 0, 0), albedo=(0.6, 0.3, 0.1), spec=5)
carrot = Material(diffuse=color(227, 110, 14),
                  albedo=(0.9, 0.1, 0, 0, 0),
                  spec=10)
white = Material(diffuse=color(255, 255, 255), albedo=(0.6, 0.3, 0.1), spec=5)
yellow = Material(diffuse=color(252, 186, 3),
                  albedo=(0.9, 0.1, 0, 0, 0),
                  spec=10)
コード例 #4
0
#MATERIALS

from mathfunc import color


class Material(object):
    def __init__(self, diffuse):
        self.diffuse = diffuse


ivory = Material(diffuse=color(100, 100, 80))
snow = Material(diffuse=color(209, 232, 237))
coal = Material(diffuse=color(0, 0, 0))
carrot = Material(diffuse=color(227, 110, 14))
white = Material(diffuse=color(255, 255, 255))
コード例 #5
0
#181202
#Graficas por Computadora - 10
#RT2: Teddys
#snowman

import struct
from materials import coal, snow, ivory, carrot, white, red, green, yellow
from sphere import Sphere
from mathfunc import norm, V3, color, char, dword, word, sub, length, dot, mul, reflect, sum
from collections import namedtuple
import random
from numpy import matrix, cos, sin, tan, pi
import math
from light import Light

BLACK = color(0, 0, 0)
WHITE = color(255, 255, 255)


class Render(object):
    def __init__(self, width, height):
        self.width = width
        self.height = height
        self.scene = []
        self.activeTexture = WHITE
        self.clear()

    def clear(self):
        self.framebuffer = [[self.activeTexture for x in range(self.width)]
                            for y in range(self.height)]