Olá pessoal acho que já tá funcionando bom me chamo José Carlos né E tô aqui para explicar um pouquinho sobre essa segunda entrega que é a fase onde os grupos implementarão a intersecção comos E aí vamos dar uma lida na no que a especificação pede né E vamos tentar entender aqui de um pouquinho mais a fundo do que seria essa intersecção bom inicialmente a gente precisa fazer a intersecção da malha de triângulos o número de triângulos de uma forma geral Vou definir o que a malha de triângulos é Imagine que você tem vários objetos tá
3D sei lá um boneco do surf uma casa um carro qualquer objeto que você deseja renderizar 3D E aí todos os objetos 3D na na na maioria das implementações eles são formados por vários triângulos porque você fazer as coisas com triângulo você consegue ter uma melhor visualização daquela coisa tal como rotação tal como eh quanto mais triângulos você tiver na imagem mais nítida mais parecida com entre aspas o mundo reala estará e quanto menor a quantidade de triângulos também mais bruta ela estará então a maioria das implementações usam triângulos tem outras que usam retângulos quadrados
mas a maioria em si usa triângulos e é essas que a gente vai utilizar aqui no nosso projeto de PG tá então a primeira coisa que a gente vai definir é o número de triângulos tá quantos triângulos nós teremos na imagem em seguida nós temos o número total de vértices porque é bom a gente sempre dar separada porque um triângulo ele pode usar vértices que um outro triângulo já usa o que é muito comum e deixa mais eficiente tá outra informação que a gente precisa ter É claro uma lista de vértices ou seja para cada
vértice A Gente terá agora n vértices e esses n vértices darão o ponto nele no espaço tridimensional tá então a gente vai ter n vértices e cada vértices vai ser representado pela coordenada x y e z Ok em seguida a gente vai ter uma lista com triplas de índices de vértices então cada tripla possui os índices de vértices que fazem parte de um triângulo Então antes de tudo vamos só dar uma olhadinha aqui como ficaria vamos dizer que a gente sei lá tem Ah três triângulos tá Vou colocar aqui 3t a gente vai ter ah
1 2 3 ah 1 2 3 4 5 vamos dizer que a tem cinco vértices e aqui embora seja 3D eu vou definir como 2D tá dois pontos vamos dizer que os cinco pontos aqui sejam esse aqui ó seja esse ponto aqui esse ponto aqui esse ponto aqui esse ponto aqui e esse ponto aqui tá aí vamos dizer que esse aqui tá no ponto 0 esse aqui tá no ponto 0 isso aqui tá no ponto 1 1 z0 isso aqui tá no ponto 1 1 e isso aqui tá no ponto 0.5 0.5 então na entrada
a já vai dar essas coisas né então vai dar o o vértice 0 o vértice 01 o vértice 1 0 o vértice 1 1 o vértice 0.5 e o vértice 0.5 Relembrando que no projeto de verdade nós teremos espaço tridimensional vou fazer dois deles para visualizar melhor a próxima coisa que a gente vai receber agora e as triplas dos vértices né que fazem parte do Triângulo Então vamos dizer que eu queira esse triângulo aqui ó que vem da aqui vem para cá E vem para cá então aqui eu preciso definir agora os índices então ele
pegou o ponto 00 que é o 1 certo então seja aqui a gente definisse como 1 2 3 4 5 então aqui eu teria o vértice 1 eu teria o vértice 1 z0 que na posição TR e teria o vértice 05 05 tá na posição simples se eu tivesse outro triângulo que seria esse aqui eu teria os vértices 0 zer que é 1 eu teria os vértices 0 1 que é [Música] o 2 e teria o vértice 05 05 que é o c tudo bem E aqui agora se eu quizesse esse esse triângulo aqui né
eu mais uma vez definiria o vértice 1 z0 então defino aqui 3 um 1 então eu deferia aqui qu e definir 0 que é o 2 Então essa é a definição de como a gente vai dar os vértices e os triângulos para definir a malha algumas outras informações que vai ter uma lista com os normais dos vetores com normais de triângulos certo então cada triângulo também ele vai ter um vetor normal esse vetor normal galera embora a gente D que muitas implementações ele não precisa porque a gente CONSEG calcular simplesmente pegando esse vetor se você
tem triângulo qualquer você consegue pegar esse vetor consegue pegar esse vetor aqui e agora é só calcular o produto vetorial entre eles que vai te dar um vetor para fora ou para dentro dependendo da ordem mas aí a gente vai dar já vai dar esse vetor aqui para vocês e a única coisa que vocês precisam fazer quando bate numa numa Num triângulo é saber qual lado tá tá se bateu do lado de dentro ou do lado de fora o lado de dentro ou lado de fora é definido pelo vetor normal Ok e e a outra
informação que a gente também vai dar é as normais dos vértices ah particularmente tá na minha implementação acabei não utilizando muito essa informação sobre o vetor normal dos vértices porém em alguns pontos ela é útil simplesmente para dar um tom de suavidade então se você quiser fazer uma superfície mais suave uma curva ali é interessante você ter as informações dos vetores dos vértices tá porque aí se você quiser saber qual o vetor para onde o vetor dessa porção aponta Então você faz um jogo de cálculos algébricos com esses três vetores a distância E aí você
consegue saber então você tem uma um um negócio mais esférico digamos assim né então seria bom ter essa informação também e também a gente vai ter a cor normalizada nessa implementação a gente vai ter a mesma cor para todos os triângulos da Mech Então se aqui eu definir a mechem se eu definir que a cor é um um um Ou seja cor branca então todos esses triângulos vão ter Branco você pode separar caso você queira que cada triângulo tenha uma cor para ficar mais colorido mas aí a gente vai dar cor para todos os triângulos
beleza e aí agora a pergunta é como é que a gente calcula a interceção bom a gente já sabe que tudo no tracing começa com raio e um raio ele é nada mais nada menos que uma que uma equação paramétrica então a equação paramétrica a gente vai ter que o X Ele é igual x0 mais 1 a x t o y é o y0 mais 1 b x t e o z é um z0 mais um C x t e como é que a gente faz isso Pessoal lembrando tá que esse T ele tem que
ser maior ou igual a zer porque a gente tá partindo do ponto x0 y0 z0 e tá indo até o infinito aumentando esse T aí então quando a gente tem um t negativo é como se a tivesse regredindo mas a gente quer olhar pra frente né Estamos jogando os raios pra frente então a gente vai ter um raio de luz que vai sair de um ponto e quando ele bater em um triângulo a gente primeiro precisa saber quando é que ele vai bater na Mex né e se bater na mexe Então as informações que a
gente precisa ter sei lá vamos dizer que a gente tem aqui uma casinha certo que é definida como uma mex só e essa casinha Sei lá ela tem vários polígonos certo ela tem esse polígono aqui tem esse polígono aqui tem esse polígono aqui tem esse polígono aqui bom o raio em si que eu jogar ele pode bater em mais de um polígono só que a gente tá interessado em saber qual qual polígono no nosso caso triângulo ele bateu primeiro ou seja qual que tem o menor T considerando T positivo mas igual a zero Então a
primeira coisa que a gente tem que fazer é fazer uma função de intersecte para essa me e dentro dessa meche basicamente a tem que passar por todos os triângulos que estão dentro da Mech Beleza então a gente pega todos os triângulos dentro da Mech e para cada triângulo agora a gente calcula interseção bom como é que a gente calcula interseção se a gente observar um triângulo ele é nada mais nada menos que uma parte de um plano vocês concordam comigo então se você já fez a interseção do Ray com o plano essa primeira parte é
fácil você só precisa pegar o raio de luz transformar esse triângulo na equação de plano e é simples já que a gente tem o vetor normal dele a gente calcula e verifica onde bateu então vamos supor que o nosso raio bateu aqui essa ção tá a gente tem um raio P R1 que bateu aqui e a gente tem um raio R2 que bateu aqui beleza Como saber se ele bateu no triângulo bom todos vão dependendo né todos eu já vou corrigir alguns raios eles podem não bater no plano porque eles podem ser paralelo ao plano
e para você saber se o raio ele é paralelo ao plano ele precisa ser ortogonal ao vetor normal ou seja o produto escalar desses dois vetores é zero Então esse é o primeiro cheque se o produto escalar desses dois pontos não é zero então ele bate no plano aí próximo cheque agora que você precisa sa ver é se quando ele bate no plano ele tem um t negativo porque se tiver você ignora caso contrário se ele bateu no plano A gente tem uma outra missão agora é saber em qual ponto do plano ele bateu aqui
ele bateu nesse pontinho aqui E esse R2 bateu nesse pontinho aqui visivelmente só um dos dois está dentro do Triângulo Então como é que a gente faz isso agora e aí pessoal para saber se um ponto está dentro de um outro triângulo a gente vai usar um conceito que vocês vão ver aí na cadeira e que a gente também vai falar bastante chamado coordenadas baric coordenadas baricêntricos é nada mais nada menos que você pegar um triângulo certo vamos dizer que a gente tem esse triângulo aqui e a gente vai definir tipo um Alfa um beta
e um Gama e basicamente todo mundo que estiver aqui ó dessa posição aqui paralela eu vou até mudar de cor PR ficar melhor o melhor possível de vocês visualizarem tá então deixa eu pegar aqui trocar a cor vamos colocar um vermelinho todo mundo que estiver aqui dentro ó dentro dessa área aqui ó tá eles vão ter um Gama entre zer e 1 Beleza se ele tiver fora o gama é zer então aqui a gente tem que o Gama é menor que zer e se el tiver aqui cima então Gama é maior do que 1 então
todo mundo que dá aqui dentro tem o gama entre 0 e 1 Esse é a nossa primeira coisa que a gente tem que ter né o gama tem que ser entre zer e 1 o alfa a mesma coisa então todo mundo que tá paralelo aqui nesse ponto ó todo mundo aqui certo dentro dessa desse nosso novo paralelograma agora aqui ele vai ter um Alfa menor do que zero e aqui ele vai ter um Alfa maior do que zero tá todo mundo que tiver na direita dessa aqui então se ele tiver entre ele vai ter um
Gama entre 0 e 1 e a mesma coisa pro beta quando a gente define aqui ó todo Beta aqui ops ops novamente Vamos definir direitinho todo Beta aqui ele vai ser menor que zero né que tá antes dessa reta aqui e todo Beta que tiver depois vai ser maior do que 1 então quando a gente tem esses três cheques a gente tá limitando para pegar apenas os pontos que tem a coordenada quicena do Alfa menor ou igual entre 0 e 1 do Beta entre 0 e 1 e do do gama entre 0 e 1 porque
ele vai tá exatamente limitado ao triângulo e como vocês vão ver mais para frente coordenadas baricêntricos eles conseguem definir exatamente um valor para todos os pontos do plano tá todos todos os pontos do plano e uma uma coisa legal é que propriedade né É que sempre o alfa mais o Beta mais o Gama de qualquer ponto na coordenada bar cêntrica ele vai ser igual a um se ele der diferente de um significa que o ponto não está presente no plano beleza pessoal Então esse é o que vocês vão fazer Ah e como é que eu
faço isso Bom basicamente vocês vão chegar tá no sistema de equações aqui de quatro equações em que você tem o primeiro valor Pro X o segundo valor pro y o segundo valor pro Z e aqui você tem o Ala mais Beta + Gama igual a 1 tá e aqui você soma com os três pontos você faz esse cálculo com os três pontos do Triângulo E aí Você precisa resolver esse sistema de equações Qual a forma de resolver sistema de equações bom você pode usar eliminação galciana só que pessoal eu usei eliminação galciana na minha primeira
tentativa e sei lá você vai rodar o projeto um pouco mais pesado ele vai demorar uma hora porque eliminação galciana é Custoso então a gente não precisa fazer isso tá tem uma forma mais legal de fazer isso que é usando apenas as áreas aqui do os os três pontos aqui um joguinho de equações e aí você consegue uma equação simples e rápida para resolver esse problema aqui da coordenada da bar cêntrica tá Então essa é a forma primeiro você faz uma função para pegar todos os triângulos do ponto calcula qual ponto no plano esse meu
raio acertou e depois verifica se esse ponto está dentro do Triângulo usando coordenadas bar cêntricas tá bom E aí pessoal a dica sempre tentem retornar aqui principalmente na triângular mestra a gente precisa de três informações que se vocês retornarem elas vão ser muito úteis primeira informação aí o vetor normal da superfície que você bateu segunda informação é o tempo né o t que você bateu e a terceira informação útil é no meu caso eu coloquei a cor né então você pode colocar a cor aqui porque cada triângulo meu tin uma cor Se você usar uma
mesma cor para Tod triângulo então você não precisa tá mas eu coloquei a cor aqui isso aqui vai ajudar você bastante para resolver o problema tá se você quiser dar índices também aos triângulos e quiser retornar os índices do Triângulo perfeito mas eu acho que só isso aqui já é o suficiente tá a normal o tempo e a cor ah aqui mas eu lancei o raio e não bateu em nenhum triângulo da da minha mecha então você pode retornar a um padrão o valor de diz que o vetor normal é o vetor nulo diz que
o tempo é um valor muito grande um infinito um double inf aí alguma coisa e a cor é zero tá E aí não vai interferir nada e você pode continuar fazendo cheque de uma forma mais rápida beleza pessoal esse aí a parte Nossa do triangular