Autor
|
Tema: Busco técnicas para dibujar muro: ¿Achicar una parte? (Leído 18,520 veces)
|
Tachikomaia
Desconectado
Mensajes: 1.459
Hackentifiko!
|
De este muro: me falta la parte de arriba y el costado. El costado es un trabajo chino, tengo que borrar algunas líneas y otras no, y cada vez las distancias son más cortas, cada vez se ve menos: Flash da la posibilidad de, digamos, mover una parte para un lado y otra para otro, como si fuese convertir un rectángulo en un paralelogramo; usando eso me quedó así: Pero a eso le falta digamos el efecto de irse achicando hacia el horizonte (el mío está exagerado, pero me gustó así). ¿Qué puedo hacer? Quisiera que se achique de un lado pero no de otro, o sea seleccionar una imagen, digamos un rectángulo, y que se achique sólo la parte de arriba, convirtiéndose entonces en un triángulo rectángulo. ¿Existe un editor online o poco pesado que haga eso? Lo explico con una imagen por las dudas: Eso se puede hacer en Flash con "shapes", o sea líneas y rellenos, pero si la imagen tiene muchas cosas de esas es mucho más complicado, pero se me acaba de ocurrir usar mi muro como relleno (color) de una shape, voy a probar eso en unos días, pero el relleno no se achica como muestra la animación, lo acomodé manualmente (y la 2nda no quedó bien); en el caso del muro quizá no se pueda...
|
|
« Última modificación: 18 Mayo 2024, 07:46 am por Tachikomaia »
|
En línea
|
|
|
|
Serapis
|
Cuando el trabajo gráfico es pesado o el lenguaje es algo lento para realizar la tarea, la opción preferida es mantener las imágenes preprocesadas, es decir generadas previamente y simplemente seleccionarlas adecuadamente y cargarlas. A menudo en diferentes resoluciones y/o calidades gráficas.
Luego al momento de usarlas lo adecuado es usar un 'backbuffer' , es decir un lienzo en memoria donde se va dibujando y cuando está completa se vuelca al 'viewport' de destino (otro backbuffer o definitivamente la pantalla), la cantidad de veces que se pega esa imagen completa es lo que se conoce como los 'fps'.
Entonces digamos que tu valoras que si solo consigues graficar 15pfs, y requieres que sean 50 para que vaya fluído, considera mejor que en vez de regenerar un gráfico a base de código, generarlo a base de sprites predefinidos. Cada sprite, no es más ni menos que una tira de imágenes (típicamente de la misma medida y con transparencias), que se mantienen en una sola imagen, un índice (a veces 2), refieren a la enésima imagen del sprite que se debe usar. Esto suele ser el modo en poder sacar más fps, si tienes problemas con ellos por la potencia de cálculo (sea achacable a lo que sea). Como sabrás en los personajes, suelen usarse sprites más '´faciles de identificar', conforme a la acción usada... si da pasos (por ejemplo), vas tirando de un tira de imagenes donde da pasos, y si golpea, seguramente en el mismo sprite verticalmente hay una tira donde golpea con los pies y quizás otra con los puños, o incluso otra donde da saltos, etc... De modo similar, las 'zonas', también se pueden componer de sprites. Y así como la selección de sprites de los personajes se seleccionan conforme a su movimiento, los sprites del 'mundo' se seleccionan por las cordenadas x,y (z), del mapa actual... Es decir considera la pantalla actual como un sprite gigante, que a menudo puede estar formado por varios detrás (para dar la sencsación de profundidad). Si defines supongamos 4 sprites de profundidad, debes indicar una velocidad de desplazamiento de cada uno, conforme al movimiento del que está en primer plano, entonces cualquier 'muro' que trates de dibujar entre el sprite de un plano al de más detrás, viene sesgado justo por esa distancia de movimiento que relaciona ambos....
Un ejemplo simple: Primer plano: Una calle donde se lucha, avance 20 píxeles por segundo. segundo plano: jugadores u objetos detrás, 18 px por segundo. tercer plano: edificios 15 px. por segundo. cuarto plano: montañas a los lejos 8 px. por segundo. quinto plano: nubes, sol, luna, etc.. 3-5 px por segundoEn la práctica es muy recomendable que los valores sean múltiplos unos de otros para evitar efectos de transición raros, luego no es raro ver valores en la forma PxM, donde P son valores de la profundidad de los planos (por ejemplo 7-1) y 'M' un facotr multiplicador (1-5).
En cualquier caso debes construir algo coherente, para que todo funcione bien, solo ideas a medias siempre te dejará desilusionado... y no pararás de hacer cambios sin que termine de gustarte la solución.
Si te fijas bien, aunque resulte complejo, pueden hacerse siempre pequeños 'trucos', por ejemplo si se usan siempre muros sesgados siempre a 45 grados. Ahí el truco entonces es alargar el muro lo suficiente para que el ángulo sea siempre 45º (debe calcularse pues cuanto hay que insertar en un sprite antes de 'pegar' el sprite del muro sesgado a 45º). Dicho de otro modo si un personaje se acerca demasiado al final del muro, el álgulo con que se vería el muro cambiaría... entonces no lo permitas, colocas un obstáculo antes el muro, y nunca sobrepasa ese ángulo de 45º... hay muchas opciones que dependen un poco de la imaginación. Por ejemplo, si permites que salte por encima del muro, ahora abres una plataforma que aparece tapando el muro (que ya estaría obligado a verse en pongamos 63º), donde se sube el personaje, luego salta y unos bidones tapan el muro a un ángulo de 108º... por tanot cuando debe mostrarse el muro sesgado siempre será a 45º y en otras circunstancias que pudiera tener otro águlo, o se limita o se tapa por otro plano del sprite que además debe elegirse de forma natural (so pena de notarse excesivamente por qué aparece). Verás que en uchos juegos en primer plano, se tapan convenientemente los pies y piernas por la infinidad de detalles de sus movimientos.
Naturalmente no solo debes pensar en las capacidades de tu equipo si es viejo, considera el ecosistema destino, más que el tu propio equipo. Lo ideal es poder hacer pruebas en equipos en los que uno espera que debe funcionar, para que las perspectivas del presunto 'cliente' no se vean sobrepasadas (esa ansiedad de que aunque se acaba de comprar un equipo nuevo, todavía es incapaz de ejecutar según que juegos)....
Por otro lado, si lo que quieres es calcular la imagen de un muro sesgado Uun cuadrado que se vea como un rombo, por ejemplo), la ecuación es la de la rotación 3D, con o sin perspectiva. Suele partirse de la imagen con las cordenadas X,Y,Z = 0, Escala=1, etc... el ángulo de la cámara, debe seguirse sea en cualquiera de las cordenadas 3D que interese (no necesariamente deben ser las 3, pero el cálculo si obliga a usar las 3).
Dichos cálculos son algo pesados pues requiere aplicarlo a cada píxel... hay algoritmos que previamente limitan la secuencia para calcular solo los planos que se verán de la escena ty de ellos todavía solo los píxeles del mismo que se verán aceerando así el cálculo limitando los que no se ven, determinar esto también consume tiempo, por lo que no es útil siempre si no solo en escenas pesadas y recargadas de objetos individuales y además cuando se pretende consdeguir cierto realismo. Dándose ciertas licencias, uno puede limitarlo a calcular solo determinadas cosas, por ejemplo los muros, que es donde la perspectiva se parecia grandemente su efecto y no por ejemplo en los personajes, que suele bastar con aplicarles escala si están más o menos cerca.
|
|
« Última modificación: 4 Junio 2024, 17:30 pm por Serapis »
|
En línea
|
|
|
|
Tachikomaia
Desconectado
Mensajes: 1.459
Hackentifiko!
|
Creo que te confundiste, esto no es para un juego ni es animación...
|
|
|
En línea
|
|
|
|
Serapis
|
Creo que te confundiste, esto no es para un juego ni es animación...
No. Tu respuesta sigue constando ahí. Simplemente si lo necesitas para otra cosa, sobran otros detalles. ... Por otro lado, si lo que quieres es calcular la imagen de un muro sesgado Uun cuadrado que se vea como un rombo, por ejemplo), la ecuación es la de la rotación 3D, con o sin perspectiva. Suele partirse de la imagen con las cordenadas X,Y,Z = 0, Escala=1, etc... el ángulo de la cámara, debe seguirse sea en cualquiera de las cordenadas 3D que interese (no necesariamente deben ser las 3, pero el cálculo si obliga a usar las 3).
Dichos cálculos son algo pesados pues requiere aplicarlo a cada píxel... hay algoritmos que previamente limitan la secuencia para calcular solo los planos que se verán de la escena ty de ellos todavía solo los píxeles del mismo que se verán aceerando así el cálculo limitando los que no se ven, determinar esto también consume tiempo, por lo que no es útil siempre si no solo en escenas pesadas y recargadas de objetos individuales y además cuando se pretende consdeguir cierto realismo. Dándose ciertas licencias, uno puede limitarlo a calcular solo determinadas cosas, por ejemplo los muros, que es donde la perspectiva se parecia grandemente su efecto y no por ejemplo en los personajes, que suele bastar con aplicarles escala si están más o menos cerca.
|
|
|
En línea
|
|
|
|
Serapis
|
Como veo que no respondes, no hay feedback, te abro otro hueco...
Cuando debes hacer ciertas modificaciones, en gráficos de imagen se suelen denominar transformaciones... hay transformaciones de sitio (mover, es decir desplazar una imagen, hacia cualquier posición, suele bastar con añadir los valores de desplazamiento (x,y) a la imagen... hay varias transformaciones simples (incluído la escala), sin mebargo la suma de todas ellas pueden ser aplicada de unsa sola vez en una sola operación que es la trandformación 3d, pues utiliza multiplicacion de matrices para conservar los datos y finalmente aplicarlo una sola vez, al final debe proyectarse (convertirse de vuelta a 2D), para volcarlo en la pantalla.
No obstante si es solo ese caso, esa transformación la que necesitas aplicar y ninguna más (sesgar la imagen), se puede acelerar el caso, ya que en sí no es más que una interpolación de un área de origen a otra área de destino (que toma forma de trapecio). Es necesario sin embargo, rotar los 4 puntos de la esquina de la imagen original, para tener la posición (y límites) de la imagen final. Entopnces por cada pixel en el área de destino, debes preguntar cual píxel de origen le corresponde (con o sin interpolación, pero inicialmente y para pruebas mejor toma el píxel más cercano, olvida interpolación lineal, bilineal, cúbica ni nada complejo, salvo que el resultado no resultare satisfactorio, aunque de entrada es bueno una interpolación del píxel más cercano).
Para calcular el píxel en origen, debes descubrir que transformación ha sufrido el pixel en destino (movimiento). Esto son simples matemáticas... si en origen la imagen media 800px de ancho y en destino mide 500, entonces hay un factor de desplazamiento horizontal para cada pixel en destino de 800/500, y verticalmente en cambio va en 'fuga' es decir debe actualizarse por cada distancia cuanto se ha visto afectado verticalmente... son simples cálculos de divisiones y multiplicaciones. Pero como te digo, al menos para las 4 esquinas si deben calcularse rotacionalmente su destino, ya que delimitan el área de destino y por tanto las medidas que afectan la transformación.
En las API de win2, hay una que se llama 'world transform', al que se le pasan como parámetros la imagen, los puntos de las esquinas y las transformaciones a efectuar y te devuelve la imagen transformada. Desconozco si en tu lenguaje hay acceso a tales funciones directa o indirectamente (que sería una buena opción si quieres resultados sin complicarte en como lograrlo).
|
|
|
En línea
|
|
|
|
Tachikomaia
Desconectado
Mensajes: 1.459
Hackentifiko!
|
Ha habido frío y cuando eso sucede no uso mucho el mouse, así que sobre esto no había hecho mucho más hasta ayer. Además he estado ocupado, sólo pasó 1 día, cuando me quede cómodo te respondo bien, ahora estoy comiendo. Ya. Tu respuesta sigue constando ahí. Eso también lo había visto, pero parece demasiado complejo ponerme a hacer cálculos para esto. Mira, esto me dijeron en Quora: Si entiendo bien lo que dices en tu comentario eso se llama "perspectiva".
En todos los programas de edición de imágenes, como Photoshop, Illustrator, GIMP o Inkscape, hay herramientas para transformar un objeto plano en un objeto con perspectiva.
En GIMP (editor de imágenes en mapa de bits gratuito) está en el menú Herramientas > Herramientas de transformación > Perspectiva:
Eso era lo que buscaba pero como ese programa no me sirvió (los ladrillos se agrandan demasiado) decidí hacerlo a mano, agrandé la imagen y le encontré la vuelta: - En vez de los colores que usaré, usar en principio colores vistosos, cambiarlos luego. - Ir pintando los ladrillos de modo horizontal, que ahí es diagonal, es decir, 1ero una fila, luego la otra, etc. Yo estaba haciendo de arriba hacia abajo. Es simplemente buscar la siguiente raya | borrarla y pintar. Por ahora lo tengo así: Vista ampliada de una parte: Básicamente sólo me falta poner los colores rojizos y líneas. Los tamaños quedaron mal porque Flash delira en eso, yo iba estirando las líneas de a una a la vez y algunas filas quedaron más altas que otras, no lo voy a cambiar por ahora, no lo necesito perfecto xP Las nuevas cosas que dices me parecen más sencillas que lo de hacer cálculos pero aún no lo capto bien.
|
|
« Última modificación: 7 Junio 2024, 03:25 am por Tachikomaia »
|
En línea
|
|
|
|
Tachikomaia
Desconectado
Mensajes: 1.459
Hackentifiko!
|
Ya está (sin líneas): Con líneas queda negro: No hay modo de achicarlas... que yo sepa. Les puse el mínimo tamaño de trazo. Tal vez si las convierto en relleno y achico el relleno, pruebo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Achicar Imagen
Programación Visual Basic
|
kakinets
|
5
|
2,091
|
29 Noviembre 2006, 21:25 pm
por CeLaYa
|
|
|
Problemas para achicar archivo
Diseño Gráfico
|
enjoythesilence
|
1
|
1,879
|
22 Diciembre 2006, 17:10 pm
por Azielito
|
|
|
Busco profesor para Técnicas de Representación 3D (Infografía)
Diseño Gráfico
|
Martina24sp
|
3
|
4,266
|
3 Mayo 2010, 23:42 pm
por [[ Criistian ]]
|
|
|
Algún programa para achicar mi pantalla?
Software
|
virtualedu
|
2
|
1,366
|
25 Julio 2014, 23:26 pm
por MONOhack
|
|
|
Probamos el nuevo muro de Facebook:una salvación para ti y una ruina para los...
Noticias
|
wolfbcn
|
0
|
1,860
|
3 Noviembre 2017, 01:02 am
por wolfbcn
|
|