Projeção do Portal

7

Ok, ok, eu admito, estou entediado e brincando com um script de portal como o do Steam.

Eu descobri o seguinte:

  • posicionamento relativo das câmeras espelhadas
  • renderizar em textura para o portal (a textura é a vista da câmera oposta)
  • seleção múltipla de polis (como a câmera está atrás do outro portal, eu seleciono todas as polys atrás da face frontal do portal

Não consigo descobrir como dimensionar a projeção, então ignoro tudo fora da parte traseira do portal. Aqui está uma imagem para explicar.

A parte traseira do portal 2, vista da câmera 2, está sendo exibida na frente do portal 1. Meu problema é a balança. Quero ignorar tudo ao redor da linha pontilhada e ampliar a vista da câmera 2 para que ela se encaixe perfeitamente na frente do portal 1. Um grande problema com essa escala é a perspectiva mudar à medida que você se move. Eu não sou bom em matemática matricial para descobrir isso. Alguém tem uma ideia?

Estou procurando por uma matriz que eu possa definir como matriz de projeção para o cam2 para fazer isso funcionar.

insira a descrição da imagem aqui

brandon
fonte
11
Não tenho ideia do que está acontecendo na metade direita do seu diagrama e o que isso tem a ver com a metade esquerda ou com o seu problema.
Doppelgreener
11
Desculpe, a esquerda é uma visão aérea das câmeras. O direito é a vista do cam1. A área azul é a rendertexture para portal1 que exibe a vista para cam2
Brandon
11
Amanhã farei uma demonstração disso para mostrar com mais precisão qual é o meu problema. É difícil obtê-lo do outro lado enquanto está tudo na fase teoria :)
Brandon
Examinar o código fonte dos pseudoformas pode ajudar. (Pseudoform é um jogo / mecanismo de código aberto com portais - pseudoform.org/index.php?id=media )
Exilyth 18/03/13
Desde então, peguei álgebra linear e tudo ficou claro. Eu só precisava aplicar uma escala na matriz de projeção para a câmera 2 (a câmera fictícia). Em retrospectiva, teria sido mais fácil trabalhar apenas diretamente sobre o buffer de tela e fazer um substituto para os pixels dentro do limite da entrada portal
Brandon

Respostas:

2

Considere isso como um problema 2D puro, você tem as duas renderizações como imagens 2D e tudo o que você precisa fazer é sobrepor uma à outra, sem redimensionamento, movimento ou ângulos engraçados de projeção. Se você fizer o trabalho mais simples de colar e copiar que você pode imaginar, ele se encaixará perfeitamente.

Eu acho que você pode querer fazer isso de uma maneira mais transparente, usando a renderização cam 2 como uma textura para a renderização cam 1. Para que isso funcione corretamente, a renderização do came 2 deve ser a textura de um plano que é perpendicular ao ângulo da câmera na renderização 1.

Espero que isso responda à sua pergunta, com certeza será necessário um pouco de truque para que tudo seja pedido da maneira certa.

aaaaaaaaaaaa
fonte
Confira a imagem à direita. É exatamente assim que a vista do cam1 se parece. O bit azul pontilhado precisa ser redimensionado para caber em toda a região azul do portal1. Portanto, já é tecnicamente copiado e colado. Ele precisa dimensionar agora a ignorar o resto da visão que vem de cam2
Brandon
Bem, o cam2 precisa ter exatamente a mesma distância, ângulo e posição do plano do portal que o cam1, e você renderizaria com a mesma resolução, pensei que você tivesse consertado isso. Em qualquer caso, para que o dimensionamento funcione, a renderização cam2 deve ser aplicada a um retângulo de largura 2 * [distância da câmera] * [zoom da câmera], que deve fornecer o tamanho correto.
Aaaaaaaaaaaa
0

Este sistema é desnecessário. Instale apenas o hardware na sala (e seu conteúdo), traduza-o e gire-o, se necessário, para combinar e deixar a GPU fazer a seleção. Isso tem a grande vantagem de tornar o mundo sem problemas - ou seja, você não precisa fazer a IA funcionar especialmente com ele ou algo assim, pois você está estendendo o mundo de forma eficaz, em vez de apenas renderizá-lo duas vezes.

DeadMG
fonte
11
Não pode fazer isso. Isso causa todos os tipos de limitações de como eu tenho que configurar os portais e suas posições. Como eu disse, tenho tudo implementado, exceto a matriz de projeção. É uma solução muito simples que não causa limitações como uma segunda instância
brandon
11
A propósito, o Portal usa texturas de renderização. O mesmo acontece com queda Narbacular que é onde a idéia para portal veio
Brandon
11
Como alguém que literalmente ontem jogou o Portal 1 com comentários do desenvolvedor, ele não usa texturas de renderização :) Eles tiveram problemas de desempenho ao fazê-lo. Ele renderizará parte do último buffer de estrutura como uma solução de fallback para portais infinitos, mas, em geral, está renderizando geometria aninhada. Verifique o comentário do desenvolvedor para os níveis 3 e 14 da câmara de teste e brinque um pouco com o comportamento aos 14 anos - é bastante claro visualmente quando se adia para a versão antiga renderizada.
precisa saber é o seguinte