Tag Archive for 'informatica'

Ou de pasqua

Aquesta entrada està bé en aquestes dates (encara que ho vaig llegir fa un temps)…

Obri el bloc de notes (notepad) de windoze i escriu el següent text (sense canvi de línia al final ni espais):

Aqui veo texto chino

A continuació guarda el document amb el nom que sigui i surt del bloc de notes. Torna a obrir el document i… sorpresa!

En realitat no es tracta d’un ou de pasqua, sinó d’un bug del bloc de notes. Resumint el problema ve de que un fitxer de text pla no conté informació sobre quina codificació va utilizar l’editor que el va crear. El que fa el bloc de notes a l’obrir el fitxer és intentar encertar la codificació, però el seu algorisme de vegades falla, ja que el text anterior era codificat com ASCII i l’interpreta com Unicode (més info ací).

CSS Naked Day

Hui l’aspecte visual d’aquesta pàgina canvia amb motiu del CSS Naked Day, dia en que desenvolupadors web, bloggers, etc… reivindiquem l’utilització d’estàndards web llevant el CSS que hem implementat en elles…

naked-day-09

Per a implementar-ho de manera senzilla, podem utilitzar la següent funció php que ens recomanen a la mateixa pàgina:

<?php
function is_naked_day($d) {
  $start = date('U', mktime(-12, 0, 0, 04, $d, date('Y')));
  $end = date('U', mktime(36, 0, 0, 04, $d, date('Y')));
  $z = date('Z') * -1;
  $now = time() + $z;
  if ( $now >= $start && $now <= $end ) {
    return true;
  }
  return false;
}
?>

I utilitzar-la, per exemple així:


<head>
...
<?php
if ( is_naked_day(9) ) {
  echo '<!-- naked day has no styles -->';
} else {
  echo '<link rel="stylesheet" type="text/css" href="styles.css" />';
}
?>
...
</head>

Per a usuaris de wordpress podem utilitzar el plugin CSS Naked Day.

Actualització II

Després d’unes dotze hores pareix que la cosa no està tant malament. Respecte als problemes ja esmentats:

  • Només hi havien alguns plugins desactualitzats, però el nou wordpress m’ho ha posat fàcil.
  • L’actualització dels tags també ha sigut relativament senzilla, amb l’ajuda d’aquest usuari no els hem perdut. Importació i modificació d’alguns fitxers del theme per a la nova gestió dels tags.
  • El theme pareix que segueix sent vàlid a pesar d’algunes xicotetes modificacions en les funcions de gestió de tags.
  • Els widgets del sidebar han seguit funcionant miraculosament, a més ara en tinc d’altres disponibles que potser use en el futur.
  • El problema amb la base de dades i la codificació de caràcters extranys ha sigut el pitjor sense dubte. He substituït els caràcters extranys per entitats html usant un editor de text. Segurament hi hauran molts errors en posts i comentaris, però poc a poc espero que torne tot a estar correcte.

Encara per reparar:

  • Les pàgines d’arxius i stats.

Actualització (per fi…)

Pareix que és hora d’actualitzar el CMS d’aquest blog…

No ho havia fet mai per mandra i perquè no ho considerava necessari, però ara el nostre fantàstic proveïdor de serveis ens diu (diverses vegades ja…) que s’ha de fer i punt (o les consequències seran terribles…).

Així que anem per feina…

La versió de wordpress fins ara és la 2.0.5 i la més nova és la 2.7.1. O siga, que n’hi han unes quantes enmig, la qual cosa és prou mala notícia…

Els problemes que estimo tindrem són (apart d’altres que de segur hi hauran):

  • Plugins desactualitzats o obsolets; suposo que sense major problema, actualizar-los o esborrar-los i punt.
  • Tags no existents en la versió anterior i usats mitjançant un plugin. Segurament es perdran sense remei.
  • El theme.
  • Els widgets del sidebar.
  • El pitjor és un problema amb la base de dades i la codificació de caràcters extranys. Solucionar açò serà el pitjor.

Així que paciència, poc a poc tot tornarà al seu lloc…

Informàtica gràfica 8. Referències

Aquest és el meu projecte per a l’assignatura, sense massa espectacularitats però ben programat.

Ací l’executable, compilat per a Windoze, és necessària la llibreria glut32.dll:

thumb1

thumb2

Fitxers font (.c i .h):

Fitxers de textures:

Bé, per a acabar, uns quants enllaços interessants sobre informàtica gràfica:

Informàtica gràfica 7. Textures

En OpenGL existeixen textures en 1, 2 i 3 dimensions, encara que les més utilitzades són les de 2 dimensions. Una textura és tipus un mapa de píxels on cadascún es pot referenciar per les seues coordenades (x, y).

Els passos per a utilitzar-les són els següents

  • Crear un objecte textura i especificar aquesta textura per a un objecte
  • Indicar com s’aplicarà la textura a cada píxel
  • Habilitar l’utilització de textures
  • Dibuixar l’escena assignant a cada vèrtex la seua corresponent coordenada de textura

Objectes textura

El primer que hem de fer abans de crear un objecte textura és llegir-lo des d’un fitxer. La següent funció ens permet carregar en memòria una imatge de 256×256 píxels en format tga.

/*********************************************************************/
/* Lee una imagen de textura en formato tga */
/* Parametros --> char *fichero : Cadena de caracteres con el nombre */
/* del fichero */
/* int num: Numero que identifica la textura */
/* Salida --> Ninguna */
/*********************************************************************/
void leeTextura ( char *fichero, int num) {
int i, j;
char r, g, b, c;
FILE *tga;

/* Apertura del fichero TGA */
if ((tga = fopen(fichero, "rb" )) == NULL)
     printf ( "Error abriendo el fichero: %s\n" , fichero);
else {
/* Lee los 18 primeros caracteres de la cabecera */
for (j=1; j<=18; j++)
fscanf (tga, "%c" , &c);

     /* Lee la imagen */
     for (j=altoTextura-1; j>=0; j--) {
          for (i=anchoTextura-1; i>=0; i--) {
                fscanf(tga, "%c%c%c" , &b, &g, &r);
                texturas[num][j][i][0] = (GLubyte)r;
                texturas[num][j][i][1] = (GLubyte)g;
                texturas[num][j][i][2] = (GLubyte)b;
          }
     }
fclose(tga); /* Cierre del fichero TGA */
}
}

Com el tamany d’una textura generalment no és el mateix que el del polígon, necessitem també especificar com es calcularà el color final dels píxels sobre el polígon projectat, a partir de la imatge de textura.

D’altra banda també podem repetir la textura cada cert espai.

Utilitzant altres comandaments que podem consultar en el manual, la funció de càrrega i creació d’un objecte textura ens quedarà així:

void cargaTextura( char *fichero, int num) {
       leeTextura(fichero, num);
       glBindTexture(GL_TEXTURE_2D, nombreTexturas[num]);
       glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
       glTexImage2D(GL_TEXTURE_2D, 0, 3, anchoTextura, altoTextura, 0, GL_RGB, GL_UNSIGNED_BYTE, texturas[num]);
       glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
       glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
       glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
       glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}

Assignació de coordenades de textura

Com en el cas de la iluminació, les coordenades de textura s’assignen als vèrtex de manera que cadascun correspon a un píxel del mapa de textures.

Les funcions per a assignar coordenades de textura a un vèrtex són:

void glTexCoord{1234}{sifd}(TIPO coordenades);
void glTexCoord{1234}{sifd}v(TIPO *coordenades);

I per a activar una textura sobre un objecte:

glEnable ( GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, nombreTexturas[i]);

// llamada a la rutina que pinta el objeto con texturas
pinta_objeto();
glDisable ( GL_TEXTURE_2D);

textures1

El codi de l’anterior objecte texturitzat és el següent:

I el fitxer de textura: