En Blender, he creado una esfera con una textura panorámica en el interior. También he creado manualmente una malla plana (curva para que coincida con el tamaño de la esfera) que se sienta en la pared interior donde puedo dibujar una textura diferente.
Esto es genial, pero realmente quiero reducir el trabajo manual y hacer parte de este trabajo en un guión, como tener una variable para la imagen panorámica y las coordenadas del área en la fotografía que quiero reemplazar con una nueva malla.
La parte más difícil de hacer esto será crear una malla curva en código que pueda ubicarse en la pared interior de una esfera.
¿Alguien puede señalarme en la dirección correcta?
unity
mesh
dynamic-mesh
usuario5025
fuente
fuente
Respuestas:
Lo que intenta lograr parece estar muy relacionado con esto:
Análogo de coordenadas esféricas en n dimensiones
en su caso en 2 dimensiones, simplemente use esta fórmula para mapear los vértices del rectángulo que tiene (esperemos que esté subdividido) en su esfera (no olvide multiplicar por el medio diámetro en alguna parte. Solo los matemáticos viven en una esfera unitaria) las personas decentes usan diámetros ...)
EDITAR: Como todo esto es un poco vago, doy algunas ideas más Lo que necesita de esta fórmula para ser utilizado:
θ y φ son las coordenadas esféricas que está buscando (Latitud y Longitud) para obtenerlo, toma las coordenadas x / y de los puntos en una parte de la imagen panorámica como tal:
entonces obtendría su quad mapeado en una esfera basada en su posición xy en un sistema de coordenadas 2D traducido a la posición 3D en el espacio de acuerdo con el mapeo de la esfera.
EDITAR: Acabo de tener una idea, para ir más allá, podría encapsular las coordenadas del plano en la esfera utilizando valores UV como tales:
Allí podría administrar la posición cuádruple en su software 3D favorito (o incluso por código a través de la unidad) simplemente asignando valores UV (si de 0 a 1 en ambos ejes, entonces el quad se envolverá alrededor de la esfera)
ADVERTENCIA: El uso de UV requerirá que realice una conversión de radianes a grados. (como UV es de 0 a 1)
fuente
La respuesta de Géry Arduino anterior me señaló en la dirección correcta, pero me gustaría agregar un par de cosas aquí.
1) El seguimiento no funcionará en unidad debido a las diferencias del sistema de coordenadas
cambia esto a
2) No estaba claro en el rango de entrada de valores largos y lat definidos en la firma del método
Los valores de longitud y latitud deben estar en radianes. Su rango es el siguiente
fuente