P9                                 
------------------------------------
P;       INICIACION A LAS TRES     
          DIMENSIONES (II)P9       
------------------------------------
P8                                 
  Por P9Spanish Archer / Darkness. 
P8                                 
                                    
  ¡Hola, mis queridos coders!. Aquí 
estoy de nuevo perseverante inten-  
tando que el 3D sea un paseo para   
vosotros. Hoy le toca el turno a los
vectores sólidos.                   
                                    
P9        LOS VECTORES SOLIDOS     
P;        --------------------     
P:                                 
  Definición:P8 Dícese de aquellos 
polígonos que no son huecos, es de- 
cir, son sólidos.                   
                                    
  Ejem .... bromas aparte, los prin-
cipales problemas que nos vamos a   
encontrar son:                      
P:                                 
 - El filler:P8Es decir,rellenar un
polígono.                           
P:                                 
 - Prioridad de las caras:P8Ver que
caras están ocultas y cuales no.    
P:                                 
 - Clipping:P8La intersección de un
polígono con los extremos de la pan-
talla.                              
                                    
  Los 3 han sido problemas muy estu-
diados a lo largo de la corta vida  
de los gráficos por ordenador y por 
lo tanto hay muchas soluciones ya   
universalmente reconocidas.         
                                    
  En el artículo de hoy me centraré 
en el problema de la prioridad de   
las caras. El problemas del filler  
solo lo introduciré (no todo te lo  
iba dar hecho, ¿no?. ¡Piensa un poco
hombre!) y el problema del clipping 
merece ser protagonista de otro ar- 
tículo.                             
                                    
  Bueno, vamos con ...              
                                    
P9       EL PROBLEMA DEL FILLER    
P;       ----------------------    
P8                                 
  Como todos sabemos, el Blitter    
tiene un modo de rellenar. Pues     
bien, los pasos a seguir para relle-
nar un polígono son:                
P:                                 
 - Poner la rutina de líneas a XOR y
a un punto por linea.               
 - Dibujar el polígono.             
 - Hacer el Fill con el Blitter.    
P8                                 
  Hasta aquí todo parece pan comido,
pero cuando lo hagáis os pegaréis un
buen susto (¿verdad, Ruso?). La pega
está en los vértices del polígono.  
Por ejemplo:                        
P9                                 
 ANTES DEL FILL | DESPUES DEL FILL  
 -------------- | ----------------  
       .        |.........          
      . .       |       ...         
     .   .      |      .....        
    .     .     |     .......       
   .       .    |    .........      
                                    
P8                                 
  Hay dos formas de solucionar esto:
P:                                 
 - Una vez dibujado el polígono, co-
rregir los vértices.                
 - Trucar la rutina de lineas.      
P8                                 
  La primera solución es más fácil  
pero menos flexible, ya que solo    
permite polígonos simples. La segun-
da, aunque más complicada que la    
primera (requiere conocimientos pro-
fundos del Blitter), permite el re- 
lleno de CUALQUIER polígono, por    
complicado que este sea, y además es
más rápida que la primera (es la que
yo uso, je, je....).                
                                    
  Bueno, ya está bien de fill por   
hoy. Pasemos a ...                  
                                    
P9     LA PRIORIDAD DE LAS CARAS   
P;     -------------------------   
P8                                 
  Hay muchos algoritmos de lineas   
ocultas, pero el más sencillo y más 
rápido (también el menos flexible,  
ya que permite solo objetos cerra-  
dos) para los vectores sólidos es el
siguiente:                          
                                    
  Definimos un orden en los puntos  
que conforman las caras de nuestros 
objetos. Este orden puede ser hora- 
rio o antihorario (es decir, en con-
tra o a favor de las agujas del re- 
loj).                               
                                    
  Una vez que tenemos definido el   
objeto, para saber si una cara se ve
o está oculta solo tenemos que coger
tres puntos consecutivos de una ca- 
ra, convertirlos en 2 vectores y ha-
cerles el producto vectorial, con lo
cual obtendremos otro vector que es 
normal (perpendicular) a esa cara, y
el signo del vector nos dirá si la  
cara se ve o está oculta.           
                                    
  Las fórmulas empleadas para todo  
esto son:                           
                                    
 - Dados 3 puntos de una cara:      
P9                                 
  P1 (X1,Y1,0), P2 (X2,Y2,0),       
  P3 (X3,Y3,0)                      
                                    
  (P2-P1) * (P3-P2) = (0,0,R)       
                                    
                                    
      |   i      j      k |         
      | X2-X1  Y2-Y1    0 | =       
      | X3-X2  Y3-Y2    0 |         
                                    
           | X2-X1  Y2-Y1 |         
   = 0, 0, | X3-X2  Y3-Y2 |         
P:                                 
 R = (X2-X1)(Y3-Y2) - (X3-X2)(Y2-Y1)
P8                                 
 - El signo de R nos indicará si la 
cara se ve o no.                    
                                    
                                    
  Bueno, espero que todo esto os sea
de máxima utilidad. De todas formas,
para cualquier duda no os lo penséis
y llamadme (solo en vacaciones) o   
escribidme. ¡Hasta el próximo artí- 
culo!.                              


