Main Menu

mov_vse

Started by DCelso, March 11, 2010, 12:15:39 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

ahora que lo pienso, a lo mejor expand es lo que yo digo, osea quedaría el sonic como un cartón gordo en el que se recorta la figura de sonic? Osea imagínate una tabla gorda de aglomerado, en ella dibujaas el sonic, lo recortas con una serreta y te queda un sonic que por delante y por detrás tienen forma de sonic pero que si lo canteas se ve solo el ancho de la tabla.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

La expand sólo estira las 4 puntas de un gráfico, que a diferencia de hacer un size_y o size_x, te permite por ejemplo estirar sólo la parte de arriba o de abajo del cuadrado (o imagen con transparencias, la cabeza de Sonic por ejemplo).

Windgate

Oh, con expand se pueden hacer efectos como el de la tabla que dice DCelso, no lo había pensado... Si el modo 7 funcionase al 100% se podría combinar la idea xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

Quote from: Windgate on March 15, 2010, 10:32:07 PM
Oh, con expand se pueden hacer efectos como el de la tabla que dice DCelso, no lo había pensado... Si el modo 7 funcionase al 100% se podría combinar la idea xD
Wind, Free dice que no.

Por otro lado, Drumpi, necesito que compares la antigua versión que colgué con esta nueva versión que dejo ahora con el .prg adjunto en esta versión.

He eliminado un error que daba al dejar pulsado "A" hasta llegar a la distancia de mas o menos 505, a mi ese error me lo soltaba windows vista y quiero comprobar si te lo suelta windows xp también. Pues eso prueba a dejar "a" pulsado con la antigua mod_vse que puse y a ver si da el error, y también prueba a hacer lo mismo con esta nueva versión que ya no lo tiene a ver si ya no te da.

También me pasaba dejando "Q" pulsado a una distancia de -55 mas o menos. Ahora con esta versión no casca.

Verás que ahora el módulo esta dividido en dos *dll, una es la vse propiamente dicha y otra es el wrapper de ésta para que sirva en bennu.

Aparte tambien necesitaría saber como llegar al ángulo 180000 sin perder de vista al sonic, o al ángulo 0. Solo consigo llegar al 90000 y ya veo lo que pasa, pero ahora no se me ocurre como solucionarlo, porque el truco que hice parece ser que no vale, yo pensé que si se dividía por cero es porque era infinito entonces en vez de poner infinito que no se puede ponía el valor más grande de un int. Pero pareceser que esto no es lo que verdaderamente hay que hacer :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

¿Entonces expand no es compatible con size, size_x, size_y, flags?

Si es compatible "creo" que sí debería ser posible conseguir el efecto que comentaba, aunque vamos, hablo desde la ignorancia, no he probado las funciones del módulo.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

FreeYourMind

Yo no he dicho eso, yo he dicho la diferencia de un metodo en relación al otro.

El Expand te permite cojer una punta del cuadrado (vertice) y moverlo, y la region del cuadrado se verá afectada (sólo tienes que mirar el ejemplo).

Hacer un size_y por ejemplo, es como si con el expand (que tambien sirve para poder hacer lo mismo), pillarás las dos puntas de arriba (o abajo) del cuadrado y las estiraras al mismo tiempo.

Resumiendo, con size_y estiras o encojes 2 vertices de un gráfico al mismo tiempo en el mismo eje, y con expand puedes hacer eso y mucho más, pillar por ejemplo sólo un vertice lo que te permite poder deformar la imagen de más formas.

Tampoco he hablado del ejemplo que dice DCElso que no lo he entendido muy bien...

FreeYourMind

Luego cuando llegue a casa, os pongo una demo privada que le he enviado a Splinter, que enseña las maravillas que se pueden hacer con un sencillo size_y.

Drumpi

Bueno, voy a ver... pero si no tengo hecha la prueba a 16 bits es que en su día yo tampoco pude, me daba error sin saber por qué.

Lo del personaje a partir de alturas, no tiene mucho sentido: ten en cuenta que VSE son lineas que suben desde el suelo por lo que el personaje sería una especie de prisma o pirámide, o cualquier poliedro cuya base sea siempre mayor que cualquier sección superior.
Puedo usar un sprite, como ahora, o la expand, para crear una imagen de perfil, otra de frente y luego ponerlas en cruz, o bien usar muchas imágenes a modo de polígonos, pero tardaría un mes sólo para eso, y el rendimiento... ^^U

La expand permite hacer lujosos efectos 3D, aunque en realidad la imagen sea 2D, por ejemplo, poner las esquinas de la derecha en las esquinas de la ventana, y las otras dos hacia el punto de fuga, y así da sensación de ser una pared a nuestra diestra. Fue una idea que le sugerí a Tristan para poder poner algún tipo de textura al mundo 3D de ETD y VSE (y así poder hacer un Starfox).

Respecto a probar lo que me has puesto, sí, lo he probado y ahora si me ha saltado error. La otra vez me dijiste que pulsase D, y por ahí no petaba. Te adjunto sendas capturas de la última versión (la anterior no me deja, pero casca igual).
Para el ángulo que te tiene que devolver, puedes intentar mover la cámara a la misma distancia, pero con ángulo -90000 o 0 y ver qué valor debería devolver. Si no, siempre se puede reescribir, es simple trigonometría (por ejemplo, respecto al plano horizontal sería algo como ángulo=atan(disty/distx) siendo disty la distancia en el eje y entre la cámara y el proceso target, y lo mismo con distx y el eje x). En el plano horizontal se puede hacer con el propio Bennu, pero la elevación no, porque influyen cosas como el parámetro que indica la altura por pixel, el ángulo de apertura...
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

DCelso

¿Entonces la versión que te subí también casca dejando el "a" pulsado un rato?

en cuanto lo que comentas de la arcotangente no entiendo nada :D.
Te pongo el código modificado de target

angSB = vse_fget_angle ( VoxSpaceIdents[id_voxelspace]->x,
VoxSpaceIdents[id_voxelspace]->y,
sprite_x,
sprite_y); <b>Aqui calcula el ángulo B</b>
      <b>Aqui ya vale 90000 el ángulo</b>

angSB = (angSB * VoxSpaceIdents[id_voxelspace]->a360)/360000; <b>aquí lo transforma en un valor interno para usar una tablas pregeneradas de cosenos y senos</b>

dx = VoxSpaceIdents[id_voxelspace]->cos_look[angSB] * 2;
dy = -VoxSpaceIdents[id_voxelspace]->sin_look[angSB] * 2;

if (dx > dy){
if (dx != 0)
dist = ((sprite_x - VoxSpaceIdents[id_voxelspace]->x) * 4096) / dx;
else
dist = INT_MAX;
}else if (dy != 0)
dist = ((sprite_y - VoxSpaceIdents[id_voxelspace]->y) * 4096) / dy;
else
dist = INT_MAX;

zr = (sprite_z << (FIXP_SHIFT + VoxSpaceIdents[id_voxelspace]->scale))
- (VoxSpaceIdents[id_voxelspace]->dslope * dist
* VoxSpaceIdents[id_voxelspace]->RMap->height >> 1);

if (dz !=0)
dz = (zr - (VoxSpaceIdents[id_voxelspace]->z << FIXP_SHIFT)) / dist;<b>Aqui es donde cascaba antes</b>
else
dz = INT_MAX;

VoxSpaceIdents[id_voxelspace]->a = (dz / VoxSpaceIdents[id_voxelspace]->dslope)
+ VoxSpaceIdents[id_voxelspace]->RMap->height; <b>Aqui calcula el ángulu A</b>

VoxSpaceIdents[id_voxelspace]->b = angSB;

Pues vamos, si sabes explicarme más a fondo la función target bienvenido sea.
yo se que como parámetro de entrada se le pasa el suelo y las coordenadas "xyz" del sprite y calcula los ángulos "ab" del suelo.
Pero poco más, porque no se ni qué son esos águlos :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Drumpi

Ah, guay, es que aun no me he puesto a mirar el código a fondo ^^U
Pero bueno, a ver si esta tarde le doy un vistazo, porque parece mentira la de cosas que me has aclarado con dos frases (sorry, el trabajo es lo primero).
Básicamente, los ángulos son:
-Por lo que leo, el B indica el ángulo segun el plano horizontal. O sea, cuanto hay que girar el cuello de izquierda a derecha.
-Y el A indica la inclinación de la cámara, vamos, girar el cuello arriba y abajo.

No sabía que usaba tablas de senos/cosenos precalculadas ¿eso aumenta el rendimiento? ¿eso no estaba ya pre-calculado por c o por bennu?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

FreeYourMind

Sobre los senos y cosenos, Splinter ha echo funciones complementarias totalmente compatibles con DIV, ya que las de Fenix/Bennu estan mal. No se si eso ayudaria...

DCelso

npi, es un mundo abstracto esto para mí :.(. Yo solo leí el código pero no lo entendí :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

Ya he encontrado el problema, el error está en el cálculo del ángulo A, cuando dz vale 0
He hecho un algoritmo con histéresis y en caso de que dz valga 0, asigno al ángulo a el valor anterior.
Ahora el problema parece culpa de precisión, veo valores del ángulo a bastante dispares.
Drumpi, prueba esta nueva versión, que muestra por la consola los valores xyz del suelo y del sprite y los angulo a y b
lleva el ángulo a 90000 y luego a 920000 y mira todos los resultados antes y despues de 900000, verás que no hay continuidad.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Descargando, voy a echar mi primer vistazo a esta librería a ver si saco algo en limpio :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

¿Te refieres a los datos en pantalla? porque cuando me pongo a 90000 o 180000, el ángulo de inclinación apenas varía, pero la cámara se va de viaje ???
¿Tienes el código fuente por ahi? para echarle un vistazo, porque si no, tengo que tirar del código original de la 0.8 para Fenix.
Por otro lado ¿por qué dividirlo en dos librerías?

PD: lo siento, no he podido probar lo de los 16 bits ni nada de lo demás, aun.

PD2: Wind, no te descargues la última, porque es una actualización :P La buena creo que es la tercera.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)