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.