Ejemplo n.º 1
0
    def get_cor_face(self, face_int, pi, direcao_olho):
        """Retorna a cor RGB num ponto de uma face triangular resultante
        da soma das contribuições de todas as luzes em cena mesmo quando
        o ponto está em sombra (de uma ou mais luzes).
        """

        resultado_cor = CorRGB(0.0, 0.0, 0.0)

        for luz in self.lista_luzes:
            raio_luz = Reta(pi, luz.posicao)
            sombra, _, t, _ = self.get_face_intercetada_mais_proxima(raio_luz)
            direcao_luz = raio_luz.vetor_diretor
            vetor_normal = face_int.normal
            resultado_cor += face_int.get_cor_phong().get_cor_rgb(luz, direcao_luz, vetor_normal, direcao_olho, sombra)
        return resultado_cor
Ejemplo n.º 2
0
    def __init__(self, numero_linhas, numero_colunas):
        """Cria uma imagem com todos os pixels inicilaizados preto.
        Armazena o número de linhas e de colunas nos atributos
        "numero_linhas" e "numero_colunas", respectivamente. Inicializa o
        atributos "linhas" com as linhas de imagem com as dimensões
        especificadas e com todos os pixels a preto.
        """

        self.numero_linhas = numero_linhas
        self.numero_colunas = numero_colunas

        self.linhas = []
        for m in range(numero_linhas):
            linha = []
            for n in range(numero_colunas):
                linha.append(CorRGB(0.0, 0.0, 0.0))
            self.linhas.append(linha)
Ejemplo n.º 3
0
        ficheiro.close()


# testes
if __name__ == "__main__":

    # teste ao construtor
    imagem1 = Imagem(5, 5)

    # teste a __str__
    imagem2 = Imagem(5, 5)
    print(imagem2)

    # teste a set_cor
    imagem3 = Imagem(5, 5)
    branco = CorRGB(1.0, 1.0, 1.0)
    imagem3.set_cor(3, 3, branco)
    # print(imagem3)

    # testes a get_cor
    imagem4 = Imagem(5, 5)
    branco = CorRGB(1.0, 1.0, 1.0)
    imagem4.set_cor(3, 3, branco)
    # print(imagem4.get_cor(3, 3))
    # print(imagem4.get_cor(5, 5))

    # teste a guardar_como_ppm
    imagem5 = Imagem(3, 5)
    red = CorRGB(1.0, 0.0, 0.0)
    green = CorRGB(0.0, 1.0, 0.0)
    blue = CorRGB(0.0, 0.0, 1.0)
Ejemplo n.º 4
0
        if not interceta_face:
            return self.cor_fundo

        direcao_olho = raio.vetor_diretor
        cor_face = self.get_cor_face(face_int, pi, direcao_olho)

        return cor_face


# testes
if __name__ == "__main__":

    # teste ao construtor
    # teste ao construtor - cor da face
    verde = CorRGB(0.0, 0.3, 0.0)
    brilho = 100.0
    cor = CorPhong(verde, verde, verde, brilho)
    # teste ao construtor - face
    p1 = Ponto3D(0.0, 0.0, 0.0)
    p2 = Ponto3D(1.0, 0.0, 0.0)
    p3 = Ponto3D(0.0, 1.0, 0.0)
    face = FaceTriangular(p1, p2, p3, cor)
    lista_faces = [face]
    # teste ao construtor - luz
    branco = CorRGB(1.0, 1.0, 1.0)
    luz_posicao = Ponto3D(1.0, 0.0, 2.0)
    luz = Luz(luz_posicao, branco, branco, branco)
    lista_luzes = [luz]
    # teste ao construtor - camara
    camara_posicao = Ponto3D(0.0, 0.0, 2.0)
Ejemplo n.º 5
0
                str(self.cor_phong) + ")")

    def get_cor_phong(self):
        """Retorna a cor Phong da face triangular."""

        return self.cor_phong


# testes
if __name__ == "__main__":

    # teste ao construtor
    a = Ponto3D(0.0, 0.0, 0.0)
    b = Ponto3D(1.0, 0.0, 0.0)
    c = Ponto3D(0.0, 1.0, 0.0)
    k_ambiente = CorRGB(0.0, 0.0, 0.1)
    k_difusa = CorRGB(0.0, 0.0, 0.75)
    k_especular = CorRGB(1.0, 1.0, 1.0)
    brilho = 100.0
    cor = CorPhong(k_ambiente, k_difusa, k_especular, brilho)
    face1 = FaceTriangular(a, b, c, cor)
    print("Até aqui não foram lançadas exceções.")
    # teste à exceção ErroPontosColineares
    try:
        face2 = FaceTriangular(a, a, c, cor)
    except ErroPontosColineares:
        print(
            "Ao tentar definir-se a face face2 = FaceTriangular(a, a, c, cor)")
        print("Foi lançada a exceção ErroPontosColineares.")
        print("É o comportamento herdado da classe Plano.")
Ejemplo n.º 6
0
        r = direcao_luz * (-1.0) + normal * (2.0 * l_interno_n)

        cor_especular = (self.k_especular * luz.intensidade_especular *
                         ((direcao_olho.interno(r))**self.brilho))

        resultado = cor_ambiente + cor_difusa + cor_especular

        return resultado


# testes
if __name__ == "__main__":

    # teste ao construtor
    material_k_ambiente = CorRGB(0.0, 0.0, 0.1)
    material_k_difusa = CorRGB(0.0, 0.0, 0.9)
    material_k_especular = CorRGB(1.0, 1.0, 1.0)
    material_brilho = 100.0
    material_cor = CorPhong(material_k_ambiente, material_k_difusa,
                            material_k_especular, material_brilho)

    # teste a __str__
    print(material_cor)

    # teste a get_cor_rgb
    luz_posicao = Ponto3D(1.0, 0.0, 1.0)
    luz_intensidade_ambiente = CorRGB(1.0, 1.0, 1.0)
    luz_intensidade_difusa = CorRGB(1.0, 1.0, 1.0)
    luz_intensidade_especular = CorRGB(1.0, 1.0, 1.0)
    luz = Luz(
Ejemplo n.º 7
0
        # i_ significa intensidade_
        # a posição é um objeto Ponto3D
        # as intensidades são objetos CorRGB

        self.posicao = posicao
        self.intensidade_ambiente = intensidade_ambiente
        self.intensidade_difusa = intensidade_difusa
        self.intensidade_especular = intensidade_especular

    def __str__(self):

        return ("Luz(" + str(self.posicao) + ", " +
                str(self.intensidade_ambiente) + ", " +
                str(self.intensidade_difusa) + ", " +
                str(self.intensidade_especular) + ")")


if __name__ == "__main__":

    # teste ao construtor
    posicao = Ponto3D(1.0, 0.0, 3.0)
    intensidade_ambiente = CorRGB(0.1, 0.2, 0.3)
    intensidade_difusa = CorRGB(0.4, 0.5, 0.6)
    intensidade_especular = CorRGB(0.7, 0.8, 0.9)
    luz = Luz(posicao, intensidade_ambiente, intensidade_difusa,
              intensidade_especular)

    # teste a __str__
    print(luz)