scieee AI-readable full text Open interactive document viewer

Azimutz: diseño y desarrollo de un videojuego no euclídeo

Criado Gallart, Francisco

Abstract

Presentamos un motor para un videojuego en geometría no euclidiana en Unity. En esta memoria, proponemos bases matemáticas para su simulación, con un modelo unificado de las geometrías elíptica (o esférica), euclidiana e hiperbólica, con la curvatura de Gauss k como el parámetro . Esto expresará la intuición de que los tres modelos son similares para valores pequeños de k. Estudiamos con detalle los invariantes geométricos del modelo, sus propiedades geométricas y algunas formulaciones computacionalmente eficientes para la implementación de la óptica y la física en Unity.

Full text

Universidad Complutense de Madrid Trabajo de fin de grado Doble grado en Ingenier´ ıa Inform´ atica y Matem´ aticas Azimuth: dise˜no y desarrollo de un videojuego no eucl´ıdeo Autor: Francisco Criado Gallart Director: Dr. Marco Antonio G´omez Mart´ın Curso 2014-2015 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Noi siamo sul promontorio estremo dei secoli!... Perch`e dovremmo guardarci alle spalle, se vogliamo sfondare le misteriose porte dell’Impossibile? Il Tempo e lo Spazio morirono ieri. Noi viviamo gi`a nell’assoluto, poich`e abbiamo gi`a creata l’eterna velocit`a onnipresente. Marinetti, Manifesto futurista Autorizaci´on de difusi´on y utilizaci´on El alumno abajo firmante autoriza a la Universidad Complutense de Madrid a difundir y utilizar con fines acad´emicos, no comerciales y mencionando expresamente a sus autores, tanto la propia memoria, como el c´odigo, la documentaci´on y el prototipo creado. Francisco Criado Gallart Agradecimientos A nuestro director, Marco Antonio G´omez por su atenci´on y dedicaci´on orient´andonos en este trabajo, y al profesor Jes´us Mar´ıa Ruiz, por su exhaustiva atenci´on al detalle al revisarlo. A los profesores, de una forma u otra, me han ayudado a ver los problemas asociados a este trabajo desde otro punto de vista, en particular, Marco Castrill´on, Vicente Mu˜noz y Sixto Jes´us ´ Alvarez. A mis amigos Aitor Alonso, Mario Lezcano, David Mart´ınez y Jaime Mendiz´abal, con quienes hemos discutido mec´anicas e ideas para este proyecto a lo largo de incontables sobremesas. Y a mi hermana, que me descubri´o la Geometr´ıa. i Azimuth: Dise˜no y desarrollo de un videojuego no eucl´ıdeo Francisco Criado Gallart Resumen Presentamos un motor para un videojuego en geometr´ıa no euclidiana en Unity. En esta memoria, proponemos bases matem´aticas para su simulaci´on, con un modelo unificado de las geometr´ıas el´ıptica (o esf´erica), euclidiana e hiperb´olica, con la curvatura de Gauss k como el par´ametro . Esto expresar´a la intuici´on de que los tres modelos son similares para valores peque˜nos de k. Estudiamos con detalle los invariantes geom´etricos del modelo, sus propiedades geom´etricas y algunas formulaciones computacionalmente eficientes para la implementaci´on de la ´optica y la f´ısica en Unity . Palabras clave: geometr´ıa diferencial, geometr´ıa no eucl´ıdea, geometr´ıa computacional, desarrollo de videojuegos, Unity, inform´atica gr´afica Azimuth: Design and development of a non-euclidean videogame Francisco Criado Gallart Abstract We present an engine for the development of a non-Euclidean videogame in Unity. In this report, we propose mathematical foundations for its simulation, with an unified model for elliptic (or spheric), Euclidean and hyperbolic geometries, with the Gaussian curvature kas the parameter. This will show the intuition that all these models are similar for small values of k. We study with detail the geometric invariants of the parametrized model, its geometric properties and some computationally efficient formulations for the implementation of the optics and physics inside Unity. Keywords: differential geometry, non-euclidean geometry, computational geometry, videogame development, Unity, computer graphics ii ´ Indice general Cap´ıtulo 1. Introducci´on 1 1. Algunos videojuegos sobre el espacio 2 2. Modelos usuales en geometr´ıa no euclidiana 4 Cap´ıtulo 2. El modelo matem´atico 6 1. Los modelos geom´etricos 6 2. C´alculos locales 9 3. Descripciones extr´ınsecas: el papel de la forma bilineal ambiente 10 4. Trigonometr´ıa especial 11 5. Geod´esicas 13 6. Isometr´ıas, producto vectorial y transporte paralelo 14 7. Distancia geod´esica 16 8. Costuras 18 9. Tri´angulos en Ωk21 Cap´ıtulo 3. Detalles de implementaci´on 23 1. Representaci´on del modelo en Unity 23 2. Vertex Shader 24 3. Fragment Shader 25 4. Proyecci´on del mesh y las texturas 26 5. El movimiento 27 6. Distancias y colisiones 30 Cap´ıtulo 4. Conclusiones y trabajo futuro 32 Anexos 33 Anexo 1: Sobre la resoluci´on expl´ıcita de las ecuaciones de las geod´esicas 33 Anexo 2: Inmersi´on isom´etrica local de los modelos hiperb´olicos 34 Anexo 3: Vertex Shader para costuras de distintas curvaturas 36 Anexo 4: Algunos mapas interesantes 38 Bibliograf´ıa 40 iii Cap´ıtulo 1 Introducci´on Azimuth es un prototipo de videojuego 2D cenital, particularmente la parte del motor, en el que el jugador se mueve por un mundo con una geometr´ıa a la que no est´a acostumbrado, en particular, un mundo plano con curvatura no nula. En un mapa as´ı, muchas ideas geom´etricas a las que estamos acostumbrados no funcionan como esperamos, lo que puede dar lugar a algunos puzzles interesantes desde el punto de vista del dise˜no de videojuegos. El modelo abstracto de c´omo son nuestros mapas son superficies “poli´edricas” en las que: 1. Cada mapa est´a formado por un conjunto de pol´ıgonos convexos (“parches”) unidos por sus aristas (“costuras”). 2. Cada parche curvatura constante. Posiblemente distinta para distintos parches. La manera de mostrar el mapa sobre la pantalla es a trav´es de la Proyecci´on Azimutal Equidistante, que muestra cada punto de la superficie en un punto de la pantalla de tal forma que la distancia al jugador sobre la pantalla es la misma que sobre la superficie, y el ´angulo al que se ve el punto (medido sobre la “vertical” del personaje) es el mismo que el ´angulo sobre la superficie. De hecho, es esta proyecci´on la que le da nombre al juego. Con este tipo de superficies se pueden hacer mapas con caracter´ısticas topol´ogicas y geom´etricas especiales, que dan una dimensi´on extra a varios puzzles m´as o menos usuales: Puzzles de puertas y palancas: Es una idea b´asica de muchos videojuegos, que se puede mejorar mucho si a˜nadimos la posibilidad, no s´olo de abrir y cerrar puertas con interruptores, si no de cambiar las uniones entre parches. Puzzles de grafos planares: Consisten en aprovechar las caracter´ısticas topol´ogicas de la superficie. Por ejemplo, imponer la restricci´on de que el jugador no pueda pasar dos veces por el mismo punto. Seg´un el g´enero y la orientabilidad de la superficie, los grafos planares posibles son muy distintos, e implican que el jugador debe planificar muy bien su camino para alcanzar un objetivo. Puzzles de disparo: Si se dota al jugador de una pistola con la que activar interruptores, se pueden hacer puzzles en los que haya que descubrir las caracter´ısticas del mapa para saber a donde apuntar. Hay un puzzle de prueba de este tipo en el proyecto. Nosotros nos centramos en el desarrollo de un motor en la plataforma Unity que permita dar al dise˜nador del juego las herramientas para trabajar con un mapa no euclidiano, por ejemplo: Mostrar el mapa al jugador. Mover al jugador por el mapa. 1 Crear objetos en el mapa con su propio movimiento. Permitir interacciones entre objetos (palancas, puertas, etc). Permitir modificar el mapa din´amicamente (cambiando partes de la superficie del mapa). F´ısica b´asica de colisiones (paredes, balas, etc). Sobre esta infraestructura, hemos desarrollado algunos mapas y puzzles de prueba que muestran algunas de las capacidades de nuestro trabajo. Mi trabajo en particular se centra en el aspecto matem´atico, orient´andolo a la construcci´on de un modelo computacionalmente eficiente de los parches, costuras, movimiento y colisiones. Los detalles de la implementaci´on y arquitectura del proyecto se pueden consultar en las memorias de mis compa˜neros, Jose Pablo Cabeza y Alejandro Aguirre. El Cap´ıtulo 1 introduce el proyecto y presenta antecedentes de videojuegos que utilizan un espacio peculiar como parte de su mec´anica, y tambi´en presenta algunos modelos cl´asicos de geometr´ıa esf´erica e hiperb´olicas. El Cap´ıtulo 2 presenta el modelo matem´atico unificado de un s´olo parche de cualquier curvatura, sus propiedades y resultados m´as importantes, y una definici´on formal de la extensi´on de geod´esicas a trav´es de una costura. El Cap´ıtulo 3 se centra en las f´ormulas y algoritmos que requiere Unity para hacer funcionar el videojuego, por ejemplo relativas a la posici´on, movimiento y colisiones. El Cap´ıtulo 4 repasa los resultados obtenidos y es una reflexi´on de qu´e ideas se podr´ıan a˜nadir. 1. Algunos videojuegos sobre el espacio La idea de utilizar normas especiales de la f´ısica como base de un videojuego no es absolutamente original. Muchos videojuegos, sobre todo independientes, intentan destacar a trav´es de alguna mec´anica ´unica que les permita ofrecer experiencias distintas al jugador. Vamos a mencionar algunos ejemplos que han servido de inspiraci´on para el nuestro. El juego Braid es un juego independiente de puzzles y plataformas 2D en el que la mec´anica original no es espacial, sino temporal. El jugador tiene la capacidad de “rebobinar” el tiempo y volver a un momento pasado. La idea en s´ı no es original (de hecho fue popularizada por Prince of Persia: the sands of time, para paliar la dificultad de las acrobacias, y se ha utilizado en varios juegos desde entonces), pero el juego tiene varios objetos y mundos en los que las reglas del tiempo var´ıan notablemente y junto con esa mec´anica se obtienen puzzles muy originales. Por ejemplo algunos objetos (los dorados) no se rebobinan en el tiempo con el jugador, si no que se siguen moviendo. Tambi´en hay un mundo en el que el tiempo depende de la posici´on del jugador, otro con dos lineas temporales, incluso uno en que el tiempo del jugador va al rev´es que el de los dem´as objetos del mundo (haciendo que la causalidad sea algo complicada de entender). 2 2. C´alculos locales Consideramos la proyecci´on estereogr´afica πdesde (0,0,1) ∈Ωksobre el plano z= 0, dada por π(x, y, z) = (x, y) 1−z, cuya inversa es ϕ(u, v) = (2u, 2v, k(u2+v2)−1) k(u2+v2)+1 . Esta inversa est´a definida en un dominio abierto U⊂R2y parametriza : La hoja z≤ −1 del hiperboloide Ωken el caso hiperb´olico k < 0, con dominio U:k(u2+v2)+1>0, El plano z=−1 de los dos planos de Ω0en el caso euclidiano k= 0, con U=R2, y Toda la superficie Ωksalvo el punto de proyecci´on (0,0,1) en el caso el´ıptico k > 0, con U=R2. En adelante, se denotar´a D=k(u2+v2) + 1. Las derivadas parciales de ϕson: (ϕu=∂ϕ ∂u (u, v) = 2 D2(k(−u2+v2)+1,−2kuv, 2ku), ϕv=∂ϕ ∂v (u, v) = 2 D2(−2kuv, k(u2−v2)+1,2kv). Estos vectores forman una base del espacio tangente Tϕ(u,v)Ωky respecto ellos la matriz de la forma bilineal h,ikes hϕu, ϕuikhϕu, ϕvik hϕv, ϕuikhϕv, ϕvik=4 D21 0 0 1. Es pues una matriz definida positiva, es decir, la matriz de un producto escalar, y queda comprobado que, como anunciamos, hemos definido una m´etrica riemanniana por restricci´on de la forma h,ik. La primera forma fundamental de esa m´etrica es Ik=E F F G=4 D21 0 0 1. Ahora, calculamos los s´ımbolos de Christoffel resolviendo el siguiente sistema lineal bien conocido (v´ease [6]): (1)                  Γ1 11 =GEu−2FFu+FEv 2(EG −F2)=−2ku D,Γ2 11 =2EFu−EEv−FEu 2(EG −F2)=2kv D, Γ1 12 =GEv−FGu 2(EG −F2)=−2kv D,Γ2 12 =EGu−FEv 2(EG −F2)=−2ku D, Γ1 22 =2GFv−GGu−FGv 2(EG −F2)=2ku D,Γ2 22 =EGv−2FFv+FGu 2(EG −F2)=−2kv D. 9 Finalmente calculamos la curvatura seccional (de Riemann) con los s´ımbolos de Christoffel, que coincide con el par´ametro k, como cab´ıa esperar: K=−1 E∂Γ2 12 ∂u −∂Γ2 11 ∂v + Γ1 12Γ2 11 −Γ1 11Γ2 12 + Γ2 12Γ2 12 −Γ2 11Γ2 22=··· ≡ k. 3. Descripciones extr´ınsecas: el papel de la forma bilineal ambiente Antes de estudiar las geod´esicas, hay que destacar algunas propiedades geom´etricas del modelo. Recordemos que Ωk={P∈R3:kPkk=hP, Pik= 1/k}. Esto se corresponde con el modelo esf´erico usual, en que la esfera es el conjunto de puntos de norma 1, pero esta expresi´on tiene una singularidad (indefinici´on) en k= 0. Para tratar esta dificultad recurriremos al siguiente artificio: considerar la forma bilineal ha, bi∗ k=atB∗ kb=at  k0 0 0k0 0 0 1  b. Esta forma est´a definida para k= 0, y podemos escribir: Ωk={P∈R3:kPk∗ k=hP, Pi∗ k= 1}. Aunque si se hace k= 0 no se ve nada especialmente novedoso, este artificio permite usar las mismas f´ormulas para karbitrario, y f´ormulas continuas. Con el convenio 0·∞ = 1 escribiremos h,i∗ k=kh,ik. Volviendo a lo que interesa ahora, el espacio tangente en un punto ϕ(u, v) de la superficie es ortogonal con respecto a h,ikal propio vector de posici´on ϕ(u, v), lo que recuerda a la esfera: (hϕ, ϕuik=2 D32u(k(−u2+v2) + 1) −4kuv2+ 2u(k(u2+v2)−1= 0, hϕ, ϕvik=2 D32v(k(u2−v2) + 1) −4ku2v+ 2v(k(v2+u2)−1= 0. Adem´as, como F= 0, la terna de vectores {ϕu, ϕv, ϕ}es una base ortogonal de R3con respecto a h,ik. Aqu´ı debemos de nuevo mirar el caso k= 0. En este caso, la ortogonalidad 0 = hP, P0i0=h(x, y, −1),(x0, y0, z0)i0=xx0+yy0−z0·∞ significa como debe ser que z0= 0: si z06= 0 la igualdad anterior falla para ∞>(xx0+ yy0)/z0. Esta ortogonalidad se resuelve sin indeterminaciones usando h,i∗ k. Vamos a repetir la construcci´on usual de los s´ımbolos de Christoffel de forma extr´ınseca [3], pero utilizando esta base en vez de la habitual euclidiana (que usa el vector normal 10 euclidiano en vez del de posici´on). Se trata de expresar las derivadas segundas de ϕen la base {ϕu, ϕv, ϕ}: (1)          ϕuu = Λ1 11ϕu+ Λ2 11ϕv+L11ϕ, ϕuv = Λ1 12ϕu+ Λ2 12ϕv+L12ϕ, ϕvu = Λ1 21ϕu+ Λ2 21ϕv+L21ϕ, ϕvv = Λ1 22ϕu+ Λ2 22ϕv+L22ϕ. Como ϕuv =ϕvu, tenemos Λ1 12 = Λ1 21, Λ2 12 = Λ2 21,L12 =L21. Los Lij son unos candidatos excelentes para la segunda forma fundamental, a partir de los cuales estudiaremos en la secci´on 9 la cuesti´on interesante de si nuestros modelos son, global o localmente, superficies euclidianas de R3. Al igual que con la construcci´on usual de los s´ımbolos de Christoffel, derivamos los coeficientes de la primera forma fundamental para obtener un sistema de ecuaciones del que despejar los Λk ij:                  Eu=2hϕu, ϕuuik= 2EΛ1 11+ 2FΛ2 11, Ev=2hϕu, ϕuvik= 2EΛ1 12 + 2FΛ2 12, Fu=hϕuu, ϕvik+hϕu, ϕvuik=FΛ1 11+GΛ2 11 +EΛ1 21 +FΛ2 21, Fv=hϕuv, ϕvik+hϕu, ϕvvik=FΛ1 12 +GΛ2 12 +EΛ1 22 +FΛ2 22, Gu=2hϕv, ϕvuik= 2FΛ1 21 + 2GΛ2 21, Gv=2hϕv, ϕvvik= 2FΛ1 22 + 2GΛ2 22. Vemos que es el mismo sistema de ecuaciones que satisfacen los s´ımbolos de Christoffel. Por tanto, Λk ij = Γk ij. 4. Trigonometr´ıa especial En esta secci´on definimos dos funciones muy importantes para la parametrizaci´on de las geod´esicas m´as adelante. Definici´ on. Sea k6= 0. El coseno especial y el seno especial son las funciones: (Ck(x) = 1 2(e√−kx +e−√−kx), Sk(x) = 1 2√−k(e√−kx −e−√−kx). Utilizamos estas funciones de variable compleja para tener las mismas f´ormulas independientemente del signo de k. De todos modos, observamos que para x∈R: Si k < 0 es Ck(x) = cosh(√−kx), de modo que Ck(x)≥1. Si k > 0 es Ck(x) = cos(√kx), de modo que |Ck(x)| ≤ 1. En particular, para k=−1,1 obtenemos C1(x) = cos(x), S1(x) = sen(x). 11 C−1(x) = cosh(x), S−1(x) = senh(x). y para k= 0 tomamos (C0(x) = l´ımk→0Ck(x)=1, S0(x) = l´ımk→0Sk(x) = x. −2−10 1 2 −1 0 1 2 3 4 k=-4 k=-1 k=-0.25 k=0.25 k=1 k=4 (a) Coseno especial −2−10 1 2 −2 −1 0 1 2 k=-4 k=-1 k=-0.25 k=0.25 k=1 k=4 (b) Seno especial Figura 2 Definici´ on. Sea k6= 0. El arco coseno especial es la funci´on: ACk(x) = 1 √−klog x+√x2−1, donde (k < 0∧x≥1) ∨(k > 0∧x∈[−1,1]). Hay que aclarar qu´e rama del logaritmo complejo se est´a usando en esta definici´on. Puesto que pretende ser la inversa del coseno especial, esta rama tendr´a que ser continua en el dominio de definici´on de la funci´on y cumplir ACk(1) = 0. Adem´as, observando el comportamiento de x+√x2−1: Para k < 0, x∈[1,∞), se tiene que x+√x2−1 es real positivo. Para k > 0, x∈[−1,1], la expresi´on x+√x2−1 = x+i√1−x2se mueve a lo largo de la parte superior de la circunferencia unidad en el plano complejo. Por esto, la rama del logaritmo que usamos es aquella que es continua en los complejos de argumento (−π, π] y cumple log(1) = 0. Naturalmente ACkyCkson mutuamente inversas (en un dominio de definici´on adecuado): ACk◦Ck≡Id en {(k, x):(k < 0∧x≥0) ∨(k > 0∧x∈[0,π √k])}, Ck◦ACk≡Id en {(k, x):(k < 0∧x≥1) ∨(k > 0∧x∈[−1,1])}, y se cumplen las propiedades similares a las de las funciones trigonom´etricas: 12 Ck(x)2+kSk(x)2= 1, Ck(x+y) = Ck(x)Ck(y)−kSk(x)Sk(y), Sk(x+y) = Sk(x)Ck(y) + Ck(x)Sk(y). Tambi´en las derivadas se comportan convenientemente: C0 k(x) = −kSk(x). S0 k(x) = Ck(x). AC0 k(x) = 1 √−k√x2−1. El seno especial y coseno especial son muy parecidos a la trigonometr´ıa generalizada de Janos Bolyai, s´olo que ´el lo defini´o en el contexto de la geometr´ıa hiperb´olica, y mediante un desarrollo en serie de Taylor. 5. Geod´esicas En esta secci´on describimos las geod´esicas de nuestros modelos Ωk. Para empezar recordemos que las ecuaciones diferenciales de las geod´esicas son (v´ease [6]): (u00 +u02Γ1 11 + 2u0v0Γ1 12 +v02Γ1 22 =u00 +1 D(−4ku0(uu0+vv0)+2ku(u02+v2)) = 0, v00 +u02Γ2 11 + 2u0v0Γ2 12 +v02Γ2 22 =v00 +1 D(−4kv0(uu0+vv0)+2ku(u02+v02)) = 0. Pero vamos a obtener las geod´esicas sin resolver estas ecuaciones directamente, inspir´andonos en la propiedad de las superficies euclidianas de R3de que una curva es geod´esica si su derivada segunda es ortogonal a la superficie. Aqu´ı nos interesar´a que sea ortogonal con respecto a h,ik. Una resoluci´on expl´ıcita de las ecuaciones diferenciales se describir´a en el Anexo 1. En primer lugar, dada una curva de Ωkparametrizada por el arco, α(t) = ϕ(u(t), v(t)), calculamos de sus derivadas: α0=u0ϕu+v0ϕv, α00 =u00ϕu+v00ϕu+u02ϕuu + 2u0v0ϕuv +v02ϕvv. Ahora podemos escribir ϕuu, ϕuv, ϕuv en funci´on de la base {ϕu, ϕv, ϕ}usando las f´ormulas (1) de la secci´on anterior que hacen aparecer los s´ımbolos de Christoffel: α00 =··· =(u00 +u02Γ1 11 + 2u0v0Γ1 12 +v02Γ1 22)ϕu +(v00 +u02Γ2 11 + 2u0v0Γ2 12 +v02Γ2 22)ϕv +(u02L11 + 2u0v0L12 +v02L22)ϕ. Obs´ervese que las dos primeras coordenadas son exactamente la expresi´on de las ecuaciones diferenciales de las geod´esicas. Para terminar observamos que (D2 4hα00, ϕuik=u00 +u02Γ1 11 + 2u0v0Γ1 12 +v02Γ1 22, D2 4hα00, ϕvik=v00 +u02Γ2 11 + 2u0v0Γ2 12 +v02Γ2 22. 13 Es decir, una curva es geod´esica (cumple las ecuaciones diferenciales) si y s´olo si su derivada segunda es proporcional al vector de posici´on, si y s´olo si es ortogonal a la superficie. Podemos afinar m´as: una curva αparametrizada por el arco es una geod´esica si y s´olo si α00 =−kα. En efecto, como α(t)6= 0, existe una ´unica funci´on λ:R→Rtal que α00 =λα. En primer lugar, como la curva est´a en Ωk, se tiene hα, αik≡1/k. Derivando una vez resulta hα0, αik≡0 y derivando de nuevo obtenemos 0≡ hα00, αik+hα0, α0ik=hλα, αik+ 1 = λ·1/k + 1, de donde λ≡ −kcomo afirmamos.  Dicho esto, fijemos un punto inicial P0= (x0, y0, z0)∈Ωky una direcci´on inicial P0 0= (x0 0, y0 0, z0 0)∈TP0Ωk,hP0 0, P0 0ik= 1. La condici´on diferencial α00 =−kα ya nos hace pensar en funciones trigonom´etricas, y recordamos que el ejemplo m´as natural de geod´esica α(t) son los c´ırculos m´aximos de la esfera, que se parametrizan mediante las funciones trigonom´etricas ordinarias. Lo que hacemos aqu´ı es sustituir esas funciones trigonom´etricas por las versiones especiales presentadas en la secci´on 3: α(t) = P0Ck(t) + P0 0Sk(t). En primer lugar, αes una curva contenida en Ωk, pues: hα(t), α(t)i∗ k=hP0, P0i∗ kC2 k(t) + khP0 0, P0 0ikS2 k(t) + hP0, P0 0i∗ kCk(t)Sk(t)=1, de modo que α(t)∈Ωk. Adem´as, α(0) = P0yα0(0) = P0 0. Finalmente, la derivada segunda es: α00(t) = P0C00 k(t) + P0 0S00 k(t) = −k(P0Ck(t) + P0 0Sk(t)) = −kα(t). En consecuencia, esta parametrizaci´on es, en efecto, una geod´esica.  Por otra parte, es importante observar que las geod´esicas son secciones de la superficie por planos conteniendo al origen, ya que α(t) es combinaci´on lineal de P0yP0 0. La imagen de αes la secci´on plana de Ωkdeterminada por el punto inicial P0y cualquiera otro α(t), o por el punto inicial y una direcci´on inicial. 6. Isometr´ıas, producto vectorial y transporte paralelo Aqu´ı analizamos el comportamiento de las isometr´ıas de nuestras superficies. En particular, esto servir´a para simplificar el transporte paralelo. Isometr´ıas de los Ωk.Sea Nuna matriz ortogonal respecto de la forma bilineal h,ik, es decir, tal que Nt  1 0 0 0 1 0 0 0 1/k N=  1 0 0 0 1 0 0 0 1/k . 14 Esto quiere decir que sus columnas forman una base ortogonal y tienen respectivamente normas 1,1,1/k respecto de la forma h,ik. Observamos adem´as que: hP, Qik=Pt  1 0 0 0 1 0 0 0 1/k Q=PtNt  1 0 0 0 1 0 0 0 1/k NQ =hNP, NQik. Por tanto, Nconserva la forma bilineal en todo el espacio ambiente R3, y en particular, conserva la restricci´on de la forma a Ωk, restricci´on que es nuestra m´etrica h,ik. Como por lo mismo, Ndeja Ωkinvariante, luego Nes una isometr´ıa de Ωk. Hay que remarcar que la tercera columna de la matriz es un punto de Ωky las dos primeras columnas dos vectores unitarios tangentes a Ωken ese punto. Hemos demostrado la mitad de lo siguiente: Las isometr´ıas del modelo Ωkson las restricciones de los isomorfismos lineales de R3 ortogonales respecto de la forma h,ik. Falta ver que no hay m´as isometr´ıas que ´estas. En efecto, recordemos que una isometr´ıa est´a un´ıvocamente determinada por la imagen de un punto de Ωky la de dos vectores tangentes unitarios ortogonales en ese punto. Por ello, basta ver que hay suficientes isometr´ıas N, es decir, que dados un segundo punto de Ωky dos vectores tangentes unitarios ortogonales en ese segundo punto existe Nque transforma los datos primeros en los segundos. Pero si N1es la matriz de los primeros tres vectores y N2la de los segundos tres, entonces N=N2·N−1 1. A continuaci´on, definimos una noci´on de producto vectorial ×kde dos vectores, para poder construir una isometr´ıa dados s´olo la imagen de un punto y un vector de su espacio tangente (y una orientaci´on). Producto vectorial respecto de h,i∗ k.Dados a, b ∈R3, un candidato a producto vectorial a×kbde dos vectores a, b deber´ıa ser perpendicular a ellos, ha, a×kbik=hb, a×kbik= 0. Es decir, 0 = at btBk(a×kb) = (Bka)t (Bkb)t(a×kb). Por eso, un candidato es k(Bka)×(Bkb), con el producto vectorial usual (donde hemos multiplicado por k para evitar la indeterminaci´on). Entonces, definimos: a×kb=k(Bka)×(Bkb) =  a2a3 b2b3 ,− a1a3 b1b3 , k  a1a2 b1b2. En particular, ka×kbes el producto vectorial usual, multiplicando la ´ultima componente por k. Este vector es, como se pretende, perpendicular (con hik) a los dos primeros y cumple que kak2 kkbk2 k=1 kka×kbk2 k+ha, bi2 k, (es un c´alculo rutinario). Este producto vectorial tiene una propiedad importante: si AyBson dos puntos en una geod´esica α,A×kBpertenece al espacio tangente de cualquier punto de αy 15 adem´as es perpendicular a la velocidad en ese punto. En efecto, el vector normal al plano es perpendicular a cualquier par de vectores pertenecientes al plano. Como A×kBes normal al punto de la geod´esica, pertenece al espacio tangente, y adem´as ser´a normal a la velocidad en ese punto. Finalmente vemos la utilidad de todo esto para el transporte paralelo. Aplicaci´on al transporte paralelo en una geod´esica Consideramos ahora en Ωkel problema del transporte paralelo de un vector vtangente en un punto Pa lo largo de una geod´esica α, es decir, P∈Ωk, v ∈TPΩk, α(t0) = P. Consideramos el triedro {α0(t), α(t)×kα0(t), α(t)}, que es una terna formada por dos vectores del espacio tangente unitarios y perpendiculares entre s´ı y uno de la superficie. Entonces es una matriz ortogonal en hik. Adem´as, la base del espacio tangente se transporta paralelamente a lo largo de α, porque la velocidad se transporta paralelamente (por definici´on de geod´esica) y el segundo vector presenta producto escalar constante respecto al primero, es unitario y se transforma de forma continua. Entonces, escribiendo el vector ven la base del espacio tangente de ese triedro, obtenemos su transporte paralelo a lo largo de α. Esto es muy interesante desde el punto de vista computacional. 7. Distancia geod´esica El problema b´asico de existencia de geod´esicas es determinar la velocidad inicial P0 0 de una geod´esica α(t) que empieza en un punto dado P=P0y pasa por otro tambi´en dado Q=α(t) (para el valor m´ınimo de t > 0). En nuestro caso, si Qes independiente de P(es decir, Q6=P, −P), entonces Q pertenece al plano generado por Py la direcci´on inicial P0 0(desconocida). Pero sabemos que esa direcci´on inicial: (i) ser´a ortogonal a Py (ii) pertencer´a al plano generado por P,Q. En consecuencia, la manera de calcular ese vector es usar Gram-Schmidt: P0 0=Q−hP, QikP/hP, Pik kQ−hP, QikP/hP, Pikkk =Q−hP, Qi∗ kP q1−hP, Qi∗ k 2/k . Pero esta f´ormula presenta una singularidad para k= 0 (ya que dados P, Q ∈Ω0, hP, Qi∗ 0= 1), y para evitarla usamos un poco m´as la forma h,i∗ k. Primero observamos que: kQ−Pk∗ k 2=kQk∗ k 2+kPk∗ k 2−2hP, Qi∗ k= 2 −2hP, Qi∗ k, luego 1 −hP, Qi∗ k=1 2kQ−Pk∗ k 2. Volviendo a la expresi´on inicial, P0 0=√2 p1 + hP, Qi∗ k Q−hP, Qi∗ kP kQ−Pkk . 16 Vamos a examinar las dos expresiones del denominador y ver que ya no hay problemas de continuidad, usando una isometr´ıa que lleva a Pal punto (0,0,1). La imagen de Qestar´a en −1≤z≤1 cuando k > 0, y en z≥1 cuando k < 0 (ya que PyQest´an en la misma hoja del hiperboloide, en el caso de curvatura negativa), lo que implica que 1 + hP, Qi∗ k>0. Si la imagen de Qes (x, y, z), se tiene que k(x2+y2) + z2= 1. Entonces, kQ−Pkk= k(x2+y2)+(z−1)2= 1 −2z−1 = 2z > 0. Entonces, ambos denominadores son expresiones positivas y la expresi´on del logaritmo geod´esico est´a bien definida. En particular, para k= 0, obtenemos P0 0= (P−Q)/pkP−Qk, como era de esperar.  Con esto ya sabemos la direcci´on del camino m´as corto de PaQ, pero no la longitud, que ser´a la distancia geod´esica distg(P, Q) de PaQ. Pero dada α(t), geod´esica de P=P0 aQ=α(t) calculada como se describe arriba, est´a parametrizada por el arco, luego distg(P, Q) = t. Resulta pues Q=α(t) = P0Ck(t) + P0 0Sk(t), de donde hP, Qi∗ k=hP0, α(t)i∗ k=hP0, P0i∗ kCk(t) + hP0, P0 0i∗ kSk(t) = Ck(t) (aqu´ı usamos que, respecto de h,i∗ k,P0yP0 0son ortogonales y P0es unitario), con lo que distg(P, Q) = ACk(hP, Qi∗ k). Para k= 0 no necesitamos hacer tantos c´alculos: distg(P, Q) = kQ−Pk, que es la norma euclidiana en el plano af´ın Ω0:z=−1. Sin embargo s´ı queremos decir que de acuerdo con la idea general de este trabajo, se da la continuidad siguiente: dados Pk, Qk∈Ωkque convergen respectivamente a P, Q ∈Ω0para k→0, resulta que l´ım k→0distg(Pk, Qk) = kP−Qk. Esbozamos la demostraci´on de este hecho. Por la secci´on anterior, existe una cierta isometr´ıa de la superficie que lleva a Qal punto (0,0,1). Entonces, sin p´erdida de generalidad, podemos suponer que Q= (0,0,1). Calculamos el l´ımite direccional sobre la direcci´on vertical dada por la sucesi´on: Pk= (pk1, pk2, pk3),1−k(p2 k1+p2 k2)≥0, pk3=q1−k(p2 k1+p2 k2), de modo que cuando k→0, Pk→(p1, p2,1). Con estas notaciones: distg(Pk,(0,0,1)) = ACk(hPk,(0,0,1)i∗ k) = ACkq1−k(p2 k1+p2 k2). 17 As´ı pues, tomamos N=p2 k1+p2 k2y calculamos el l´ımite anterior por la Regla de LHˆopital: l´ım k→0distg(Pk,(0,0,1)) = l´ım k→0 1 √−klog √1−kN +√−kN = l´ım k→0 d dk log √1−kN +√−kN d dk √−k=··· = l´ım k→0 √−kN √−kN√1−kN =√N, como interesaba.  8. Costuras En esta secci´on, describimos un modelo de superficies no regulares pegando “parches”. Un parche es un dominio cerrado de una superficie de curvatura constante, de acuerdo con los modelos Ωkanteriores. Adem´as el borde de esos dominios debe ser una curva geod´esica a pedazos. Estos parches se unen entre s´ı por “costuras”. Una costura es una isometr´ıa entre dos segmentos de geod´esica de dos parches (posiblemente de curvatura distinta). Formalmente: Definici´ on. (1) Una curva geod´esica a pedazos de Ωkes una aplicaci´on inyectiva σ: [a, b]→Ωkdiferenciable a pedazos, digamos a=t0< t1<··· < tν=b, tal que cada restricci´on σ|[ti−1,ti]es una geod´esica parametrizada por el arco. Esa restricci´on se denomina segmento geod´esico. Los mismos nombres que σy las restricciones σ|[ti−1,ti] reciben sus im´agenes σ([a, b]), σ([ti−1, ti]) ⊂Ωk. (2) Un parche es un conjunto cerrado D⊂Ωk, adherencia de su interior, y cuya frontera ∂D =D\Int(D) es una curva geod´esica a pedazos. Un segmento geod´esico de D es un segmento geod´esico de su frontera ∂D. (3) Una costura entre dos segmentos geod´esicos (de igual longitud) σde un parche Di yτde otro Djes una isometr´ıa φ:σ→τ. Que una superficie no regular se obtiene uniendo parches mediante costuras significa lo siguiente. Definici´ on. Sea Di⊂Ωkiuna colecci´on de parches seg´un la definici´on anterior, y sea φν:σν→τνuna colecci´on de costuras entre segmentos geod´esicos de ciertos parches. La superficie Sobtenida pegando los parches Diseg´un las costuras φνes el cociente de la uni´on disjunta de los parches Y=FiDiidentificando cada punto x∈σνson su imagen φν(x)∈τνpara toda costura φν. El resultado Sde este pegado es una superficie topol´ogica, una vez se someten las costuras a ciertas restricciones del tipo que se imponen a las triangulaciones. Lo esencial es que un segmento geod´esico puede intervenir en una ´unica costura, del mismo modo que tres caras de una triangulaci´on no pueden compartir una misma arista. 18 Puesto que es el arco coseno especial, multiplicado por un n´umero real, es un n´umero real, y adem´as, l´ım k→0 1 pv2 3−1log v3+qv2 3−1 = l´ım k→0 1 p−k(v2 1+v2 2)log q1−k(v2 1+v2 2) + q−k(v2 1+v2 2). Tomando t= (v2 1+v2 2)6= 0 y aplicando la regla de l’Hˆopital: l´ım k→0 1 √kt log √1−kt +√kt= l´ım k→0 − k √−kt+1 +k √−kt 2(√−kt+1+√−kt) −k 2√−kt = l´ım k→0 √−kt √−kt+1 + 1 √−kt +1+√−kt = 1, lo que implica que en el l´ımite el factor es 1, como cabr´ıa esperar. En el c´odigo fuente, este factor de correcci´on es una serie de Taylor de grado 3 para valores peque˜nos de t, y se expresa en funci´on del arco coseno y arco coseno hiperb´olico en los casos restantes. N´otese que este m´etodo es computacionalmente muy sencillo, ya que implica aplicar al v´ertice por dos aplicaciones vectoriales, cuya matriz se actualiza como mucho en cada frame, y una correcci´on que depende de trigonometr´ıa b´asica y una ra´ız cuadrada. La dificultad de calcular la imagen de un v´ertice no es dependiente del n´umero de costuras que cruza la geod´esica hasta ´el. 3. Fragment Shader La gran mejora de poder calcular todas las isometr´ıas como aplicaciones vectoriales se refleja particularmente a la hora de descartar puntos de un parche (por estar fuera de la zona definida por la costura). El fragmento que se ve de un parche est´a limitado por tres geod´esicas: la propia costura y los bordes izquierdos y derechos. Entonces, tomamos las coordenadas del punto en el mesh (es decir, que puede no pertenecer a la superficie, estrictamente hablando, a no ser que sea un v´ertice) y verificamos que est´e del lado correcto de las tres geod´esicas. Esto se puede hacer de forma matricial, verificando que Fp ≥0, siendo p∈R3el punto y Funa matriz que llamaremos “matriz de fragment shader”. La primera fila de esta matriz representar´a la restricci´on dada por la costura, es decir, dejar invisible todo aquello que est´a del mismo lado de la costura que el jugador. Puesto que suponemos que todo el parche est´a contenido en la mitad superior de Ωk, esto se puede calcular como comprobar el signo del producto mixto (usual) entre el punto dado y los extremos de la costura. Las otras dos restricciones dependen de las costuras que se hayan cruzado hasta ese punto. Si el extremo de una costura es visible para el jugador, entonces hay que actualizar 25 la restricci´on de ese lateral. Si no, hay que transformar la restricci´on antigua por la matriz de cambio de base. En resumen, cada costura impone una regi´on factible con tres restricciones, y queremos calcular la intersecci´on de todas las regiones factibles hasta llegar a un cierto parche. Cada vez que se cruza una costura, se toma la matriz de fragment anterior, se calcula su imagen por la transformaci´on af´ın de la costura, y se interseca con la siguiente regi´on factible. La intersecci´on entre ambas se hace por un procedimiento usual en programaci´on lineal, b´asicamente la intersecci´on de semiplanos es el dual a la envolvente convexa [2,7], y vale comprobar si el producto mixto de una terna de vectores es positivo o negativo para saber si hay que descartar un punto o no. Por ´ultimo, destacar que en el primer parche se toma una matriz que deja pasar todos los puntos, para que luego las sucesivas intersecciones la vayan recortando poco a poco. 4. Proyecci´on del mesh y las texturas En el ordenador, las texturas asignadas a cada objeto y al fondo de cada parche se guardan de forma plana y euclidiana. Por eso es importante encontrar una manera de deformarlas hasta llevarlas a la superficie Ωk. Buscamos una manera de proyectar la textura de tal forma que sea fiel al original euclidiano al menos en la parte central. De todas las posibles proyecciones desde R2a Ωk, las dos que mejor cumplen este prop´osito son la proyecci´on estereogr´afica y la gn´omica. La estereogr´afica ya se ha discutido en la secci´on “c´alculos locales” y la gn´omica viene dada simplemente por la proyecci´on del plano z= 1 desde el origen, sobre la mitad superior de Ωk: g(x, y) = (x, y, 1) k(x, y, 1)k∗ k =(x, y, 1) pk(x2+y2)+1. En el caso de las superficies de curvatura negativa, ambas tienen el inconveniente de tener una “circunferencia de infinito”, lo que impone un l´ımite al tama˜no de las texturas a usar. De todas formas, es natural que se imponga un l´ımite al tama˜no de las texturas, ya que en el espacio hiperb´olico, una circunferencia de radio rcrece exponencialmente, as´ı que una textura muy grande iba a verse sujeta muy r´apido a deformaci´on. Por otra parte, la proyecci´on estereogr´afica permite cubrir toda la esfera (salvo un punto), y la gn´omica s´olo cubre un fragmento menor que media esfera (y deform´andose a medida que se acerca a su totalidad). Pero la proyecci´on gn´omica tiene una ventaja esencial frente a la estereogr´afica y frente a cualquier otra proyecci´on: no deforma las geod´esicas. Esto es importante, porque el mesh est´a formado por tri´angulos de R2, y sus lados son rectos. Al usar la proyecci´on gn´omica, estamos garantizando que los tri´angulos tienen lados geod´esicos en el modelo, y no se produce deformaci´on a causa de proyectar de la textura al mesh. 26 Figura 2. Diferencia entre un tri´angulo en la proyecci´on estereogr´afica y un tri´angulo con los mismos v´ertices en la proyecci´on gn´omica en curvatura negativa. La circunferencia representa la circunferencia de infinito del modelo de Poincar´e. Un ejemplo dr´astico de esto se ve en la Figura 2. Si us´asemos proyecci´on estereogr´afica, el tri´angulo del mesh (en negro) poco contenido tendr´ıa en com´un con el real (en azul). Con la proyecci´on gn´omica, cada tri´angulo contiene exactamente los puntos que deber´ıa contener (si bien posiblemente deformados dentro del propio tri´angulo). A cambio, la proyecci´on gn´omica deforma m´as los puntos lejanos al centro, permitiendo que “quepa menos informaci´on” en una textura. Gracias al hecho de que se pueden unir varios parches, esto no es un grave problema. 5. El movimiento Se ha presentado en la Secci´on 2.5 la f´ormula expl´ıcita de la trayectoria geod´esica. Como la posici´on de un objeto incluye una base del espacio tangente, para moverlo hace falta tambi´en transportar paralelamente su base del espacio tangente a lo largo de la geod´esica. Una implementaci´on directa de esto, usando el producto vectorial para simplificar el transporte paralelo, tal y como se describe en la Secci´on 2.6, produc´ıa errores num´ericos considerables, causando que los objetos se “sal´ıan” de la superficie. Por eso, creamos una funci´on fk:M3×3(R)→ M3×3(R) que, dada una base de posici´on con alg´un error, la ajustaba de vuelta a la superficie, es decir, fk(A)tBkfk(A) = Bk. Este m´etodo es b´asicamente el de Gram-Smicht para la ortogonalizaci´on de una base, pero aplicado con nuestro producto escalar. Adem´as, lo hacemos ajustando primero la 27 tercera columna (la posici´on), luego la primera y por ´ultimo la segunda. Esto es as´ı porque consideramos m´as importante la precisi´on en la posici´on que la del espacio tangente. Esta funci´on inspira adem´as una aproximaci´on muy simple y eficiente al movimiento: consideramos la posici´on inicial A∈ M3×3(R), en la superficie (Es decir, AtBkA=Bk). Si pretendemos moverlo a lo largo del vector v∈TA3una distancia h, suficientemente peque˜na, consideramos la nueva matriz fk(a1, a2, a3+hhv, a1ia1+hhv, a2ia2). Para h suficientemente peque˜no, esta posici´on de destino est´a sobre la misma geod´esica que la real (ambas pertenencen al mismo hiperplano y a Ωk). ¿C´omo de buena es esta aproximaci´on? Fij´emonos primero en la tercera columna, la posici´on. Como ya viene siendo habitual, podemos considerar que la posici´on inicial es (0,0,1) y la direcci´on inicial es (1,0,0), porque existe una isometr´ıa que las lleva a esos valores. Entonces, la posici´on real deber´ıa ser (Sk(h),0, Ck(h)) y la que obtenemos con la aproximaci´on es (h,0,1) k(h,0,1)k∗ k=(h,0,1) √kh2+1. N´otese que hay que imponer kh2+ 1 >0, que se cumple para hsuficientemente peque˜no. La distancia entre ambas posiciones es: distg(Sk(h),0, Ck(h)),(h, 0,1) √kh2+ 1=ACkhkSk(h) + Ck(h) √kh2+ 1 . Esta expresi´on recuerda a la del coseno especial de una suma. Considerando γ, un n´umero real tal que Ck(γ)=1/√kh2+ 1, Sk(γ) = −h/√kh2+ 1, tenemos que distg(Sk(h),0, Ck(h)),(h, 0,1) √kh2+ 1=. . . =ACk(Ck(h)Ck(γ)−kSk(h)Sk(γ)) = ACk(Ck(h+γ)). Ahora bien, γ=−ACk(1/√kh2+ 1), porque nos interesa la soluci´on con seno negativo (recordemos que Sk(γ) = −h/√kh2+ 1). Entonces: distg(Sk(h),0, Ck(h)),(h, 0,1) √kh2+ 1=h−ACk(1/√kh2+ 1). Desarrollando esa expresi´on en serie de McLaurin hasta grado 3: distg(Sk(h),0, Ck(h)),(h, 0,1) √kh2+ 1=h−h+R(h) = R(h), 28 con el resto de Lagrange R(h) = 1 6  −15ξ3k5 2 (ξ2k+ 1)7 2q−1 ξ2k+1 + 1 −10ξ3k5 2 (ξ2k+ 1)9 2−1 ξ2k+1 + 13 2 +9ξk3 2 (ξ2k+ 1)5 2q−1 ξ2k+1 + 1 −3ξ3k5 2 (ξ2k+ 1)11 2−1 ξ2k+1 + 15 2 +3ξk3 2 (ξ2k+ 1)7 2−1 ξ2k+1 + 13 2  h3, para alg´un ξ∈(0, h). Entonces la tercera columna de la aproximaci´on es de orden 3. Pero queda ver c´omo se modifica el espacio tangente. Consideramos la isometr´ıa que lleva la tercera columna de Aal vector (0,0,1) y al vector val (1,0,0). Tras esta isometr´ıa, Aser´ıa: A=  v1−v20 v2v10 0 0 1 , siendo (v1, v2) las coordenadas de ven la base del espacio tangente de A. Si la matriz final es B, con columnas (b1, b2, b3) entonces, como ya hemos visto, b3=(h,0,1) √kh2+1, y: b1=a1−ha1, b3i∗ kb3 ka1−ha1, b3i∗ kb3kk =··· =(v1,−v2(kh2+ 1),−khv1) p(1 + kh2)(v2 2kh2+ 1) . Por otra parte, calculamos el valor de b1que preserva el ´angulo con respecto a la geod´esica, sabiendo que el vector tangente a la misma en el punto b3=(h,0,1) √kh2+1 es (1,0,−kh) √kh2+1 : b∗ 1=(v1,−v2,−khv1) √1 + kh2. Podemos medir el ´angulo entre el vector real y el esperado: hb1, b∗ 1ik=v2 1+v2 2(kh2+ 1) + kh2v2 1 √1 + kh2p(1 + kh2)(v2 2kh2+ 1) =1 pv2 2kh2+ 1. Entonces, el tomando el arco coseno y aplicando otro desarrollo en serie de Taylor: arc cos(hb1, b∗ 1ik) = arc cos 1 pv2 2kh2+ 1!=h√kv2−1 3h3k3 2v3 2+O(h5). Es decir, se ha girado la aproximaci´on una cantidad de orden lineal. Pero cuando v2= 0, es el valor exacto. Este es el motivo por el cual los proyectiles y objetos de movimiento rectil´ıneo uniforme se han modelizado con velocidad en su eje x. Puesto que estamos haciendo un videojuego, esta aproximaci´on es bastante aceptable. 29 6. Distancias y colisiones Para poder implementar un motor f´ısico b´asico, tenemos que disponer de f´ormulas que nos permitan saber si la dos objetos colisionan. Nosotros implementamos esta detecci´on bas´andonos en f´ormulas para distancia. Los objetos de Azimuth tienen una hitbox que representa la zona que ´estos ocupan. La manera m´as sencilla de representarlo es considerar como hitbox una esfera de un cierto radio alrededor de la posici´on del objeto, y detectar las colisiones comprobando que la distancia sea menor que la suma de los radios. Esta idea funciona bien para el personaje, enemigos, balas o palancas, es decir, objetos que ocupan un tama˜no “peque˜no”. Adem´as, presenta la ventaja de que se generaliza muy f´acilmente a cualquier curvatura. Utilizar otro tipo de hitbox presenta problemas a la hora de mover el objeto entre distintos parches o mover el objeto a lo largo del mismo parche (no todos los puntos del objeto se mueven a lo largo del mismo vector en una isometr´ıa). Adem´as, para detectar las colisiones, el movimiento relativo de dos objetos que siguen un movimiento rectil´ıneo y uniforme no es rectil´ıneo y uniforme. El problema es que una hitbox en forma de esfera no modeliza bien el comportamiento esperado de una pared. Por eso, las paredes tienen por hitbox un segmento, y se impone sobre ellas la condici´on de que no se muevan. En resumen, necesitamos f´ormulas para calcular distancia entre dos puntos en un mismo parche (la cual se ha desarrollado en el cap´ıtulo anterior) y entre un punto y un segmento. La distancia punto-segmento es un problema tedioso incluso en el espacio euclidiano usual. Normalmente se resuelve de esta forma: Si el pie de la perpendicular del punto al segmento est´a entre los extremos del segmento, esa es la distancia m´ınima. Si no, se toma la distancia m´ınima del punto a los extremos. Esto no funciona del todo bien en nuestro caso porque en la esfera no hay un concepto de “estar entre” similar al euclidiano. De hecho la geometr´ıa esf´erica no cumple la axiomatizaci´on de Hilbert para la geometr´ıa neutral, y se sustituye el “estar entre” por unos axiomas especiales de orden. Nosotros construimos, dado el segmento AB, las rectas r,sque pasan respectivamente por AyBy son perpendiculares a AB. Estas rectas se construyen con la base que produce el producto vectorial. Seg´un a que lado de estas rectas est´en, se trata el punto de manera distinta: 1. Si Pest´a del mismo lado de rque By del mismo lado de sque A, el punto m´as cercano es el pie de la perpendicular. 2. Si Pest´a del mismo lado de rque By del otro lado de sque A, el punto m´as cercano es B 30 3. Si Pest´a del otro lado de rque By del mismo lado de sque A, el punto m´as cercano es A 4. Si Pest´a del otro lado de rque By del otro lado de sque A, el punto m´as cercano es el m´as cercano entre AyB. El cuarto caso es el que no estamos acostumbrados en geometr´ıa neutral (hiperb´olica o euclidiana), pero que puede darse en la esfera. Queda aclarar como calculamos la distancia del punto a la recta en el primer caso. Sea Qel punto m´as cercano de Pa la recta AB. Entonces PQ es perpendicular a AB (Elementos de Euclides, libro I proposici´on 18, un resultado aplicable a geometr´ıa neutral porque no utiliza el quinto postulado). Como PQ es perpendicular a AB, el vector v=A×kB kA×kBkkest´a en el mismo hiperplano que PQ. Como ves perpendicular a Q(ya que es perpendicular a AyB, y Qes una combinaci´on lineal de ambos), entonces podemos escribir Pcomo un cierto punto a distancia dde Q, en la geod´esica que empieza en Qy sigue la direcci´on v: P=Ck(d)Q+Sk(d)v. Y ya no hay ninguna necesidad de calcular expl´ıcitamente Qpara encontrar la distancia de PaQ. Vale calcular ASk(hP, vik) = d, donde ASkes el arcoseno especial. 31 Cap´ıtulo 4 Conclusiones y trabajo futuro En mi opini´on, lo m´as interesante de mi parte del trabajo ha sido tener que crear un modelo matem´atico preciso y a la vez computacionalmente eficiente. Ha sido posible gracias a las propiedades de las isometr´ıas del modelo final. Tambi´en creo que ha sido muy importante darle un planteamiento geom´etrico adecuado. Los primeros modelos matem´aticos estaban basados en la resoluci´on expl´ıcita de ecuaciones diferenciales sobre la parametrizaci´on plana de la superficie, y eran muy costosos de implementar. Una idea de esta aproximaci´on se da en el Anexo 1. Habr´ıa sido interesante poder implementar (matem´aticamente) m´as funcionalidades. Por ejemplo, la posibilidad de deformar el mapa localmente, es decir, darle al jugador la capacidad de cambiar la curvatura de un fragmento del mapa. Se hizo un desarrollo te´orico de esto basado en ecuaciones diferenciales, pero que no es f´acil de compatibilizar con el modelo que presentamos en este trabajo. Tambi´en podr´ıamos hacer una f´ısica algo m´as elaborada, en concreto dar una noci´on de gravedad, para hacer un juego 2D vertical. Esto es bastante sutil, ya que en el espacio no euclidiano no hay un campo vectorial que corte a cada geod´esica con ´angulo constante. Por tanto, dependiendo de c´omo se modelize, las plataformas podr´ıan tener “cuestas” seg´un el punto donde est´e el personaje, aunque sean rectas. Adem´as la ecuaci´on del movimiento deber´ıa adaptarse para admitir movimientos con aceleraci´on. No es mucho m´as dif´ıcil usando la aproximaci´on del movimiento sobre el espacio tangente. Las superficies en las que hemos trabajado eran siempre orientables. Los mapas no orientables presentan peculiaridades curiosas. Unity (Y OpenGL) pone las texturas s´olo a un lado del mesh (para ahorrar tri´angulos), as´ı que habr´ıa que hacer un control expl´ıcito de la orientaci´on de cada mesh. Es matem´aticamente sencillo, pero tedioso de programar. Otra funcionalidad que ser´ıa interesante de terminar es la de las costuras entre parches de distinta curvatura. El principal problema para desarrollarla ha sido que los shaders de CG no permiten pasar argumentos vectoriales, lo que limita los algoritmos eficientes que se pueden realizar. Aun as´ı, hay algunas maneras de conseguirlo, pas´andole el argumento como si fuera una textura y descodific´andola luego. El algoritmo para el shader de curvaturas distintas se da en el Anexo 3. En resumen, creo que un motor no euclidiano puede dar inter´es a un videojuego, complementado con mec´anicas adecuadas (Como en Antichamber, ver la introducci´on). Por otra parte, desde un punto de vista t´ecnico es bastante complejo, ya que no se parece en mucho a la estructura de un juego com´un, y buena parte de las funcionalidades proporcionadas por cualquier motor de juegos no sirven de mucho y han tenido que ser cuidadosamente implementadas por mis compa˜neros Alejandro Aguirre y Pablo Cabeza. 32 Anexos Anexo 1: Sobre la resoluci´on expl´ıcita de las ecuaciones de las geod´esicas Con todo lo anterior, se han resuelto las ecuaciones diferenciales de las geod´esicas. En efecto, las geod´esicas son las curvas α=P0Ck+P0 0Sk, luego (u=1 1−z0Ck−z0 0Sk(x0Ck+x0 0Sk), v=1 1−z0Ck−z0 0Sk(y0Ck+y0 0Sk), y unos c´alculos rutinarios nos permitir´ıan escribir expl´ıcitamente las condiciones iniciales (u0, v0) y (u0 0, v0 0). En esta secci´on esbozaremos una manera en que se podr´ıa tratar de resolver las ecuaciones, sin utilizar ninguna interpretaci´on geom´etrica de su significado. Las ecuaciones diferenciales a resolver, escritas de forma expl´ıcita, son: (1) (Du00 −4ku0(uu0+vv0)+2ku(u02+v2) = 0, Dv00 −4kv0(uu0+vv0)+2ku(u02+v02) = 0, donde, como se ha dicho anteriormente, D=k(u2+v2) + 1. El sistema parece indicar un cambio a coordenadas polares: (u=Rcos θ, v=Rsen θ, (u0=R0cos θ−Rθ0sen θ, v0=R0sen θ+Rθ0cos θ, (u00 =Acos θ−Bsen θ, v00 =Bsen θ+Acos θ, donde A=R00 −Rθ02, B =θ00 + 2R0θ0; adem´as, D=kR2+ 1. Sustituyendo en las ecuaciones iniciales, obtenemos ((DA −4kRR02+1 2kD2R) cos θ−(DB −4kR2R0θ0) sen θ= 0, (DA −4kRR02+1 2kD2R) sen θ+ (DB −4kR2R0θ0) cos θ= 0, sistema que hemos escrito de esta manera para apreciar mejor que pensando en los par´entesis como inc´ognitas, tiene determinante 1, luego tiene s´olo la soluci´on trivial, con lo que (2) (DA −4kRR02+1 2kD2R= 0, DB −4kR2R0θ0= 0. En la segunda ecuaci´on de este sistema sustituimos Bpor su valor y operamos para obtener: θ00 θ0=4kRR0 kR2+ 1 −2R0 R. Aqu´ı podemos integrar, y resulta log(θ0) = 2 log(kR2+ 1) −2 log R+c, 33 luego θ0=c R2(kR2+ 1)2, para cierta constante cque depender´a de las condiciones iniciales. Pasemos a R. Primero sustituimos el anterior valor de θ0en A: A=R00 −(kR2+ 1)4 R3. A continuaci´on se reemplaza Apor este valor y Bpor el suyo en la primera ecuaci´on de (2) y resulta: (1 2kR −c(kR2+ 1)2)(kR2+ 1)2−4kRR02+ (kR2+ 1)R3R00 = 0, que no merece la pena manipular m´as. De esta manera tenemos una ecuaci´on diferencial polinomial en una ´unica funci´on Rde una variable, que no tiene soluci´on elemental evidente. En todo caso se ve qu´e inconvenientes tiene abordar el sistema (1) sin ninguna idea geom´etrica. Anexo 2: Inmersi´on isom´etrica local de los modelos hiperb´olicos Los modelos Ωkque hemos descrito son superficies diferenciables sumergidas en R3, pero no son en principio superficies euclidianas [5,3]. En efecto, salvo Ω1y Ω0, la m´etrica riemanniana con que Ωkest´a equipada no es la euclidiano. En el caso k > 0 esto puede remediarse f´acilmente, pues el difeomorfismo h(x, y, z) = (x, y, √kz) transforma Ωken el elipsoide kx2+ky2+1 kz2= 1 y la m´etrica de Ωken la m´etrica euclidiano:   1 0 0 0 1 0 0 0 √k    1 0 0 0 1 0 0 0 1/k    1 0 0 0 1 0 0 0 √k  =  100 010 001  . Esto es posible porque la forma bilineal h,ikes en este caso definida positiva, pero no ocurre lo mismo para k < 0. De hecho, en ese caso Ωkno puede sumergirse como variedad euclidiano en R3. Se trata de un resultado importante de Hilbert seg´un el cual R3no contiene ninguna subvariedad euclidiano cerrada (completa) de curvatura constante negativa. As´ı pues, para los modelos hiperb´olicos Ωk,k < 0, la cuesti´on es de naturaleza local, y vamos a explicar aqu´ı por qu´e la respuesta es afirmativa: la superficie riemanniana Ωk, k < 0, es localmente isom´etrica a una superficie euclidiana S⊂R3. En primer lugar, si Ωkpuede sumergirse en R3, entonces debe tener una segunda forma fundamental, cuyos coeficientes podemos conjeturar imitando la idea de las geod´esicas: deben poder calcularse usando la forma ambiente h,ik. Ya advertimos en la secci´on 4 que los Lij del sistema (1) de aquella secci´on eran unos candidatos excelentes para coeficientes e, f, g de segunda forma. Por ello tomamos simplemente e=hϕuu, ϕik=−4 D2, f =hϕuv, ϕik= 0, g =hϕvv, ϕik=−4 D2, y buscamos una parametrizaci´on ψde una superficie euclidiana S⊂R3cuya primera forma fundamental tenga los coeficientes E=G= 4/D2, F = 0 de Ωky su segunda tenga coeficientes e=g=−4/D2, f = 0. Pero esto es precisamente lo que decide el teorema 34