Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: shephiroth en 23 de Diciembre de 2011, 07:14:53 PM

Título: Pixeles desaparecidos en rotaciones
Publicado por: shephiroth en 23 de Diciembre de 2011, 07:14:53 PM
Buenas tardes.

Estoy en un pequeño proyecto en el que me han salido algunas dudas respecto a rotaciones. Para hacerlo corto, tengo una matriz int pixels[] enlazada a un objeto gráfico que dibujo en pantalla. Ahora bien, dibujar un cuadrado es facil......incluso aun haciendo profundidad en uno de los lados no es demasiado complicado, pero tengo problema para enfocar una rotación del plano Z (es decir, dibujar un rombo). Si un bucle va desde y (arriba izq) hasta y (abajo izquierda) ocurre que voy perdiendo pixels.....lo mismo si hiciera un bucle desde x (arriba izquierda) hasta x (arriba derecha) ocurre lo mismo, a 0/180 se dibuja completo, pero cuanto mas cerca de 90/270 pierden mas pixels.


Se me ha ocurrido hacer que los bucles sean de doubles y que se muevan de 0.1 en 0.1, aunque al principio los pixeles se mantienen acaban desapareciendo. Alguna solucion??
Título: Re: Pixeles desaparecidos en rotaciones
Publicado por: XÑA en 23 de Diciembre de 2011, 10:05:38 PM
Tu problema es típico. Resulta que al rotar pasas de un espacio 2D de nº enteros a un espacio de números en coma flotante. Con lo que algunos pixels quedarán en 1.9, otros en 1.1, y claro, se 'pierden'.

Lo que tienes que hacer es dibujar polígonos ( 2 triángulos en tu caso) De esta forma, lo que haces es dibujar en pantalla 2D, con valores de pixels fijos ( 0,1,2,3,4,5...) y buscar la rotación que le correspondería.

Busca por internet un rasterizador, o alguna rutina que te permita dibujar triángulos texturizados, y problema resuelto.
Título: Re: Pixeles desaparecidos en rotaciones
Publicado por: shephiroth en 24 de Diciembre de 2011, 09:30:25 AM
Buenas. Gracias por la respuesta.

He encontrado ScanLine (http://"http://www.cse.unsw.edu.au/~cs3421/slides/bres/ScanLine.html"). No parece complicado, pero no se si es cosa del applet o que el sistema va muy lento?? En el proyecto hay parte de los graficos que se guardan en memoria entre ticks, pero otros no. Hay mas modelos???

En la wikipedia buscando rasterización (http://"http://es.wikipedia.org/wiki/Rasterizaci%C3%B3n"), comentan algo de "perspective foreshortening" a la hora de buscar el pixel de la textura. A que se refieren???


Gracias :)
Título: Re: Pixeles desaparecidos en rotaciones
Publicado por: XÑA en 24 de Diciembre de 2011, 03:48:39 PM
Es que para aplicar la perspectiva correcta a la textura hay que dividir por Z. Pero ese no es tu caso, porqué trabajas en 2D.

Mira, he encontrado esto:

http://joshbeam.com/articles/triangle_rasterization/ (http://joshbeam.com/articles/triangle_rasterization/)
Título: Re: Pixeles desaparecidos en rotaciones
Publicado por: shephiroth en 24 de Diciembre de 2011, 06:07:49 PM
En realidad, si trabajo con 3d (o se podría decir, 2 y media xDD). Se que para llevar la geometriz a 2d hay q dividir por z, pero para la textura me pierdo. Hasta ahora hacia xTex = (xPos-xIni)/(xFin-xIni), lo mismo con y...., y luego hacer xTexPix = (int)Math.ceil(xTex*Texture.width).pero para la textura no utilizo z. Que hago mal exactamente?? Qué problema se da realmente?? Quizas sin saberlo ya dividi por Z y por es no he encontrado problemas???

Bueno, me pongo con el enlace que me diste......parece denso.

Gracias :)
Título: Re: Pixeles desaparecidos en rotaciones
Publicado por: XÑA en 24 de Diciembre de 2011, 06:30:01 PM
Ala, Back to the past!!!  :D

http://www.xbdev.net/maths_of_3d/rasterization/texturedtriangle/index.php (http://www.xbdev.net/maths_of_3d/rasterization/texturedtriangle/index.php)

http://chrishecker.com/Miscellaneous_Technical_Articles (http://chrishecker.com/Miscellaneous_Technical_Articles)
Título: Re: Pixeles desaparecidos en rotaciones
Publicado por: shephiroth en 26 de Diciembre de 2011, 03:12:05 PM
Buenas. Gracias por las respuestas. La verdad es que son muy interesantes los ultimos enlaces.

Gracias. Y feliz de año a todos :)