Autor Tema: CHIPMUNK en bennu  (Leído 269229 veces)

Prg

  • Hero Member
  • *****
  • Mensajes: 1569
  • Karma: 140
    • Mi pagina
CHIPMUNK en bennu
« en: Enero 12, 2011, 04:27:44 pm »
Chipmunk Bennu (mod_chipmunk)

aquí un video con lo que se puede lograr

http://www.youtube.com/watch?v=z_Sx9N39KHk&feature=player_embedded

abajo un ejemplo que he hecho en bennu (la librería y las pocas funciones que ya he puesto, corriendo en bennu).

Ahora las malas noticias:

¿alguien quiere ayudarme a pasar las funciones a bennu?

¿alguien sabe usar la librería, que tenga algunos ejemplos por ahí?


algunas dudas:

veo que existe un tipo de TYPE_STRUCT para el retorno de funciones en bennu, esto no funciona, o si?

las otras ya se me olvidaron XD... luego las pongo..

la licencia de esta librería parece adecuada para bennu,

Citar
Copyright (c) 2007 Scott Lembcke and Howling Moon Software

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Ejemplos y última versión:

última versión (1.61), adapta la versión 6.1.3 de Chipmunk
http://www.mediafire.com/?5uadq5zljhurzqv

saludos
« última modificación: Enero 31, 2013, 10:42:48 pm por Prg »
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Noivern

  • Sr. Member
  • ****
  • Mensajes: 402
  • Karma: 10
  • Doc! Doc! Una fotito antes de volver al futuro :D
Re: CHIPMUNK en bennu
« Respuesta #1 en: Enero 12, 2011, 04:52:17 pm »
Esto sería genial para aprovechar el g-sensor de la caanoo :baba: ^¬^

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12565
  • Karma: 370
Re: CHIPMUNK en bennu
« Respuesta #2 en: Enero 12, 2011, 06:08:03 pm »
fantastico prg...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

  • Hero Member
  • *****
  • Mensajes: 1569
  • Karma: 140
    • Mi pagina
Re: CHIPMUNK en bennu
« Respuesta #3 en: Enero 12, 2011, 08:10:06 pm »
fantastico prg...

oye, y sobre las dudas?
Citar
algunas dudas:

veo que existe un tipo dato de retorno llamdo  TYPE_STRUCT para el retorno de funciones en bennu, esto no funciona, o si?
chipmunk usa callbacks ¿esto se podría poner al alcance del código bennu?, ¿existe alguna forma?

seguramente tu puedes darme una buena orientación en eso
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12565
  • Karma: 370
Re: CHIPMUNK en bennu
« Respuesta #4 en: Enero 12, 2011, 08:18:59 pm »
como retorno no, pero podes pasar un puntero a la estructura que tenes desde la funcion invocadora y llenarlo desde la funcion llamada.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

  • Hero Member
  • *****
  • Mensajes: 1569
  • Karma: 140
    • Mi pagina
Re: CHIPMUNK en bennu
« Respuesta #5 en: Enero 12, 2011, 08:22:43 pm »
como retorno no, pero podes pasar un puntero a la estructura que tenes desde la funcion invocadora y llenarlo desde la funcion llamada.

ok, gracias. Me imaginé  :-[

bueno, seguiré con la librerías

saludos
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12565
  • Karma: 370
Re: CHIPMUNK en bennu
« Respuesta #6 en: Enero 12, 2011, 08:38:19 pm »
prg, el ejemplo esta fantastico, estaria bueno intergrarlo mas nativamente, y que no necesites tener que poner

x = vect.x

y cosas asi.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

  • Hero Member
  • *****
  • Mensajes: 1569
  • Karma: 140
    • Mi pagina
Re: CHIPMUNK en bennu
« Respuesta #7 en: Enero 12, 2011, 08:47:13 pm »
prg, el ejemplo esta fantastico, estaria bueno intergrarlo mas nativamente, y que no necesites tener que poner

x = vect.x

y cosas asi.

si, sin lugar a dudas, pero no conozco cómo hacerlo.

hay alguna fuente con información al respecto?

seguiré pasando las funciones a bennu, nunca sobran las funciones nativas (intento mantener el api original lo más posible, exceptuando lo que no se puede por compatibilidad con bennu), si además se logra integrarlo más nativamente, sería genial

además chipmunk corre en psp y iphone, lo que quiere decir que se podría usar en las consolas en las que bennu está presente... teóricamente se podría...
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12565
  • Karma: 370
Re: CHIPMUNK en bennu
« Respuesta #8 en: Enero 12, 2011, 08:56:12 pm »
desconozco el api chipmunk, como para recomendarte adecuadamente... la idea seria un callback que modifique directo las variables del proceso.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

  • Hero Member
  • *****
  • Mensajes: 1569
  • Karma: 140
    • Mi pagina
Re: CHIPMUNK en bennu
« Respuesta #9 en: Enero 13, 2011, 01:32:26 am »
ok, como lo que estaba haciendo windgate para bennu 3d?

bueno, puedo experimentar...

saludos :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

josebita

  • Administrator
  • *****
  • Mensajes: 4039
  • Karma: 257
    • BennuGD Mobile Worklog
Re: CHIPMUNK en bennu
« Respuesta #10 en: Enero 13, 2011, 01:57:39 am »
Felicidades y ánimo. La licencia parece una BSD normalilla, así que yo diría que sí es compatible con la GPL de bennu.

Prg

  • Hero Member
  • *****
  • Mensajes: 1569
  • Karma: 140
    • Mi pagina
Re: CHIPMUNK en bennu
« Respuesta #11 en: Enero 13, 2011, 11:13:14 pm »
bueno, hasta el día de hoy ya tenemos todas estas funciones en bennu

    //Inicialización
    {"CPINITCHIPMUNK" , "",   TYPE_INT, modcpInitChipmunk},

    //Funciones matemáticas
    {"CPFLERP" , "FFF",   TYPE_FLOAT, modcpflerp},
    {"CPFCLAMP" , "FFF",   TYPE_FLOAT, modcpfclamp},
    {"CPFLERPCONST" , "FFF",   TYPE_FLOAT, modcpflerpconst},
    //{"CPV" , "FF",TYPE_, modcpv},

    //OPERACIONES CON VECTORES
    {"CPVEQL" , "PP",   TYPE_INT, modcpveql},
    {"CPVADD" , "PPP",   TYPE_INT, modcpvadd},
    {"CPVSUB" , "PPP",   TYPE_INT, modcpvsub},
    {"CPVNEG" , "PP",   TYPE_INT, modcpvneg},
    {"CPVMULT" , "PFP",   TYPE_INT, modcpvmult},
    {"CPVPERP" , "PP",   TYPE_INT, modcpvperp},
    {"CPVRPERP" , "PP",   TYPE_INT, modcpvrperp},
    {"CPVNORMALIZE" , "PP",   TYPE_INT, modcpvnormalize},
    {"CPVNORMALIZE_SAFE" , "PP",   TYPE_INT, modcpvnormalize_safe},
    {"CPVPROJECT" , "PPP",   TYPE_INT, modcpvproject},
    {"CPVROTATE" , "PPP",   TYPE_INT, modcpvrotate},
    {"CPVUNROTATE" , "PPP",   TYPE_INT, modcpvunrotate},
    {"CPVFORANGLE" , "FP",   TYPE_INT, modcpvforangle},
    {"CPVCLAMP" , "PFP",   TYPE_INT, modcpvclamp},
    {"CPVNORMALIZE" , "P",   TYPE_INT, modcpvnormalize},
    {"CPVLERP" , "PPFP",   TYPE_INT, modcpvlerp},
    {"CPVLERPCONST" , "PPFP",   TYPE_INT, modcpvlerpconst},
    {"CPVSLERP" , "PPFP",   TYPE_INT, modcpvslerp},
    {"CPVSLERPCONST" , "PPFP",   TYPE_INT, modcpvslerpconst},
    {"CPVNEAR" , "PPF",   TYPE_INT, modcpvnear},

    {"CPVDOT" , "PP",   TYPE_FLOAT, modcpvdot},
    {"CPVCROSS" , "PP",   TYPE_FLOAT, modcpvcross},
    {"CPVLENGTH" , "P",   TYPE_FLOAT, modcpvlength},
    {"CPVLENGTHSQ" , "P",   TYPE_FLOAT, modcpvlengthsq},
    {"CPVTOANGLE" , "P",   TYPE_FLOAT, modcpvtoangle},
    {"CPVDISTSQ" , "PP",   TYPE_FLOAT, modcpvdistsq},
    {"CPVDIST" , "PP",   TYPE_FLOAT, modcpvdist},

    {"CPVSTR" , "P",   TYPE_STRING, modcpvstr},


    //cpBB
    {"CPBBWRAPVECT" , "PPP",   TYPE_INT, modcpBBWrapVect},
    {"CPBBCLAMPVECT" , "PPP",   TYPE_INT, modcpBBClampVect},
    {"CPBBEXPAND" , "PPP",   TYPE_INT, modcpBBexpand},
    {"CPBBCONTAINSVECT" , "PP",   TYPE_INT, modcpBBcontainsVect},
    {"CPBBMERGE" , "PPP",   TYPE_INT, modcpBBmerge},
    {"CPBBCONTAINSBB" , "PP",   TYPE_INT, modcpBBcontainsBB},
    {"CPBBINTERSECTS" , "PP",   TYPE_INT, modcpBBintersects},
    {"CPBBNEW" , "FFFFP",   TYPE_INT, modcpBBNew},



    //cpBody
    {"DEFCPBODYP" , "IIP",   TYPE_INT, modDefcpBody},
    {"DEFCPBODYF" , "IIF",   TYPE_INT, modDefcpBody},
    {"DEFCPBODYI" , "III",   TYPE_INT, modDefcpBody},
    {"CPBODYNEW" , "PF",   TYPE_INT, modcpBodyNew},
    {"CPBODYNEW" , "P",   TYPE_INT, modcpBodyNewInfinity},
    {"CPBODYNEW" , "",   TYPE_INT, modcpBodyNewInfinityInf},
    {"GETBODY" , "P",   TYPE_INT, modgetBody},
    {"CPBODYLOCAL2WORLD" , "PPP",   TYPE_INT, modcpBodyLocal2World},
    {"MODGETECPBODY" , "II",   TYPE_FLOAT, modGetEcpBody},
    {"MODGETECPBODY" , "IIP",   TYPE_INT, modGetEcpBody},
    {"CPBODYALLOC" , "",   TYPE_INT, modcpBodyAlloc},
    {"CPBODYINIT" , "IFF",   TYPE_INT, modcpBodyInit},
    {"CPBODYDESTROY" , "I",   TYPE_INT, modcpBodyDestroy},
    {"CPBODYFREE" , "I",   TYPE_INT, modcpBodyFree},
    {"CPBODYINITSTATIC" , "I",   TYPE_INT, modcpBodyInitStatic},
    {"CPBODYNEWSTATIC" , "",   TYPE_INT, modcpBodyNewStatic},
    {"CPMOMENTFORCIRCLE" , "FFFP",   TYPE_FLOAT, modcpMomentForCircle},
    {"CPMOMENTFORSEGMENT" , "FPP",   TYPE_FLOAT, modcpMomentForSegment},
    {"CPMOMENTFORPOLY" , "FIPP",   TYPE_FLOAT, modcpMomentForPoly},
    {"CPMOMENTFORBOX" , "FFF",   TYPE_FLOAT, modcpMomentForBox},
    {"CPAREAFORCIRCLE" , "FF",   TYPE_FLOAT, modcpAreaForCircle},
    {"CPAREAFORSEGMENT" , "PPF",   TYPE_FLOAT, modcpAreaForSegment},
    {"CPAREAFORPOLY" , "IP",   TYPE_FLOAT, modcpAreaForPoly},
    {"CPBODYSETMASS" , "IF",   TYPE_INT, modcpBodySetMass},
    {"CPBODYSETMOMENT" , "IF",   TYPE_INT, modcpBodySetMoment},
    {"CPBODYSETANGLE" , "IF",   TYPE_INT, modcpBodySetAngle},
    {"CPBODYUPDATEPOSITION" , "IF",   TYPE_INT, modcpBodyUpdatePosition},
    {"CPBODYRESETFORCES" , "I",   TYPE_INT, modcpBodyResetForces},
    {"CPBODYISSLEEPING" , "I",   TYPE_INT, modcpBodyIsSleeping},
    {"CPBODYSLEEP" , "I",   TYPE_INT, modcpBodySleep},
    {"CPBODYACTIVATE" , "I",   TYPE_INT, modcpBodyActivate},
    {"CPBODYISSTATIC" , "I",   TYPE_INT, modcpBodyIsStatic},
    {"CPBODYISROGUE" , "I",   TYPE_INT, modcpBodyIsRogue},
    {"CPBODYSLEEPWITHGROUP" , "II",   TYPE_INT, modcpBodySleepWithGroup},
    {"CPBODYAPPLYFORCE" , "IPP",   TYPE_INT, modcpBodyApplyForce},
    {"CPBODYAPPLYIMPULSE" , "IPP",   TYPE_INT, modcpBodyApplyImpulse},
    {"CPBODYWORLD2LOCAL" , "IPP",   TYPE_INT, modcpBodyWorld2Local},
    {"CPBODYSLEW" , "IPF",   TYPE_INT, modcpBodySlew},
    {"CPBODYUPDATEVELOCITY" , "IPFF",   TYPE_INT, modcpBodyUpdateVelocity},


    //cpShape
    {"CPSEGMENTSHAPENEW" , "PPPF",   TYPE_INT, modcpSegmentShapeNew},
    {"DEFCPSHAPEI" , "III",   TYPE_INT, modDefcpShape},
    {"DEFCPSHAPEF" , "IIF",   TYPE_INT, modDefcpShape},
    {"DEFCPSHAPEP" , "IIP",   TYPE_INT, modDefcpShape},
    {"CPPOLYSHAPEGETVERT" , "PIP",   TYPE_INT, modcpPolyShapeGetVert},
    {"CPPOLYSHAPENEW" , "IIPP", TYPE_INT, modcpPolyShapeNew},
    {"CPCIRCLESHAPENEW" , "IFP", TYPE_INT, modcpCircleShapeNew},
    {"CPSEGMENTSHAPEINIT" , "IIPPF",   TYPE_INT, cpSegmentShapeInit},
    {"CPCIRCLESHAPEINIT" , "IIFP",   TYPE_INT, modcpCircleShapeInit},
    {"CPPOLYSHAPEINIT" , "IIIPP",   TYPE_INT, modcpPolyShapeInit},
    {"CPRECENTERPOLY" , "IP",   TYPE_INT, modcpRecenterPoly},
    {"CPCENTROIDFORPOLY" , "IPP",   TYPE_INT, modcpCentroidForPoly},
    {"CPSEGMENTSHAPEGETRADIUS" , "I",   TYPE_FLOAT, modcpSegmentShapeGetRadius},
    {"CPCIRCLESHAPEGETRADIUS" , "I",   TYPE_FLOAT, modcpCircleShapeGetRadius},
    {"CPSEGMENTSHAPEGETNORMAL" , "IP",   TYPE_INT, modcpSegmentShapeGetNormal},
    {"CPCIRCLESHAPEGETOFFSET" , "IP",   TYPE_INT, modcpCircleShapeGetOffset},
    {"CPSEGMENTSHAPEGETA" , "IP",   TYPE_INT, modcpSegmentShapeGetA},
    {"CPPOLYSHAPEALLOC" , "",   TYPE_INT, modcpPolyShapeAlloc},
    {"CPSEGMENTSHAPEALLOC" , "",   TYPE_INT, modcpSegmentShapeAlloc},
    {"CPCIRCLESHAPEALLOC" , "",   TYPE_INT, modcpCircleShapeAlloc},
    {"CPPOLYSHAPEGETNUMVERTS" , "I",   TYPE_INT, modcpPolyShapeGetNumVerts},
    {"CPSHAPECACHEBB" , "I",   TYPE_INT, modcpShapeCacheBB},
    {"CPRESETSHAPEIDCOUNTER" , "",   TYPE_INT, modcpResetShapeIdCounter},
    {"MODCPSHAPEFREE" , "I",   TYPE_INT, modcpShapeFree},
    {"CPSHAPEDESTROY" , "I",   TYPE_INT, modcpShapeDestroy},

    //cpSpace
    {"CPSPACEALLOC" , "",   TYPE_INT, modcpSpaceAlloc},
    {"CPSPACEINIT" , "P",   TYPE_INT, modcpSpaceInit},
    {"CPSPACEFREECHILDREN" , "P",   TYPE_INT, modcpSpaceFreeChildren},
    {"CPSPACEDESTROY" , "P",   TYPE_INT, modcpSpaceDestroy},
    {"CPSPACENEW" , "",   TYPE_INT, modcpSpaceNew},
    {"CPSPACEFREE" , "P",   TYPE_INT, modcpSpaceFree},
    {"DEFSPACEF" , "PIF",   TYPE_INT, modDefSpace},
    {"DEFSPACEI" , "PII",   TYPE_INT, modDefSpace},
    {"DEFSPACEP" , "PIP",   TYPE_INT, modDefSpace},
    {"CPSPACEADDSHAPE" , "II",   TYPE_INT, modcpSpaceAddShape},
    {"CPSPACEADDSTATICSHAPE" , "II",   TYPE_INT, modcpSpaceAddStaticShape},
    {"CPSPACEADDBODY" , "PP",   TYPE_INT, modcpSpaceAddBody},
    {"CPSPACESTEP" , "PF",   TYPE_INT, modcpSpaceStep},
    {"CPSPACEREHASHSTATIC" , "I",   TYPE_INT, modcpSpaceRehashStatic},
    {"CPSPACEREHASHSHAPE" , "II",   TYPE_INT, modcpSpaceRehashShape},

que funcionen adecuadamente es otra cosa XD

he modificado el ejemplo y le he agregado giro a la barra, y movimiento a la pelota, por si alguien quiere probar

el ejemplo se encuentre en la descarga del primer mensaje.

si todo va bien, quizá en una semana más tengamos toda la api en bennu... ojala!!  (queda como la mitad).

lo de la mayor integración con bennu lo vemos luego, cuando conozca un poco más la librería para ver cómo hacerlo. saludos
« última modificación: Enero 13, 2011, 11:15:49 pm por Prg »
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12565
  • Karma: 370
Re: CHIPMUNK en bennu
« Respuesta #12 en: Enero 14, 2011, 12:23:28 am »
muchas gracias!

Tremendo karma has ganado!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12565
  • Karma: 370
Re: CHIPMUNK en bennu
« Respuesta #13 en: Enero 14, 2011, 01:59:51 am »
lo probe, hay algo que no me gusta...

cuando la pelota esta sobre la barra, si vas girando la barra, llega un momento que la pelota atraviesa la barra, es como que no se actualiza muy rapido el tema.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

  • Hero Member
  • *****
  • Mensajes: 1569
  • Karma: 140
    • Mi pagina
Re: CHIPMUNK en bennu
« Respuesta #14 en: Enero 14, 2011, 04:07:24 am »
también lo ví.

según lo que he leído hay varios detallitos:

-los objetos se deben mover (preferentemente) aplicándoles fuerzas, de lo contrario pueden pasar cosas como las que observamos
-para mejorar la respuesta del motor hay que aumentar el número de iteraciones (la librería itera para encontrar la posición de los objetos), y también está una función que permite variar cómo la librería va


el api dice lo siguiente sobre moverlos (supongo que también se aplica al rotarlos)

    * Use forces to modify the rigid bodies if possible. This will be the most stable.
    * Modifying a body’s velocity shouldn’t necessarily be avoided, but applying large changes every frame can cause strange results in the simulation. Experiment freely, but be warned.
    * Don’t modify a body’s position every step unless you really know what you are doing. Otherwise you’re likely to get the position/velocity badly out of sync.

y sobre la calidad de la simulación también está esto:

The number of iterations, and the size of the time step determine the quality of the simulation. More iterations, or smaller time steps increase the quality. Keep in mind that higher quality also means higher CPU usage.

también estoy rotando un objeto que se difinió como estático, no se si eso también afecte...

No conozco la librería mucho (de hecho poco), habrá que investigarse el tema mejor.
« última modificación: Enero 14, 2011, 04:09:13 am por Prg »
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)