jump to navigation

Más rendering February 27, 2005

Posted by winden in coding, demoscene.
trackback

Empiezo a tener cosas visibles en pantalla :)

He llegado a tener el render, tanto por altivec como por enteros, pintando una malla de 100x100x2 = 20000 polígonos, a una velocidad más que respetable. La versión de enteros es razonable, pero la de vectores es increiblemente rápida :)))

Es más, he descubierto una forma de mejorar la velocidad de la rutina. Antes para saber si debía pintar un pixel, necesitaba 7 operaciones básicas:

m0 = (c0 > 0);
m1 = (c1 > 0);
m2 = (c2 > 0);
m3  = (z > sz);
m4 = m0 & m1;
m5 = m2 & m3;
m = m4 & m5;

mientras que ahora sólo necesito 5:

v0 = min(c0, c1);
v1 = min(v0, c2);
m0 = (v1 > 0);
m1  = (z > sz);
m = m0 & m1;

Lo que me ha frenado un poco es la necesidad de usar precisión de subpixel. Al hacer el render de triángulos usual, podemos asegurar que no aparezcan los infames “agujeros entre polígonos” teniendo cuidado con las condiciones de final de bucle, haciendo que pinte un pixel de más al final de cada scanline. En el render por implícitas es posible, aunque muy complicado, hacer la misma operación por lo que es mejor pasar a hacer el cálculo con precisión de subpixel, con lo que además de evitar los agujeros tenemos un render muy muy muy estable para los movimientos lentos.

Por el momento tengo funcionando el subpixel para la versión escalar, pero la vectores se está resistiendo un poco más… eso si, es increible ver la malla rotando tan “pixel perfect”!!!

Comments»

No comments yet — be the first.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: