viernes, 28 de enero de 2011
Regeneración
jueves, 30 de septiembre de 2010
Inicio
viernes, 13 de agosto de 2010
Mareo
lunes, 28 de junio de 2010
Deseo
jueves, 8 de abril de 2010
Aprendo
viernes, 19 de marzo de 2010
Esquizofrenia
Las manos ensangrentadas y una amnesia desconocida hacia de mi mañana algo singular. Alejandra yacía en la cama adornada de sus colores, pasiva como la luna llena, tranquila, sin moverse, sin respirar.
Alejandra nació en Tenochtitlán, sus padres se mudaron a la Ciudad de México cuando ella tenía solo dos años, junto con su hermana Graciela. A la edad de 5 años su padres fueron asesinados, hecho que a Alejandra no pareció afectarle, supongo que no tenía la edad suficiente para entender, además de que siempre estuvo bajo el ala de su hermana que siempre cuidaba de ella. A los 10 años comenzó a sentir una gran atracción por los hombres, por los hombres mayores cabe mencionar, y a medida en que creció también crecía el gusto por los mismos. También sus curvas se acentuaban, a la edad de 15 años era una niña voluptuosa con un rostro fino y redondo, piel suave y bronceada. Una lolita, robaba miradas a diario, miradas perversas, pensamientos impuros.
En el último año de secundaria se dio cuenta que su sola presencia perturbaba la mente y deseos de los que la miraban, y que tenía beneficios solo por ser bella.
Decidió entonces aprovecharse de los hombres de mente débil y cartera fácil, comenzaba por cambiar besos por algún regalo, o la simple compañía de un tipo con auto deslumbrante le bastaba para aumentar su autoestima. A los 17 años se decidió por ser prostituta, era un buen trato, el sexo era algo que le encantaba y si a cambio recibía a dinero, no había más que pensar. Se convirtió en una bella prostituta, de alto nivel con ingresos que cualquiera envidiaría. Se empezaba a sentir bien, nunca sucia ni con la necesidad de tener esa profesión, siempre todo por amor al sexo (y al dinero). Es todo lo que se.
Yo la conocí en un bar del pueblo de San Julian, todo en ella era perfecto, incluso la punta del dedo anular faltante en la mano derecha, el cual había perdido al tratar de componer su bicicleta cuando tenía 8 años. Su cabello rizado y largo, sus caderas que terminaban en unas enormes nalgas, un bronceado permanente y una mirada profunda. Si a eso le agregamos el tono sensual de su voz, era una combinación ganadora. Tenía que ser mía. Me acerqué, tome asiento junto a ella en la barra, y noté que usaba su celular y soltó una carcajada –perdona que me meta pero, veo que estas jugando. - Si, es muy divertido y además así me pongo en contacto con nuevos clientes- . ¿clientes?- Soy dama de compañía .- Oh! Prostituta diría yo- cómo quieras llamarlo,¿te interesa?. En ese instante trazó una línea fina con su dedo desde la rodilla hasta la punta de mi pene, -soy la mejor – menciono, sentí que acercó sus labios hacía mi oído, no logre interpretar las siguientes palabras, debido a que sentí que mi verga se comenzaba a endurecer, sudé. –Veo que te interesa amor, o por lo menos tu cuerpo me lo dice. Tome su mano y la alejé. Pedí una cerveza, la cual tardo más en llegar que en lo que vacíe el contenido, estaba listo. Pague la cuenta y nos largamos, cubrí mi erección con la gabardina, pero el roce con el pantalón y el hecho de observarla no reducían el efecto. Por fin en el taxi hacía mi departamento logré relajarme un poco, estaba decidido, mi primera vez estaba por venir, y sería con la mujer mas bella. En el camino me contó su pequeña historia. El trayecto fue tranquilo ella me contaba su vida y me abrazaba, decía que conmigo se sentía segura. Después de media hora llegamos, el alcohol hacía su trabajo y me beso a la entrada del edificio, con tan suavidad que me provoco robarle un suspiro con mis labios. Dando tumbos por el pasillo llegamos a mi puerta, la segunda del corredor. Cuando cerré la puerta, tomo mi gabardina, me lanzó hacia la puerta besando mi cuello y acariciando mi espalda con sus manos, me deje llevar mientras mordía mis gruesos labios –Es mi primera vez, trátame bien por favor. - Salió de mi boca, ella extrañada se detuvo, me miro a los ojos y metió la mano en mi pantalón, una nueva erección llegaba a mi miembro pero, esta vez sentía que explotaba cuando tomo mis pelotas con su mano, salí de mi cuerpo. – Estás mas que listo bebe. Necesito limpiarme, ¿dónde esta el baño?.
Mientras, tome rumbo a mi habitación y encendí algunas velas, siempre me ponen de buenas, me recosté en la cama a esperarla. Unos minutos más tarde entro a mi cuarto, se dejo caer a mi lado y me dijo que teníamos que hablar del precio, cerramos el trato. Inmediatamente después se quito la ropa lentamente, hasta quedar en solo la tanga roja que cubría el depilado brasileño que lucía ese día. En ese punto me levante, la abracé fuerte, como si fuera el fin del mundo, quería sentir que toda esa carne era para mi. Desabotoné mi camisa y ella besaba cada parte de mi torso yendo cada vez más hacia abajo, mi mano derecha fue directamente hacia su vagina, e introduje un dedo, ya estaba mojada, dejó escapar un suspiro seguido de una sonrisa. Cuando rondaba por mi abdomen, tomo mi pantalón junto con mi boxer y los bajo, dejando al descubierto mi erección, coloco sus manos alrededor, acariciándolo, también me encontraba mojado, recorrió mi falo con un dedo para luego llevárselo a la boca, justo antes de que su lengua probara por primera vez mi jugo, me miro diciendo que ese día se retiraba, asomándose un dejo de tristeza que rondó sus ojos.
Me observé en el espejo en el momento en que ella me la mamaba, su lengua jugueteaba con la punta mientras tomaba mis testículos con las manos. La levante, bese sus senos y arranque la tanga, mientras rozaba piel con mi glande, me recosté y ella se monto en mi de un solo sentón, la vida se me fue con la primera arremetida de su pelvis, era el cielo mismo disfrazado de infierno. Se aferraba a mi pecho haciéndome sentir su protector, yo tomaba sus redondos pechos poniendo sus duros pezones entre los dedos aprisionando un poco, se bajo de mi para colocarse en cuatro pidiéndome que entrará por detrás, la tome del cabello, la penetré poco a poco, centímetro a centímetro, jadeantes, sudorosos, los gemidos y los movimientos eran cada vez mas intensos. Después de algunos minutos, mordidas, rasguños, gritos termine dentro de ella con el alma viva y las piernas cansadas. El frenesí nos llevó al cansancio extremo, al derroche de oxitocina. Exhaustos perdimos la conciencia y nos quedamos dormidos.
La luz de la mañana hizo que despertara, los mareos eran algo a lo que estaba acostumbrado desde hace años, las voces me seguían guiando, el dolor en la espalda y el cuello no se desprendían de mí. Ahí estaba yo, de blanco, la sangre estaba en mis manos, Alejandra toco a mi puerta…hora de mi terapia.
The chinix
domingo, 10 de enero de 2010
Guerritas

Después de la agitación que provoca el correr cuarenta minutos, me detuve a respirar, en mi bosque, en mi porción de paz. Volví en el tiempo, a la infancia, cuando todo era jugar y vivir a pleno, sin preocupaciones. Apoyado en un tronco, mi mirada se fijó en un árbol, en el conjunto de ramas y hojas proyecté una tarde con mis cuates, pudo haber sido cualquier tarde, todas eran mágicas.
miércoles, 30 de diciembre de 2009
Sigo...
viernes, 18 de diciembre de 2009
Oscuridad
lunes, 14 de diciembre de 2009
Todo Tuyo
jueves, 10 de diciembre de 2009
Una mañana perversa
viernes, 27 de noviembre de 2009
Ejercicio nocturno
domingo, 25 de octubre de 2009
Domingo de clásico
miércoles, 21 de octubre de 2009
Jalón de orejas
martes, 13 de octubre de 2009
Día de contrastes
lunes, 12 de octubre de 2009
De nuevo
martes, 9 de octubre de 2007
Previo 7.
OpenGL nos permite elegir entre dos métodos de sombreado, de caras planas y suaves. Para elegir el método de sombreado, usaremos la función glShadeModel con parámetro GL_FLAT para caras planas, y GL_SMOOTH para el suave.
OpenGL, excepto cuando renderiza NURBS y otras funciones gráficas de alto nivel, no genera automáticamente normales, así que tenemos que especificárselas nosotros mismos.
Para especificar la normal actual, basta con hacer una llamada a la función glNormal3f(nx, ny, nz). A partir de ese momento, cualquier vértice que se renderice se supondrá que tiene como normal (nx, ny, nz)
Esta normal es deseable que esté normalizada.
Con el modo de sombreado suave activo, dependiendo de si definimos la misma normal para toda la carao para cada vértice, podemos obtener un sombreado de caras planas o de tipo gouraud. Para obtener un sombreado de tipo gouraud, bastan con definir a cada vértice la normal media de las caras a las que pertenece. Esto es especialmente interesante cuando queremos renderizar superficies curvas, mientras que para renderizar poliedros es más aconsejable asignar una única normal para todos los vértices de una misma cara.
2¿Qué es y cómo se declara y usa en OpenGL/GLUT
-Una fuente de luz?
-Un material?
-Una textura?
TEXTURAS
Cargando texturas en memoria
El proceso de cargar la textura en memoria, no es propio de OpenGL. Se tiene que realizar una función externa. Existen algunas limitaciones que la librería impone. Las dimensiones de todas las texturas que carguen tienen que ser potencias de 2, como por ejemplo 64x64, 128x64, etc.
Se tiene que tener en cuenta que si se debe estar dibujando en RGB, sin color indexado, o bien cargando texturas en formato RGB. Si se carga una imagen GIF, que tiene color indexado, se tiene que programar una función extra para convertirla a RGB.. Sea cuál sea el método, al final se tendrá un puntero a un segmento de memoria que contiene la imagen:
unsigned char *textura;
Es importante también guardar las propiedades de la textura, en concreto sus dimensiones de ancho y alto, así como su profundidad en bits. Si estamos trabajando en RGB, la profundidad será 24bits.
Los pasos a seguir son:
• Determinamos el tamaño
• Calculamos la memoria que será necesaria
• Reservamos memoria
• Generación de archivo TGA el cual viene en formato RGB. Si no está en este formato se deberá realizar la conversión.
Una vez tenemos la imagen cargada en memoria, los pasos a seguir son:
• Generar la referencia para la textura. [glGenTextures (1, &textura);] Con el GLuint textura referenciaremos a "esa textura". Si se quiere tener más, se debe crear un array de GLuint. El 1 significa que sólo generamos una textura.
• Referenciamos esa textura: [glBindTexture (GL_TEXTURE_2D, textura);]. Esta función dice que ahora en adelante, todas las operaciones que afecten al manejo de texturas se aplicarán sobre esa textura. En este caso es una etextura 2D
• Especificamos los filtros para esa textura:
o glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
• OpenGL puede aplicar filtros a las texturas para mejorar su visualización. La primer línea especifica el filtro a utilizar en caso de que las textura se vea más grande de lo que en realidad es (Aumento). La segunda, especifica el filtro para el caso de que la textura se vea más pequeña de lo que en realidad es. Aquí utilizamos un filtro LINEAR para el 1er caso y del segundo hablaremos más adelante. Otro valor que podríamos haber utilizado es el GL_NEAREST, que es un filtro peor pero más rápido
• Creamos la textura por medio de MIPMAPS para mejor rendimiento, en vez de filtrar las textura dinámicamente, al crear un mipmap, creamos varias texturas de diferentes tamaños (del original hacia más pequeño). OpenGL, decidirá en función de lo lejano que esté el objeto con esa textura, de qué mipmap utilizar.
• Por ultimo, sólo hace falta habilitar el empleo de texturas con:glEnable(GL_TEXTURE_2D);En la función init_gl.
TEXTURAS EN UNA SUPERFICIE
•Al mapear la imagen de textura sobre una superficie, los texels no se van a corresponder exactamente con los pixels
Magnificación : Si la superficie es mayor que la textura, cada pixel se corresponderá con un trozo pequeño de texel
Minificación : Si la superficie es menor que la textura, cada pixel se corresponderá con una conjunto de texels contiguos•
Texels
Pixeles
Modos de mapeo
•Para establecer el modo de mapeo:
• glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GLint valor)
• donde valor puede tomar 3 valores:
–GL_DECAL: el valor del texel se copia directamente al pixel
–GL_MODULATE: el valor del texel se escala por el color del objeto
–GL_BLEND: el valor del texel se usa para interpolar entre el color del objeto y un color constante definido para la textura, mediante la función
• glTexEnvfv(GL_TEXTURE_ENV,GL_TEXTURE_ENV_COLOR,GLfloat color[4])
MODOS DE APLICACIÓN DE TEXTURAS
GL TEXTURE WRAP S
Establece el parámetro wrap para la coordenada de textura s a GL_CLAMP, GL_CLAMP_TO_EDGE, o GL_REPEAT. GL_CLAMP causa que las coordenadas s estén limitadas al rango [0,1] y es útil para prevenir artefactos de envoltura (compresión?) cuando se mapea una única imagen en un objeto. GL_CLAMP_TO_EDGE causa que las coordenadas s se limiten al rango [1/2n, 1-(1/2n)i], donde n es el tamaño de la textura en la dirección del límite. GL_REPEAT causa que la parte entera de s se ignore; el GL utiliza solo la parte fraccionaria, creando por lo tanto un patrón repetitivo. Los elementos de textura de borde son accesados solo si la envoltura se establece a GL_CLAMP. Inicialmente, GL_TEXTURE¬_WRAP_S se establece a GL_REPEAT.
GL TEXTURE WRAP T
Establece el parámetro wrap para la coordenada de textura t a GL_CLAMP, GL_CLAMP_TO_EDGE, o GL_REPEAT (véase arriba). Inicialmente, GL_TEXTURE_WRAP_T se establece a GL_REPEAT.
3¿Cuales son los atributos/características que se pueden declarar en OpenGL/GLUT para manejo de:
-Luces
-Materiales
-Texturas
y con que funciones se hace esto?
En OpenGL se pueden definir tres formas de luz distintas, estas son: AMBIENTE, DIFUSA y ESPECULAR
AMBIENTE.- la luz llega de todas las direcciones de forma distribuida y es reflejada de igual forma por los polígonos de la escena.
DIFUSA.- la luz llega de una fuente puntual en particular y toca la superficie con una intensidad que depende de la cara hacia la cual llega la luz, este tipo de iluminación es la que mejor define el contorno en los objetos 3D
ESPECULAR.- es la luz emitida desde el objeto de forma distribuida en todas direcciones.
La luz tiene las propiedades de color, posición y dirección. El color que las luces tendrán esta determinado por las tres componentes de color que maneja OpenGL, rojo, verde y azul. El comando utilizado para especificar todas las propiedades de la luz es glLiht(), este comando tiene tres argumentos para identificar la luz que se está utilizando, la propiedad y el valor deseado para la propiedad.
Después de definir las características de las luces se encienden con el comando glEnable(nombre de la fuente de luz a activar). También existe una función para desactivar la iluminación, que es glDisable y desactiva la luz especificada.
Las características de la luz por default para glLight son:
GL_DIFFUSE Y GL_SPECULAR sólo se usan con la primera fuente de luz.
GL_AMBIENT: Define los valores de la luz ambiental. Valor RGBA, su valor por defecto es 0.0,0.0,0.0,1.0)
GL_DIFFUSE: Define los valores de la luz difusa. Valor RGBA. su valor por defecto es (1.0,1.0,1.0,1.0)
GL_SPECULAR: Define los valores de la luz especular. Valor RGBA. Su valor por defecto es (1.0,1.0,1.0,1.0)
GL_POSITION: Posición de la luz, en coordenadas { x, y, z, w }, su valor por defecto es (0.0,0.0,1.0,0.0)
GL_SPOT_DIRECTION: Vector de dirección de la luz, en coordenadas { x, y, z }, su valor por defecto es (0.0,0.0,-1.0)
GL_SPOT_EXPONENT: Representa la concentración de la intensidad de la luz. Valor escalar, por defecto 0.
GL_SPOT_CUTOFF: Ángulo del cono de luz. Valor escalar, por defecto 180.
GL_CONSTANT_ATTENUATION: Atenuación constante a aplicar a la luz según la distancia. Valor escalar, por defecto 1
GL_LINEAR_ATTENUATION: Atenuación lineal a aplicar a la luz según la distancia. Valor escalar, por defecto 0
GL_QUADRATIC_ATTENUATION: Atenuación cuadrática a aplicar a la luz según la distancia. Valor escalar, por defecto 0
La luz es un punto focal el cual ilumina los objetos en un cierto rango, es un punto muy definido y fácil de encontrar, en cambio la iluminación da una intensidad de luz en un rango más amplio dando la sensación de que no hay un punto focal donde la luz es emitida, la iluminación es un tipo de luz la cual no incide directamente en los objetos.
Para habilitar y deshabilitar a uno de los puntos de iluminación se utilizan los comandos glEnable(nombre_iluminación) y glDisable(nombre_iluminación). La fuente de luz es creada con glLightfv (GL_LIGHT0, GL_AMBIENT, luz ambiental);
Dependiendo de las propiedades de los materiales la luz tiene un efecto distinto sobre ellos.
Estas propiedades se definen con glMaterial:
void glMaterial(GLenum cara, GLenum nombre, TYPOparam);
El argumento cara, determina la cara del objeto en la que aplicamos las propiedades, tiene los siguientes valores:
GL_FRONT,GL_BACK,GL_FRONT_AND_BACK.
El siguiente indica la propiedad que va utilizarse para dicha cara, puede ser:
GL_AMBIENT, GL_DIFFUSE, GL_AMBIENT_AND_DIFFUSE, GL_SPECULAR, GL_SHININESS, GL_EMISSION, GL_COLOR_INDEXES.
El ultimo parámetro especifica un puntero al valor o valores que el parámetro nombre tomara.
• GL_AMBIENT .- color ambiente del material, sus valores por defecto son (0.2, 0.2, 0.2, 1.0).
• GL_DIFFUSE .- color difuso del material, sus valores por defecto son (0.8, 0.8, 0.8, 1.0).
• GL_AMBIENT_AND_DIFFUSE .- color ambiente y difuso del material
• GL_SHININESS.- exponente especular, su valor por defecto es 0.
• GL_EMISSION.- el color de emisión del material, sus valores por defecto son (0.0, 0.0, 0.0, 1.0).
• GL_COLOR_INDEXES.- índice de color ambiente, difuso y especular, sus valores por defecto son (0, 1, 1).
lunes, 24 de septiembre de 2007
Previo 6
El manejo de fuentes de texto es una de las partes débiles de OpenGL. Su implementación es complicada ya que la biblioteca GL sólo proporciona funciones muy primitivas para trazado de bitmaps que obligan a disponer de una librería propia de bitmaps para los caracteres. GLUT va un poco más allá y dispone de unas pocas funciones que permiten renderizar texto en pantalla.
GLUT resuelve un poco el dilema de usar texto en OpenGL. Proporciona glutBitmapCharacter, que traza un único carácter en la posiciçón especificada por glRasterPos. He añadido unas pocas funciones, drawString(), y drawStringBig() que hacen la vida un poco mejor al trazar cadenas de caracteres.
¿Cómo funcionan y cúales son los parámetros de los comandos ?
glutBitmapCharacter(*font vacío, carácter interno); Traza un único caracter en la posición especificada. Los parámetros son la fuente a usar, y el caracter que va a escribir.
glutStrokeCharacter(*font vacío, carácter interno); Rinde un carácter del movimiento que usa OpenG. Tiene los mismos parámetros que el anterior caso.
Escriba un programa que dibuje su nombre y numero de cuenta en la pantalla
void escribe(char * s)
{
int i;
for(i=0;
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18,s[i]);
}
void disp(void){
glClear(GL_COLOR_BUFFER_BIT);glFlush();
}
int main(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("TEXTO");
glClearColor(0.0,0.0,0.0,0.0);
glutDisplayFunc(disp);
glutMainLoop();
}
Reporte práctica 5
Es un diseño que se basa en la ocurrencia de eventos, es decir, esperar que el usuario realice una acción en la ventana (un click, oprimir una tecla, o el simple movimiento del raton), para que el programa interactue como respuesta a ese evento realizando una acción.
¿Qué utilidad tiene el manejo de eventos en el desarrollo de aplicaciones gráficas?
Los lenguajes visuales orientada al evento y con manejo de componentes dan al usuario que no cuenta con mucha experiencia en desarrollo, la posibilidad de construir sus propias aplicaciones utilizando interfaces gráficas sobre la base de ocurrencia de eventos.Para soportar este tipo de desarrollo interactuan dos tipos de herramientas, una que permite realizar diseños gráficos y , un lenguaje de alto nivel que permite codificar los eventos. Con dichas herramientas es posible desarrollar cualquier tipo de aplicaciones basadas en el entorno.
Escriba un programa en el cual se tomen las coordenadas y se dibuje un punto,
- Cada 2 puntos acumulados dibuje una línea
#include
#include
#include
using namespace std;
int point1[]={10,10};
int point2[]={50,50};
int click=0;
void onMouse(int button, int state, int x, int y)
{
if ( (button == GLUT_LEFT_BUTTON) && (state == GLUT_DOWN) ) {
click++;
if (click==1){
point1[0]=x;
point1[1]=y;
}
if (click==2){
point2[0]=x;
point2[1]=y;
glutPostRedisplay();
}
if (click==3){
point1[0]=x;
point1[1]=y;
click=1; }
if ( (button == GLUT_RIGHT_BUTTON) && (state == GLUT_DOWN) ) {
glClear(GL_COLOR_BUFFER_BIT);
}
}
}
void disp(void){
glutMouseFunc(onMouse);
glClear(GL_COLOR_BUFFER_BIT); // se limpia pantalla
glColor3f(110.0/255.0,191.0/255.0,116.0/255.0);
glBegin(GL_LINES); //para crear líneas
//dibujo de linea entre puntos
glVertex2f(-1.0+((float)point1[0]/250.0),1.0-((float)point1[1]/250.0));
glVertex2f(-1.0+((float)point2[0]/250.0),1.0-((float)point2[1]/250.0));
glEnd();
glFlush();
}
int main(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("LINEAS");
glClearColor(0.0,0.0,0.0,0.0);
glutDisplayFunc(disp);
glutMainLoop();
}
- Cada tres puntos acumulados dibuje un triangulo
#include
#include
#include
using namespace std;
int point1[]={10,10};
int point2[]={50,50};
int point3[]={10,50}
int click=0;
void onMouse(int button, int state, int x, int y)
{
if ( (button == GLUT_LEFT_BUTTON) && (state == GLUT_DOWN) ) {
click++;
if (click==1){
point1[0]=x;
point1[1]=y;
}
if (click==2){
point2[0]=x;
point2[1]=y;
glutPostRedisplay();
}
if(click==3){
point3[0]=x;
point3[1]=1;
glutPostRedisplay();
}
if (click==4){
point1[0]=x;
point1[1]=y;
click=1;
}
if ( (button == GLUT_RIGHT_BUTTON) && (state == GLUT_DOWN) ) {
glClear(GL_COLOR_BUFFER_BIT);
}
}
}
void disp(void){
glutMouseFunc(onMouse);
glClear(GL_COLOR_BUFFER_BIT); // se limpia pantalla
glColor3f(110.0/255.0,191.0/255.0,116.0/255.0);
glBegin(GL_LINES); //para crear líneas
//dibujo de linea entre puntos
glVertex2f(-1.0+((float)point1[0]/250.0),1.0-((float)point1[1]/250.0));
glVertex2f(-1.0+((float)point2[0]/250.0),1.0-((float)point2[1]/250.0));
glvertex2f(-1.0+((float)point3[0]/250.0),1.0-((float)point3[1]/250.0));
glEnd();
glFlush();
}
int main(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("LINEAS");
glClearColor(0.0,0.0,0.0,0.0);
glutDisplayFunc(disp);
glutMainLoop();
}
