miércoles, marzo 07, 2007

Tarea 5.2_____CONCEPTOS BÁSICOS


USABILIDAD

Es el rango en el cual un producto puede ser usado por unos usuarios específicos para alcanzar ciertas metas especificadas con efectividad, eficiencia y satisfacción en un contexto de uso especificado"; este concepto no se limita a sistemas computacionales exclusivamente, sino que es aplicable a cualquier elemento en el cual se va a producir una interacción entre un humano y un dispositivo.

En el caso de los sistemas computacionales, la usabilidad va a abarcar desde el proceso de instalación de la aplicación hasta el punto en que el sistema sea utilizado por el usuario, incluyendo también el proceso de mantenimiento.

La usabilidad tiene cinco atributos definidos:

  1. Calidad de desempeño. ¿Cuánto le toma a un usuario completar un grupo de tareas específicas (benchmark tasks)?

  2. Tasas de error por parte de los usuarios.
    ¿Cuántos y qué errores hace la gente al ejecutar un grupo de tareas específicas?

    Una aplicación ideal evitaría que el usuario cometiera errores y funcionaría de manera óptima a cualquier petición por parte del usuario. En la práctica esto difícilmente se logra. Es vital que una vez que se produzca un error el sistema se lo haga saber rápida y claramente al usuarios, le advierta dobre la severidad del mismo y le provea de algún mecanismo para recuperarse de ese error.

  • Retención sobre el tiempo.
    ¿Qué tan bien recuerdan los usuarios la manera en como funciona el sistema después de una hora, un día o una semana?

  • Satisfacción subjetiva.
    ¿Qué tanto le gustaron a los usuarios los distintos atributos del sistema? E


La usabilidad universal es la característica de un sistema que pretende ser utilizado por:

  • El tipo o tipos específicos de usuario/s

  • La tarea o tareas que para las cuales el sistema se ha hecho

  • El contexto en el que se da la interacción.

    El "grado de usabilidad" de un sistema es, por su parte, una medida empírica y relativa de la usabilidad del mismo.

    Empírica porque no se basa en opiniones o sensaciones sino en pruebas de usabilidad, realizadas en laboratorio u observadas mediante trabajo de campo. Relativa porque el resultado no es ni bueno ni malo, sino que depende de las metas planteadas
    El concepto de usabilidad se refiere a una aplicación (informática) de (software) o un aparato (hardware), aunque también puede aplicarse a cualquier sistema hecho con algún objetivo particular.


JUGABILIDAD

La jugabilidad era usada solamente en el contexto de los videojuegos.

El control del juego es una de las facetas más importantes. La forma de manejar el juego debe ser fácil e intuitiva, sino el aprendizaje puede ser costoso y por consiguiente el juego no llame la atención.

Decir: "El juego tiene buena jugabilidad", se refiere a que durante el gameplay el o los personajes se pueden controlar fluidamente, es decir sus movimientos no serán toscos ni limitados o entrecortados, esto implica además que gozarán de una buena animación acorde a la generación y época del juego. Y la interacción con el medio ambiente virtual en el que se desarrolla el juego será fluida.

Decir: "El juego tiene una mala jugabilidad", se refiere a que durante el gameplay el o los personajes se controlarán muy limitadamente o toscamente. Y puede no interactuar correctamente con el medio ambiente virtual. Por ejemplo: El personaje que viene caminando por el piso y quiere agarrar una escalera vertical para subir, si resultara que el personaje tiene que posicionarse justo debajo de la escalera para poder subir (con precisión pixel-métrica) implica que la jugabilidad es mala.

MAQUINA DE JUEGO

Los juegos generalmente tienen módulos clave para manejar tareas como mostrar gráficas, manejar recursos, interpretar y ejecutar scripts, reproducir efectos de sonido, manejar la inteligencia artificial, manejar el input del usuario. Estos módulos clave, junto con otros, forman de manera colectiva lo que se llama un Game Engine, un producto que ofrece todas estas características, y hay quienes las usan para ahorrarse algo de trabajo al programar.


MOD

El modding consiste en la modificación estética o funcional de cualquier cosa (software incluido). Sin embargo, la palabra modding se suele usar frecuentemente para las modificaciones realizadas a un ordenador o a algo relacionado con él, como son los periféricos, accesorios e incluso muebles que lo rodean.
A todo el que practica el modding se le llama "modder".

DIAGRAMA DE FLUJO DE DATOS (DFD)

El diagrama de flujo representa la forma más tradicional para especificar los detalles algorítmicos de un proceso. Se utiliza principalmente en programación, economía y procesos industriales; estos diagramas utilizan una serie de símbolos con significados especiales. Son la representación gráfica de los pasos de un proceso, que se realiza para entender mejor al mismo. Son modelos tecnológicos utilizados para comprender los rudimentos de la programación lineal.


FRAMEBUFFER.

OpenGL cuenta con una colección de búfers donde se almacena información que se presentará en la pantalla. El búfer principal, es el búfer de color, que es un arreglo bidimensional que almacena el color final de los pixeles. También existe el búfer de profundidad (Z-buffer), que almacena la información de profundidad (respecto a la cámara virtual) de cada pixel generado cuando se hacer un render de un objeto, esto sirve para determinar si cada pixel del objeto es visible al hacer la comparación de los pixeles generados contra la información que ya se tiene en el Z-Buffer.

En las aplicaciones gráficas se tienen cuando ménos dos framebuffers, uno para mostrar en la pantalla y otro para hacer un render en él, mientras el otro, se muestra en la pantalla. Al terminar de hacer un render en un búfer, se hace un intercambio, el búfer en el que se hizo el render es mostrado en la pantalla, mientras se hace render en el otro. Es necesario usar dos búfers, ya que de lo contrario, tendríamos un efecto visual desagradable al hacer render sobre el búfer en pantalla

RENDER

Es el proceso de tomar una representación matemática tridimensional de un objeto y presentarlo como una imagen bidimensional en la pantalla. Para este proceso se toma toda la información relacionada al objeto como color, posición y textura.


PROYECCIONES

. Las 3 etapas conceptuales de la arquitectura gráfica son: Aplicación, Geometría, y Rasterización.
En la etapa de Geometría, se toman los objetos y sus datos asociados y se “proyectan” en la pantalla. Hay dos formas principales de hacerlo: para 2D se usa la proyección ortogonal, en ésta, la apariencia de los objetos es la misma, independientemente de la distancia desde donde se vean. Para 3D se utiliza la proyección en perspectiva; donde la apariencia de los objetos cambia, dependiendo de la distancia con respecto a la cámara virtual, que es como percibimos los objetos en la vida real.


TRANSFORMACIONES

En un juego, el movimiento de los objetos se realiza por medio de transformaciones. Trasladar un proyectil de una posición a otra, rotar la cámara virtual, hacer más grande un objeto, son ejemplos de transformaciones.


MATRICES

Para almacenar información acerca del tipo de proyección usada en un juego, e información de las transformaciones y parámetros actuales de la cámara virtual, OpenGL utiliza la Projection Matrix y la ModelView Matrix respectivamente.


VIEWPORT.

Podemos definir un área dentro de una ventana, a la cual va a afectar nuestro render. Generalmente, el viewport tiene el mismo tamaño de la ventana, pero si quisiéramos hacer una aplicación que muestre nuestros objetos desde varias perspectivas (como lo hace 3dsmax por ejemplo) tendríamos que definir diferentes viewports dentro de nuestra ventana.

GEOMETRÍA

Todos los objetos que vemos en un juego 3D están compuestos por pequeños triángulos, que al ser representados en conjunto, determinan la forma del objeto. Las formas básicas que se mandan a la tarjeta gráfica son cuadrados, triángulos, líneas, y puntos. Cada una de estas primitivas tiene información asociada como vértices, normales, y coordenadas de textura.

Texturas. Son básicamente, imágenes que van a ser “pegadas” a nuestra geometría para darle la apariencia final. Una restricción importante para las texturas de un juego, es que su tamaño debe ser potencia de 2, por ejemplo 128x128, 256x256, 512x512 pixeles. Para determinar qué parte de la textura se pegará en cada triángulo de la geometría, se utilizan las coordenadas de textura. Al hacer el render, se deben pasar las coordenadas de textura por cada vértice de la geometría. OpenGL funciona como una máquina de estados, es decir, guarda la información actual de las propiedades de los objetos hasta que se le indican nuevas propiedades.

GL Utility Toolkit (GLUT)
GLUT es una librería que simplifica la creación y manejo de ventanas con soporte para OpenGL. En GLUT podemos definir nuestras callback functions, que son las funciones llamadas automáticamente cuando ocurren ciertos eventos como cuando se cambia de tamaño la ventana, cuando se hace clic con el mouse o cuando se recibe input del teclado.

GLUT se puede descargar en www.xmission.com/~nate/glut.html, y si quieres configurar Visual Studio para usar GLUT, puedes encontrar una guía para esto en csf11.acs.uwosh.edu/cs371/visualstudio/

El siguiente código es un ejemplo de un esqueleto que inicializa OpenGL y GLUT.

#include
#include
#include // funciones de GLUT y OpenGL

/* Declaracion de callback functions, etc */
void SG_DisplayFunction();
void SG_KeyboardFunction( unsigned char key, int x, int y );
void SG_SizeFunction( int width, int height );
void SG_MouseFunction( int button, int state, int x, int y );
void InitializeProjection( int width, int height );
void InitializeOpenGL();
/* ... */

void InitializeOpenGL()
{
// Color que se utilizará cuando se limpie la pantalla (RGBA)
glClearColor( 0.0f, 0.4f, 0.9f, 1.0f );

// Parámetros para el uso del Z-buffer
glClearDepth( 1.0f );
glEnable( GL_DEPTH_TEST );
glDepthFunc( GL_LEQUAL );

glShadeModel( GL_SMOOTH ); // Tipo de shading
InitializeProjection( 800, 600 ); // Proyección
//...
}

void InitializeProjection( int width, int height )
{
glViewport( 0, 0, width, height ); // Viewport
glMatrixMode( GL_PROJECTION ); // Proyección
glLoadIdentity();
glOrtho( 0, width, 0, height, -10, 10 ); // 2D
/* Cambiar para poder procesar las transformaciones de la camara virtual */
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}

void SG_DisplayFunction()
{
// Limpia el bufer de color y el Z-buffer
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
//...
glFlush(); // Termina los comandos de render pendientes
glutSwapBuffers(); // Intercambia el front y back buffer
}

void SG_SizeFunction( int width, int height )
{
InitializeProjection( width, height );
}
void SG_KeyboardFunction( unsigned char key, int x, int y ){ /*...*/ }
void SG_MouseFunction( int button, int state, int x, int y ){ /*...*/ }

int main( int argc, char** argv )
{
/* Código de inicialización de GLUT */
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH |
GLUT_RGBA );
glutInitWindowPosition( 0, 0 );
glutInitWindowSize( 800, 600 );
glutInit( &argc, argv );
/* Creación de la ventana */
glutCreateWindow(“Juego 2D – SG 2007”);
/* Callback Functions */
// Función llamada cada vez que el usuario cambia
// de tamaño la ventana
glutReshapeFunc( SG_SizeFunction );
// Función llamada cuando la ventana necesita ser redibujada
glutDisplayFunc( SG_DisplayFunction );
// Función llamada cada que nuestra aplicación esta “libre”
glutIdleFunc( SG_DisplayFunction );
// Función llamada cada que se recibe input del teclado
glutKeyboardFunc( SG_KeyboardFunction );
// Función llamada cada que se recibe input del mouse
glutMouseFunc( SG_MouseFunction );
// Inicialización de OpenGL
InitializeOpenGL();
// El loop principal de la aplicación
glutMainLoop();
return 0;
}

Como se puede observar, el uso de GLUT permite simplificar a unas cuantas líneas, un código de inicialización que podría tomar el doble de líneas o más, usando la API de Windows.