Ver la versión completa : ¿Animación esqueletal en 2D?
SI ESTÁS LEYENDO ESTO, PROBABLEMENTE SEA CAUSA DE UN REFLOTE, ESTE TEMA ES MUY VIEJO, AVISADO QUEDAS
¿Alguien ha hecho animación esqueletal en 2D? ¿inverse kinematics? Os explico lo que quiero hacer a ver si me podéis ayudar..
http://img145.imageshack.us/img145/6419/2dskeletalim2.png (http://imageshack.us)
Se trata de una serie de sprites enlazados entre sí de forma que si desplazas uno éste afecta a los demás. Se pueden rotar y desplazar. Una explicación un tanto cutre, lo sé :D
Un ejemplo es la armadura que te persigue justo al comenzar el Castlevania: Harmony of dissonance de GBA:
ez4LeaEhxRY
Estoy dandole vueltas y no acabo de ver cómo implementarlo, ¿alguna ayuda o sugerencia?
< - >
A ver, estoy dandole vueltas. Creo que hace falta una jerarquía de elementos donde cada uno guarda la distancia y el ángulo en relación al elemento padre (eso son vectores, ¿no? hace muchos años que no los veo) Supongo que bastará con aplicar alguna formula para sacar las coordenadas donde se debe situar. ¿Pero que formula? Mis matematicas estan muy verdes :confused:
Ahora que lo pienso, ésto ultimo que he dicho sería la forma más simple de formar una animación esqueletal en 2D. El siguiente paso son las cinemáticas inversas (¿esa es la traduccion de inverse kinematics?) y ahí ya me pierdo del todo :s
no me hagas mucho caso, pero deberías guardar en el objeto "pieza" referancias a las ortogonales X e Y, así como las localizaciones de los "puntos de enganche". De esta forma, puedes rotar sin mucho esfuerzo el objeto, ademas, para mantener la cohesión, los puntos de enganche deberían ser expresados también como puntos relativos a la pantalla (depende de donde se inicialicen, es algo complicado...), de forma que el punto del codo del antebrazo, coincida con el del codo del brazo. :3
PD: se me olvidaba decir, que las ortogonales X e Y deberían de ser con respecto al rectángulo asignado en la superficie, y todo esto, claro, antes de dibujar la pantalla.. Esto añadiría aún mas cohesión, porque el punto de enganche "codo_i", por ejemplo, tendría que igualar las referencias absolutas de el punto de codo de las dos piezas y el punto absoluto (el de las piezas se traduce en absoluto facilmente con al centro de coordenadas del plano y la inclinación).
josepzin
01/02/2008, 22:48
Cinemática inversa está bien dicho... suerte! --> http://www.x-robotics.com/cinematica.htm
No lo había visto desde el punto de vista de los "puntos de enganche". Es decir que cada pieza tiene varios puntos donde enganchan a otras piezas, ¿a eso te refieres? Así que sólo tengo que hacer coincidir los puntos de enganche de las distintas piezas.
Tengo que hacer que el punto de enganche sea el eje de rotación. Simplemente tengo que hacer que la coordenada 0,0 de la pieza sea el punto de enganche de esa pieza y dibujarla sobre el punto de enganche de la pieza donde va enganchada.
Visto así no parece tan complicado, no hace falta fórmulas para convertir angulos y distancias en coordenadas ortogonales. *a no ser que se me olvide algún detalle*
enkonsierto
01/02/2008, 22:52
hablas de la sombra o del arma del personaje?
si es lo primero, yo creo que basta con guardar posiciones del personaje y repetirlas...
edito... ahora he entendido lo que querías decir... te refieres al primmer monstruo...
Se te olvida :( algunas piezas tienen mas de un punto. Por eso yo pondría un eje de coordenadas, y declararía el punto con respecto al eje, sin embargo, giraría la pieza correspondiente con respecto a ese punto como eje.
hablas de la sombra o del arma del personaje?
si es lo primero, yo creo que basta con guardar posiciones del personaje y repetirlas...
edito... ahora he entendido lo que querías decir... te refieres al primmer monstruo...
¿porque pones "edito" si en verdad no has editado? xDDD
Me refiero a la armadura grande que te persigue justo al principio antes de entrar al castillo...
< - >
Se te olvida :( algunas piezas tienen mas de un punto. Por eso yo pondría un eje de coordenadas, y declararía el punto con respecto al eje, sin embargo, giraría la pieza correspondiente con respecto a ese punto como eje.
Bueno, tienen varios puntos pero uno de ellos es respecto al padre y otro respecto a el/los hijo/s. Se situraría y rotaría respecto al punto de enganche del padre, y en los otros puntos se engancharían otros hijos que a su vez se situarían y rotarían en dichos puntos.
< - >
Cinemática inversa está bien dicho... suerte! --> http://www.x-robotics.com/cinematica.htm
Muy interesante, gracias. Me lo he leído y más o menos lo he entendido, pero a la hora de llevarlo a la práctica..[Ahhh]
Yo he hecho alguna cosilla así en fenix con puntos y piezas; y me parece mucho mas facil de implementar que un modulo de ik (inverse keys, cinemáticas inversas). Aunque luego es más dificil de animar.
Bueno, tienen varios puntos pero uno de ellos es respecto al padre y otro respecto a el/los hijo/s. Se situraría y rotaría respecto al punto de enganche del padre, y en los otros puntos se engancharían otros hijos que a su vez se situarían y rotarían en dichos puntos.
Creo que estamos diciendo lo mismo xD
Digamos (si te he entendido bien) que tienes en el rectángulo de la imágen un punto fijo con respecto al cual se determina la posición de los enganches, ¿no?
El problema que le veo a eso es cómo determinas que dos puntos hijo de distintas piezas tienen las mismas coordenadas con respecto a pantalla. No alcanzo a ver como hacerlo sin tener ademas un punto fijo en la pantalla (sea el que sea) y almacenar la rotación de la pieza con respecto al los ejes X e Y de la pantalla. Por no hablar de la localización absoluta (determinada cuando se "coloca" la pieza) del punto padre de cada pieza...
Dios, deben ser las horas, porque tengo la impresión de que me he hecho la picha un lío XP.
No se si te he ayudado o te he liado, pero mi intención es buena, hamigo efegea :D
Creo que estamos diciendo lo mismo xD
Digamos (si te he entendido bien) que tienes en el rectángulo de la imágen un punto fijo con respecto al cual se determina la posición de los enganches, ¿no?
El problema que le veo a eso es cómo determinas que dos puntos hijo de distintas piezas tienen las mismas coordenadas con respecto a pantalla. No alcanzo a ver como hacerlo sin tener ademas un punto fijo en la pantalla (sea el que sea) y almacenar la rotación de la pieza con respecto al los ejes X e Y de la pantalla. Por no hablar de la localización absoluta (determinada cuando se "coloca" la pieza) del punto padre de cada pieza...
Dios, deben ser las horas, porque tengo la impresión de que me he hecho la picha un lío XP.
No se si te he ayudado o te he liado, pero mi intención es buena, hamigo efegea :D
Ahora que lo dices es verdad, una vez rotada la pieza se pierden las localizaciones absolutas de cada enganche...pues en ese caso no sé :confused:
< - >
Tiene que haber una forma de convertir coordenadas relativas a absolutas. Estoy usando opengl...
Rivroner
01/02/2008, 23:49
¿Y no es mejor usar un programa tipo Moho y pasar el resultado a tu programa ?
Por eso te digo lo de la coordenada absoluta en pantalla, es matemática básica:
-Tienes dos puntos (A y B), quieres averiguar el tercero (C). El punto A es "0,0" y es un punto que está siempre fijo en pantalla (una pieza sin hijos que no rota ni hace ná, solo está en algún lugar y sirve para esto).
-Tienes la distancia del punto B al C, y el ángulo de la línea BC con respecto a la línea de X (que pasa por A).
SOLUCIÓN:
-Calculas el ángulo de BC con respecto a la recta AB.
-Proyectas la distancia (que es una medida unidimensional) sobre el vetor resultante (dacando el seno y el coseno del ángulo), obteniendo la recta BC.
-Teniendo B y BC, calculas C, y ¡listo!
Es mucho mas complicado hacerlo en código, pero esto sería una buena descripción del algoritmo.
¿Y no es mejor usar un programa tipo Moho y pasar el resultado a tu programa ?
No. Perdería todas las ventajas de un sistema de animacion esqueletal versus sprites de toda la vida, y encima, enormes (los sprites, serian enormes, lo cual lleva a elevado gasto de cpu y ram)
--
Bueno volviendo al lío: tengo el angulo de rotacion de la pieza y tengo el eje de rotación en coordenadas absolutas. Tengo un punto x,y relativo al eje de rotación. Es muy facil usando matematicas. Lastima que yo de matematicas=0 xD
El eje de rotacion lo tengo tanto en coordenadas relativas como absolutas. Cuando digo relativas me refiero a dentro del rectangulo de la pieza. Con ese dato ya puedo saber la posicion absoluta del otro punto con una simple operacion aritmetica. Eso sin rotar, ahora toca rotarlo...Me pregunto si partiendo de las coordenadas del eje y las coordenadas del otro punto puedo averiguar el vector entre ellos, porque si es así solo tengo que sumarle el angulo de rotacion, ¿no? Yo tambien me estoy haciendo la picha un lio xD
EDIT dn@ te has adelantado xD ahora toca comparar a ver si hemos dicho lo mismo xD
Bueno, de dejo rebanándote los sesos que algunos tenemos debilidad por dormir xD
< - >
Ah! releyendo tu post, el eje de rotación es B, no C, como sugieres tu. ¡Porque sino sería un cacao averiguar la rotación de piezas intermedias!
Bueno, efegea, lo mejor sera que mires la teoria de los robots industriales (si, esos brazos feos).
Yo, la verdad es que hace dos años que no toco ese tema, pero bueno, he aqui unas pequeñas ideas de lo que debes buscar:
Cinemática de posición de los manipuladores serie.
Cinemática directa: Algoritmo de Denavit-Hartenberg. Cinemática inversa: Método geométrico y método mediante la matriz de transformación homogénea.
Mas info aqui (http://www.tecnun.es/asignaturas/robots/index_spa.htm)
Date cuenta que te estoy diciendo que es lo que tienes que buscar... no la teoria en si, que la tengo en libro y paso de escanear tantas paginas... si seguro que luego esta en la red...
Rivroner
02/02/2008, 00:38
No. Perdería todas las ventajas de un sistema de animacion esqueletal versus sprites de toda la vida, y encima, enormes (los sprites, serian enormes, lo cual lleva a elevado gasto de cpu y ram)
¿Pero has usado el Moho alguna vez :D ? Yo creo que te podría servir perfectamente. ;)
¿Pero has usado el Moho alguna vez :D ? Yo creo que te podría servir perfectamente. ;)
Sip, investigando la animacion esqueletal, hoy mismo, me lo he instalado y he estado haciendo algun que otro monigote. Y no me sirve, porque tendría que exportar a imagen de mapas de bits y entonces estarimos en las mismas, usando sprites de toda la vida.
Es como preguntar como programar para que salga un modelo en 3D en tu propio programa y tu me digas, usa el 3d studio :confused:
< - >
Bueno ya casi lo he conseguido, ya funciona pero porque daba la casualidad de que cierto angulo era de 45 grados y lo he puesto a mano. Ahora tengo que encontrar la forma de que el programa halle ese dato automaticamente. La cuestion es que no se como explicar cual angulo es..
Has mirado lo que te he dicho, efegea? la teoria que debes buscar?
A lo malo malo te puedo buscar (y quiza encontrar mis apuntes de robots, con su cinematica directa e inversa...)
josepzin
02/02/2008, 11:47
Que hilo mas interesante... :)
Has mirado lo que te he dicho, efegea? la teoria que debes buscar?
A lo malo malo te puedo buscar (y quiza encontrar mis apuntes de robots, con su cinematica directa e inversa...)
No lo llegue a buscar porque estaba metido de lleno en la programación del tema ese de los "puntos de enganche" y hasta que no lo sacase no iba a parar, y luego me fui a la cama. Hoy lo miraré si eso.
Espero que no sea demasiado complicado, que le estoy temiendo :s
mmm... robots yo lo di el segundo curso de mi titulo de ingeniero tecnico superior en electronica y automatica.... pero no lo temas... si es en 2D es relativamente facil... la cosa se complica en 3d.
Por cierto, comprendes el concepto de grado de libertad? Es o un eje de giro, o un eje translacion...
Por cierto, comprendes el concepto de grado de libertad? Es o un eje de giro, o un eje translacion...
Nunca lo he escuchado, ¿lo explican en lo que tengo que buscar? Eje de giro se lo que es pero con eje translaccion ya me pierdo y sobre todo si tiene que ser una cosa o la otra.. :s
Yo en fenix lo hice de la siguiente manera:
Cada pieza era un hijo; y cada hijo se estaba reposicionando constantemente a uno de los puntos de control del padre.
El tema del ángulo lo hacía de la siguiente manera.
"angle=mi_angulo_relativo+father.angle"
Oséa, en lugar de rotar directamente la pieza, almacenaba la rotacion sobre si misma en la variable angulo_relativo; a ésta variable le sumaba el angulo de la pieza a la que iba conectada (father.angle) para finalmente rotar la pieza en cuestion con la suma de esos valores.
No es una cosa muy exacta pero es un apaño bastante sencillo.
Un eje de translacion es como si metes una SD en la GP2x... no rota, sino que se traslada linealmente: los ejes de translacion, si los tuvieses, los tendrias en objetos que se alargan/encogen linealmente...
Sin tener mucha idea.
Creas un punto origen del ñeco, y cada parte del mismo deberia de tener, como poco, la distancia relativa a ese punto y una rotacion respecto a su posicion original (si quieres que las piezs giren sobre si mismas).
En un momento dado siempre tendrias la posicion del punto original y las distancias al resto, para pintar las partes, su posicion seria punto orignal + desplazamiento de pieza = lugar donde pintar la pieza.
Para animar lo veo un poco mas complejo, porque tienes que tener en cuenta todo, es decir, es como una maya, y es un cacao xDDD, pero creo que hay por ahi algun ejemplo de ragdolls en 2d que te vendrian muy bien, ya que se basan en eso.
Saludos
El grado de libertad es elgrado máximo de rotación relativa permitido por un pto de enganche
no no no... dn@
tu y yo no hablamos del mismo concepto
Un sistema con 6 articulaciones rotativas tiene 6 grados de libertad... los grados de libertad de los que yo hablo son numeros enteros...
bulbastre
02/02/2008, 15:04
Yo en fenix lo hice de la siguiente manera:
Cada pieza era un hijo; y cada hijo se estaba reposicionando constantemente a uno de los puntos de control del padre.
El tema del ángulo lo hacía de la siguiente manera.
"angle=mi_angulo_relativo+father.angle"
Oséa, en lugar de rotar directamente la pieza, almacenaba la rotacion sobre si misma en la variable angulo_relativo; a ésta variable le sumaba el angulo de la pieza a la que iba conectada (father.angle) para finalmente rotar la pieza en cuestion con la suma de esos valores.
No es una cosa muy exacta pero es un apaño bastante sencillo.
Pues será sencillo, pero no sólo es perfectamente lógico sino que además es lo único que he entendido BIEN en este hilo.
Muy buenas! no se exactamente para que lo quieres y no se si te valdra lo que te voy a contar... yo hice hace unos años algo muy parecido pero en vez de utilizar IK use motion capture que te genera un movimiento mas real, la técnica es muy sencilla. Hazes un array con todos los vertices que quieras que tenga tu modelo... y luego colocas cada sprite tomando como referencia 2 vértices para que el sprite gire y se coloque en la posicion de los 2 vertices, y el movimiento de los vértices es lo mas fácil, yo cogi una camara de video normal y me coloque unas bolas o pegatinas de color cantoso ( también puedes usar leds ) en las articulaciones que correspondan al array de vértices que creaste, y luego solo tienes que pasar las coordenadas de la grabacion a los vertices, puedes hacer un programa que te los pase automaticamente. :) El resultado del movimiento es muy real...
Bueno no se si te valdra de algo el discurso jejejej pero bueno ahi lo dejo ;)
PD, Es mejor hacerlo con leds porque puedes reducir la luz hasta que solo se vean los leds y queda la imagen aislada solo se veran los leds moviendose. ademas podras poner leds de diferentes colores por si quieres diferencia entre vertices que se crucen o algo :)
Muy buenas! no se exactamente para que lo quieres y no se si te valdra lo que te voy a contar... yo hice hace unos años algo muy parecido pero en vez de utilizar IK use motion capture que te genera un movimiento mas real, la técnica es muy sencilla. Hazes un array con todos los vertices que quieras que tenga tu modelo... y luego colocas cada sprite tomando como referencia 2 vértices para que el sprite gire y se coloque en la posicion de los 2 vertices, y el movimiento de los vértices es lo mas fácil, yo cogi una camara de video normal y me coloque unas bolas o pegatinas de color cantoso ( también puedes usar leds ) en las articulaciones que correspondan al array de vértices que creaste, y luego solo tienes que pasar las coordenadas de la grabacion a los vertices, puedes hacer un programa que te los pase automaticamente. :) El resultado del movimiento es muy real...
Bueno no se si te valdra de algo el discurso jejejej pero bueno ahi lo dejo ;)
PD, Es mejor hacerlo con leds porque puedes reducir la luz hasta que solo se vean los leds y queda la imagen aislada solo se veran los leds moviendose. ademas podras poner leds de diferentes colores por si quieres diferencia entre vertices que se crucen o algo :)
Curioso y muy interesante, lo tendré en cuenta para un futuro porque lo que es ahora no me sirve de mucho pues no voy a usar personajes humanos/humanoides en mi juego :brindis: (no es el castlevania lo que estoy haciendo, que el video del primer post puede llevar a confusion)
< - >
Rdm53Kgn32k
Mas o menos eso he conseguido hacer de momento, es un progreso pero ya casi está listo. Necesita retoques eso sí..
Si os fijais es una flecha raiz con una flecha hija, y esa a su vez con dos hijas. Todas rotan a distinta velocidad.
No entiendo a que te refieres, jurk :/
Por otro lado, mola lo de las flechas, pero no pero no acaba de convcencerme porque los puntos de enganche se desplazan con respecto a las propias flechas :(
pero no pero no acaba de convcencerme porque los puntos de enganche se desplazan con respecto a las propias flechas :(
No te entiendo. Los puntos de enganche no se desplazan, ¿a que te refieres? :confused:
si te fijas, las flechas se alejan entre ellas. puede ser el video, asique si no ves que se muevan debe ser cosa mía xP ahora solo te falta controlar esos giros para conseguir lo que quieras conseguir (tengo la ligera sospecha de que quieres meter animación procedural a algo...)
Puede ser porque el punto de origen no es el puntito del extremo de la flecha
Por cierto, si quereis que os cuente para que es esto...No quería contarlo pero voy a necesitar ayuda asi que no me queda mas remedio.
Es para el supuesto concurso (aun no es seguro) para GP2X en el que el premio es una pandora. No tengo GP2X pero no es dificil encontrar betatesters y ya he programado antes para ella.
El juego es una combinación de plataformas y space channel 5 con un estilo gráfico muy parecido al patapon. No se como se juega al patapon los videos no aclaran nada, pero en mi juego con el stick controlas derecha izquierda agachar y salto(arriba), los botones son up down left right y el gatillo derecho es shoot. Al gatillo izquierdo se me ocurren varias ideas para darle uso. Ah, he dicho plataformas con todo lo que ello conlleva, el patapon creo que no es plataformas. Aunque no se hasta que punto habrá plataformeo.. Aun tengo que seguir perfeccionando las ideas xD
Como no soy un máquina haciendo gráficos, voy a usar graficos vectoriales (aunque exportados a bitmap claro) y el personaje será lo más sencillo posible: una especie de masa que bota. Bueno ya lo veis en el mockup.
Lo de la animación esqueletal, viene de que el patapon la usa para los enemigos grandes.
Por cierto no le echeis demesiada cuenta a este mockup pues no es el juego en sí, no va a ser exactamente igual por ejemplo olvidad los HP/MP :D Cuando lo hice aun ni tenia idea de que iba a a ser un juego musical..solo estaba esbozando ideas..
http://img505.imageshack.us/img505/876/patapon03ex0.png (http://imageshack.us)
Bueno ahora presento mi problema: resulta que yo de musica ni pajolera idea, ni siquiera sentido del ritmo. Podría hacerlo cutre y inventarme combinaciones left left up up down shot y usar musica creative commons que encuentre por la red, pero no sería lo mismo.
Bueno el problema está en que si encuentro alguien que me ayude resulta que es para un concurso y la pandora no la podemos compartir (si ganamos claro) y no se que podria darle a cambio :(
En fin esperemos que no se convierta el tipico proyecto que nunca se termina y por fin veamos algo de parte mía que mucho empezar proyectos y nunca terminar ninguno (no porque los abandone sino porque son demasiado curro y tengo mi vida y tal..por lo que se alargan se alargan y se hacen infinitos)
BUHOnero
04/02/2008, 06:29
pero ese concurso existe de verdad? han publicado las normas en algún lugar? Pandora ya se fabrica? a qué huelen las nubes?
pero ese concurso existe de verdad? han publicado las normas en algún lugar? Pandora ya se fabrica? a qué huelen las nubes?
No existe aún (el concurso), pero a craigix le ha gustado la idea. Sobre si pandora se fabrica......pues squidge ya tiene un kit de desarrollo pero asi a gran escala no se fabrica aún..
BUHOnero
04/02/2008, 15:17
No existe aún (el concurso), pero a craigix le ha gustado la idea. Sobre si pandora se fabrica......pues squidge ya tiene un kit de desarrollo pero asi a gran escala no se fabrica aún..
que era coña eh... a mi me encantaría parciticpar en un par de concursos, y si este que dices existiera pos también me molaría, pero no tenog NADA de tiempo, una lástima, espero que lo que me quita el tiempo sea precisamente para mejorar y poder subir mi nivel personal en mis proyectos, con esto me sentiría satisfecho :brindis:
Parece que no ha molado mucho mi idea de juego a la peña O_o
< - >
Estoy buscando musica creative commons, recomendarme algún género musical que pueda ir con mi juego..
Molondro
04/02/2008, 17:43
aha
http://home.att.net/~diannashipman/Dancing_skeleton.gif
demasiado obvio, no?
aha
http://home.att.net/~diannashipman/Dancing_skeleton.gif
demasiado obvio, no?
es lo que necesitaba, gracias :lol:
A mi me mola la idea... no me había parado a pensar que el patapón efectivamente hace uso y abuso de la animación eskeletal.
Pos a mi me parece cojonúo :D por cierto, el PAtapón se maneja con XOA[] en series tipo [][][]O para avanzar, o OO[]O para atacar :)
Pos a mi me parece cojonúo :D por cierto, el PAtapón se maneja con XOA[] en series tipo [][][]O para avanzar, o OO[]O para atacar :)
[][][]O -> ¡PATA!¡PATA!¡PATA!¡PON!
OO[]O -> ¡PON!¡PON!¡PATA!¡PON!
WSRnh0CtNes
Si eso lo se, me he hartado de ver videos del patapon (me encanta esa maldita musica, pata pata pata ponnnnn) pero hasta que no juegue no lo voy a acabar de entender..
Joer me da cosa ponerme a programar sin tener musico porque estaria programando para nada pero claro si no tengo el codigo avanzado no puedo pretender que nadie me ayude..¡que dilema! Y luego está el problema del premio, a no ser que encuentre alguien que colabore desinteresadamente y eso creo que va ser dificil que ocurra :S
Has hecho nunca un motor de animaciones en modelos en 3D?
Esto es exactamente lo mismo pero en 2D, tienes que animarlo a base de aplicarle matrices de transformación (rotaciones y translaciones) a cada hueso correspondiente de una maya dinámica también llamada el esqueleto, y estas transformaciones se aplican recursivamente todos los hijos que cuelgan de ese hueso.
Así pues una animación no será más que un conjunto de transformaciones a lo largo del tiempo de los huesos de una maya dinamica. A partir de ahí vas colocando los sprites respecto la posición y la orientación de los huesos.
Pensaba que siendo tan machine del 3D y de la API de OpenGL algo así lo habrías tocado, no? :D
Supongo que en 2D el mismo concepto se puede simplificar mucho más, no? Ánimos, que seguro que queda un juego guapo. :D
No BuD, no llegué a tocar la animación esqueletal en 3D. Estuve a punto de implementarla cuando iba a meter los modelos de Doom3 en mi motor pero al final no llegué a hacerlo.
Y no, no soy tan máquina del 3D y del opengl..
Había leído algo de las matrices de transformación pero como nunca las he llegado a usar pues ni idea :s y eso que he leído más de una vez sobre las matrices pero no me acabo de enterar. Tampoco es que les prestase mucha antención cuando leí sobre el tema :D
< - >
Por cierto como mi idea es hacerlo lo más sencillo posible, al final voy a usar el método de los "puntos de enganche" y currarme un sencillo editor de animaciones por keyframes. Nada de animación procedural ni cinemáticas inversas. Simplemente ir colocando posiciones fotograma a fotograma (con interpolación entre ellos para hacerlo más suave)
Si vas hacerlo asi recuerda que los vertices tienen que eestar a la misma distancia unos de otros...
Si vas hacerlo asi recuerda que los vertices tienen que eestar a la misma distancia unos de otros...
No te entiendo..¿a qué vertices te refieres?
josepzin
05/02/2008, 13:37
Supongo que se refiere a los puntos de amarre o de rotación
Si es verdad olvidad esa tonteria de pregunta, llevo demasiado tiempo durmiendo y estoy empanao..
Pero sigo sin entender a que te refieres con los puntos a la misma distancia, archer
< - >
Que rabia, en el foro ingles un usuario decidió regalar una GP2X que tenía de sobra (al principio pensé que era un kit de desarrollo, pero parece que al final era una F100) a un desarrollador de la scene que no tuviese. Como MWeston no respondía a los privados, quedabamos iprice y yo. Lo ha echado a cara o cruz, y ha ganado iprice :( Lo bien que me hubiese venido para mi juego, ya que no tengo gp2x..
¿Nadie tiene una gp2x de desarrollo de esos kits que se enviaron antes de salir a la venta la consola que ya no le sirva? Se lo compro :D (mi economía por no dar no da ni para una gp2x first edition de segunda mano)
saboteur
05/02/2008, 21:55
Pues este motor de físicas 2D tiene el código fuente. Igual se puede portar a la GP2X. >>-Chipmunk-<< (http://wiki.slembcke.net/main/published/Chipmunk)
Pues este motor de físicas 2D tiene el código fuente. Igual se puede portar a la GP2X. >>-Chipmunk-<< (http://wiki.slembcke.net/main/published/Chipmunk)
Increíble pero dudo que la GP2X tenga suficiente potencia para manejar un motor de físicas..aunque quién sabe..
saboteur
05/02/2008, 22:11
Pues el motor compila perfectamente (bueno, casi) para GP2X... ahora tendré que hacer alguna prueba, a ver qué pasa.
Había leído algo de las matrices de transformación pero como nunca las he llegado a usar pues ni idea :s y eso que he leído más de una vez sobre las matrices pero no me acabo de enterar. Tampoco es que les prestase mucha antención cuando leí sobre el tema :D
¿Y como eras capaz de usar OpenGL si no es con matrices? :confused: ¡Si son el 90% de la API!
¿Y como eras capaz de usar OpenGL si no es con matrices? :confused: ¡Si son el 90% de la API!
Pues no :confused: Se que se usan para muchas cosas pero a mi no me han hecho falta. No de momento.
¿Y como eras capaz de usar OpenGL si no es con matrices? :confused: ¡Si son el 90% de la API!
Uff, pero es que hoy en día (y antes también xD) la gente puede usar OpenGL sin saber que va con matrices:
Haces un glRotate y te hace automáticamente la matriz de rotación y te la multiplica por la matriz de proyección y no sabes ni como ni porque pero funciona. Haces el glBegin y todo se dibuja de forma muy bonita sin falta que sepas que con la matriz de proyección se está calculando donde caen todos los puntos de un polígono en el plano 2D de tu pantalla, y la gente es feliz aun así. xD
El problema que tiene la gente así es cuando tiene que hacer cosas de OpenGL que no se pueden abstraer las matrices, las animaciones por ejemplo, o un vertex shader, te tienes que comer las matrices por huevos. Y es una lastima porque cuando entiendes como va OpenGL internamente te parece todo tan bonito, lógico y fácil. xD
Uff, pero es que hoy en día (y antes también xD) la gente puede usar OpenGL sin saber que va con matrices:
Haces un glRotate y te hace automáticamente la matriz de rotación y te la multiplica por la matriz de proyección y no sabes ni como ni porque pero funciona. Haces el glBegin y todo se dibuja de forma muy bonita sin falta que sepas que con la matriz de proyección se está calculando donde caen todos los puntos de un polígono en el plano 2D de tu pantalla, y la gente es feliz aun así. xD
El problema que tiene la gente así es cuando tiene que hacer cosas de OpenGL que no se pueden abstraer las matrices, las animaciones por ejemplo, o un vertex shader, te tienes que comer las matrices por huevos. Y es una lastima porque cuando entiendes como va OpenGL internamente te parece todo tan bonito, lógico y fácil. xD
¿ves cuando te decía que no era un máquina del opengl? Solo estaba aprendiendo..
Vuelvo a la carga. Por cierto, ya entiendo las matrices. Bueno, voy entendiendolas. Porque ahora me surge el siguiente problema:
Mirad esto que me he encontrado googleando:
2d skeletal animation is the same as 3d but easier.
Each object has: a list to his childrens, a displacement from his parent ( or absolute coordinates if it dosen't have one ) and an angle.
With this angle an displacement you create a 3x3 matrix, then multiply this 3x3 with the parents one ( identity if it doesn't exist ), then you transform the vertexs with this matrix and iterate with the childrens.
Invert the matrix to found the way out, so you have a point in the screen, transform it with this inverted and now you are in object space, check for colisión with the original vertex and thats all.
Ok, tengo un angulo y un desplazamiento y lo pongo en una matrix 3x3, pero ahí me pierdo, ¿donde de la matriz lo coloco?
A ver si me explico mejor, por ejemplo una matriz de 4x4 para escalar es así:
Sx 0 0 0
0 Sy 0 0
0 0 Sz 0
0 0 0 1
Donde S es factor de escala. Y una de translacción
1 0 0 Dx
0 1 0 Dy
0 0 1 Dz
0 0 0 1
Donde D es distancia.
Bien pero ¿en la matrix de 3x3 donde tengo que poner el angulo y el desplazamiento donde coloco cada valor? Ahí es donde me pierdo :(
Así que no acabo de entender lo que hay que hacer. ¿Alguien me lo explica?
< - >
Ahm ya que estamos, he desechado la idea del plataformas musical, por varios motivos..
Ahora estoy pensando en otra cosa. ¿Recordáis mi survival horror? El Bloody Princess. Pues ando pensando en una versión 2D. Bueno exactamente 2.5D. Y que se puede cambiar de dimensión pulsando un botón (pero no como en el super paper mario que cambia de 2D a 3D, en mi juego los dos mundos serían 2D) Para entender lo que quiero hacer nada mejor que un vídeo de un juego llamado Flipside (es un mod del HalfLife2):
NaSXtrUuC7g
Pero quiero usar un formato de modelos con animación esqueletal 2D, por ejemplo la protagonista quiero que tenga aspecto de muñeca de papel. Pero el formato me lo tengo que currar yo.
Vuelvo a la carga. Por cierto, ya entiendo las matrices. Bueno, voy entendiendolas. Porque ahora me surge el siguiente problema:
Mirad esto que me he encontrado googleando:
Ok, tengo un angulo y un desplazamiento y lo pongo en una matrix 3x3, pero ahí me pierdo, ¿donde de la matriz lo coloco?
A ver si me explico mejor, por ejemplo una matriz de 4x4 para escalar es así:
Sx 0 0 0
0 Sy 0 0
0 0 Sz 0
0 0 0 1
Donde S es factor de escala. Y una de translacción
1 0 0 Dx
0 1 0 Dy
0 0 1 Dz
0 0 0 1
Donde D es distancia.
Bien pero ¿en la matrix de 3x3 donde tengo que poner el angulo y el desplazamiento donde coloco cada valor? Ahí es donde me pierdo :(
Así que no acabo de entender lo que hay que hacer. ¿Alguien me lo explica?
< - >
Ahm ya que estamos, he desechado la idea del plataformas musical, por varios motivos..
Ahora estoy pensando en otra cosa. ¿Recordáis mi survival horror? El Bloody Princess. Pues ando pensando en una versión 2D. Bueno exactamente 2.5D. Y que se puede cambiar de dimensión pulsando un botón (pero no como en el super paper mario que cambia de 2D a 3D, en mi juego los dos mundos serían 2D) Para entender lo que quiero hacer nada mejor que un vídeo de un juego llamado Flipside (es un mod del HalfLife2):
Pero quiero usar un formato de modelos con animación esqueletal 2D, por ejemplo la protagonista quiero que tenga aspecto de muñeca de papel. Pero el formato me lo tengo que currar yo.
Teniendo en cuenta que no me he leido toda la conversación y no se exactamente lo que buscas, que hace tiempo que no toco esto y que estoy medio dormido, te voy a contestar.
Las matrices que has puesto son para 3D. Tu quieres solo 2D, asi que serian:
Sx 0 0
0 Sy 0
0 0 1
1 0 Dx
0 1 Dy
0 0 1
Y te faltaria la de rotación, que no recuerdo como es.
Seguramente hayan apuntes explicandote estas cosas para 2D, ya que antes de explicarte las 3D suelen empezar con estas, que son mas pequeñas.
No te la has leído, ya se nota :D
No es eso lo que pido neng
A mi en primero de carrera en una asignatura me machacaron el tema de matrices, estás haciendo carrera? Tengo unos apuntes de un profesor de mi facultad muy buenos que hablan de esa asignatura... el problema es que están catalán. :(
By the way, Internet is your friend, tralará. :D
http://mathworld.wolfram.com/RotationMatrix.html
Joño, no había visto tu post BuD, muchas gracias me vendrá mu bien el enlace (respecto a lo otro, no, no entiendo catalán, y tampoco estoy haciendo carrera)
Al final no le presté más atención al tema porque intentando diseñar los niveles del juego me rayaba un montón..falta de inspiración.. Pero lo estoy intentando otra vez a ver si de una vez sacamos algo :D
Reflote muy bestia de 430 días [baneo]
He retomado el tema por el tema del concurso de Wiz. Pero llevo todo el día dándome tortas con las matrices sin llegar a ningun lado. Es el problema de intentar mezclar matrices de Blender con matrices de la librería Qt, que nada funciona xD
Resulta que estoy intentando usar Blender como el editor de esqueletos y animaciones. Ya tengo definido un formato y he hecho un exportador. He creado un esqueleto en blender, lo he exportado y ahora lo intento importar a un programita que he hecho en Qt pero aunque lo carga bien, no consigo que se muestre bien el esqueleto.
Creo que el problema es de Blender, que en la matriz que exporta no incluye la translacción, sólo la rotación, pero no estoy seguro, o tal vez sea que no he encontrado la forma de convertir del formato de matrices de Blender al formato de las Qt, o vete tu a saber cual es el problema...
Al final tendré que pasar de Blender y crear mi propio editor de animaciones en Qt, como tenía planeado desde el principio, pero con Blender me ahorraría curro, en fin...
(en realidad sí he conseguido mostrar el esqueleto, pero sin rotaciones..es decir que cada hueso sale en su sitio pero todos con la misma rotación...vaya, que no me vale así)
< - >
Weeeeeeeeee lo conseguí, he importado un esqueleto de blender a Qt usando mi propio formato :D
Ahora sólo me falta asignar una imagen a cada hueso (fácil) y las animaciones :)
josepzin
26/05/2009, 15:56
A ver cuando publicas algo para ver :P
Pues mira, estoy investigando el tema de la captura de movimiento. Creo que Archer comentó que había hecho algo así, unas páginas más atrás en el hilo.
Con una cámara de vídeo, y colocando varios leds (infrarrojos o no, ya veré) en las articulaciones de una persona, grabo sus movimientos y luego en el pc, voy leyendo frame a frame buscando los puntos de luz (los leds), en base a ver si cada píxel pasa de cierta intensidad (comprobando el valor de luminancia) Luego esas posiciones las guardo en un formato de texto sencillo y las leo en el juego (o en un editor para retocarlas si es necesario, por ejemplo por problemas de oclusión en las que una parte del cuerpo impide que algún led se vea)
ZeNiTRaM
26/05/2009, 17:13
Pues mira, estoy investigando el tema de la captura de movimiento. Creo que Archer comentó que había hecho algo así, unas páginas más atrás en el hilo.
Con una cámara de vídeo, y colocando varios leds (infrarrojos o no, ya veré) en las articulaciones de una persona, grabo sus movimientos y luego en el pc, voy leyendo frame a frame buscando los puntos de luz (los leds), en base a ver si cada píxel pasa de cierta intensidad (comprobando el valor de luminancia) Luego esas posiciones las guardo en un formato de texto sencillo y las leo en el juego (o en un editor para retocarlas si es necesario, por ejemplo por problemas de oclusión en las que una parte del cuerpo impide que algún led se vea)
Creo que podrías hacer algo similar con LEDs infrarrojos, Bluetooth y el sensor de infrarrojos del Wiimote (no confundir con la barra de sensores), ya que te da la posicion X e Y de los puntos infrarrojos (y procesado que te ahorras). Lo que no se es cuantos puntos es capaz de leer a la vez, o la resolución que tiene.
PROTIP: Para los infrarrojos, compra en TratoExtremo minilinternitas LED (las venden en packs de 10), y LEDs infrarrojos, y abriendolas con un destornilador puedes convertir las linternitas en infrarrojas (yo lo hice para usar el Wiimando como ratón en el PC).
Creo que podrías hacer algo similar con LEDs infrarrojos, Bluetooth y el sensor de infrarrojos del Wiimote (no confundir con la barra de sensores), ya que te da la posicion X e Y de los puntos infrarrojos (y procesado que te ahorras). Lo que no se es cuantos puntos es capaz de leer a la vez, o la resolución que tiene.
PROTIP: Para los infrarrojos, compra en TratoExtremo minilinternitas LED (las venden en packs de 10), y LEDs infrarrojos, y abriendolas con un destornilador puedes convertir las linternitas en infrarrojas (yo lo hice para usar el Wiimando como ratón en el PC).
Según la página de Johny Chung Lee, el que hacía cosas tan chulas con el wiimote, el wiimote tiene una cámara de infrarrojos de 1024x768 y es capaz de leer 4 puntos simultáneamente. Muy pocos, no me sirve :(
Respecto a lo de tratoextremo, muchísimas gracias, me va a venir de perlas :)
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.