Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Pixeles desaparecidos en rotaciones

Iniciado por shephiroth, 23 de Diciembre de 2011, 07:14:53 PM

« anterior - próximo »

shephiroth

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??

XÑA

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.

shephiroth

Buenas. Gracias por la respuesta.

He encontrado ScanLine. 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, comentan algo de "perspective foreshortening" a la hora de buscar el pixel de la textura. A que se refieren???


Gracias :)

XÑA

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/

shephiroth

#4
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 :)


shephiroth

Buenas. Gracias por las respuestas. La verdad es que son muy interesantes los ultimos enlaces.

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






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.