No Blender, criei uma esfera com uma textura panorâmica por dentro. Também criei manualmente uma malha plana (curvada para corresponder ao tamanho da esfera) que fica na parede interna, onde posso desenhar uma textura diferente.
Isso é ótimo, mas eu realmente quero reduzir o trabalho manual e fazer parte desse trabalho em um script - como ter uma variável para a imagem panorâmica e coordenadas da área na fotografia que quero substituir por uma nova malha.
A parte mais difícil de fazer isso será criar uma malha curvada no código que possa ficar na parede interna de uma esfera.
Alguém pode me apontar na direção certa?
unity
mesh
dynamic-mesh
user5025
fonte
fonte
Respostas:
O que você está tentando alcançar parece muito relacionado a isso:
Análogo de coordenadas esféricas em dimensões n
no seu caso, em 2 dimensões, basta usar esta fórmula para mapear os vértices do retângulo que você possui (vamos torcer para que ele seja subdividido) em sua esfera (não se esqueça de multiplicar pelo halfDiameter em algum lugar. Somente matemáticos estão vivendo em uma esfera unitária todos os outros pessoas decentes estão usando diâmetros ...)
EDIT: Como tudo isso é um pouco vago, dou mais algumas idéias O que você precisa desta fórmula para ser usado:
Sendo θ e φ as coordenadas esféricas que você está procurando (Latitude e Longitude) para obtê-lo, você pega as coordenadas x / y dos pontos na parte da imagem panorâmica como tal:
você mapeará seu quad em uma esfera com base em sua posição xy em um sistema de coordenadas 2D convertido para a posição 3D no espaço de acordo com o mapeamento da esfera.
Edição: Acabei de ter uma idéia, para ir mais longe, você pode encapsular as coordenadas do plano na esfera usando valores UV, como tal:
Lá você pode gerenciar a posição quad no seu software 3D favorito (ou mesmo através do código através da unidade) apenas atribuindo valores UV (se de 0 a 1 em ambos os eixos, o quad será envolvido em toda a esfera)
AVISO: O uso de UV exigirá a conversão de Radianos em Graus. (como UV é de 0 a 1)
fonte
A resposta de Géry Arduino acima me indicou a direção certa, mas eu gostaria de acrescentar algumas coisas aqui.
1) O seguinte não funcionará em unidade devido às diferenças do sistema de coordenadas
mude isso para
2) Não fiquei claro quanto ao intervalo de entrada de valores longos e latinos definidos na assinatura do método
Os valores de Longitude e Latitude devem estar em radianos. Seu alcance é o seguinte
fonte