miércoles, 31 de agosto de 2016


TIPOS DE TEXTURAS UTILIZADAS EN GRAFICACIÓN


El mapeo de las texturas es una parte fundamental de la graficación. Consiste en digitalizar un dibujo o una foto (o animación y vídeos) y "pegarla" a un polígono. Una vez conseguido esto, es necesario hacer una corrección de perspectiva. Es un proceso necesario para que los objetos mapeados parezcan realistas y consiste en cálculos matemáticos para asegurar que una textura converge correctamente en las partes de un objeto que están más alejadas del observador, si no se realiza esta tarea, los objetos se ven ondulados.

Otro aspecto importante en el mapeo de texturas es el filtrado, que sirve para que cada pixel tenga una textura diferente a los de su alrededor.

Los métodos más importantes son:


Filtrado Bilineal: Consiste en que la textura que se va a aplicar a un píxel sea una media de las de los pixeles que lo rodean en los ejes X Y.

Filtrado Trilineal: Consiste en un filtrado bilineal, pero ademas se hace una interpolación entre dos texturas empleadas para diferentes distancias. De esta manera, el cambio de una textura a otra es muy suave.

Filtrado Anisotrópico: Este es un filtrado trilineal que se aplica solamente a los objetos que estén visibles y no a toda la escena. De esta manera no se pierde velocidad.

´________________________________________________________________________________

SEMAFORO



CODIGO:

#include <GL/glut.h>
#include <GL/gl.h>
#include <math.h>

int rad=100;
double ang=0,a=0,b=0,c=0,d=0,e=0,f=0,g=0;
void inicializa(void)
{
    glClearColor(1.0,1.0,1.0,1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-815.0, 1300.0, -615.0, 700.0);
}
void circuloc(int x, int y, int t, int radio)
{
    int angulo=0;
    glPointSize(t);
    glBegin(GL_POINTS);
    glVertex2f(x,y);
    for (angulo=0;angulo<=360; angulo+=1){ glVertex2f(x + sin(angulo) *radio, y + cos(angulo) * radio);}
    glEnd();
}
void circulo(int x, int y, int radio)
{
    int angulo=0;
    glBegin(GL_TRIANGLE_FAN);
    glVertex2f(x,y);
    for (angulo=0;angulo<=360; angulo++)
    {
        glVertex2f(x + sin(angulo) *radio, y + cos(angulo) * radio);
    }
    glEnd();
}
void dibuja(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_QUADS);
    glColor3f(0.0 , 0.0 , 0.0);
    glVertex2i(170,437);
    glVertex2i(320,437);
    glVertex2i(320,182);
    glVertex2i(170,182);
    glVertex2i(229,183);
    glColor3f(5.0 , 9.0 , 3.0);
    glVertex2i(260,183);
    glVertex2i(260,-193);
    glVertex2i(229,-193);

    glEnd();

    glColor3f(0.0,0.0,0.0);
    circulo(247,226,34);

    glColor3f(0.0,0.0,0.0);
    circulo(247,302,34);

    glColor3f(0.0,0.0,0.0);
    circulo(247,381,34);
    a=a+1; //velocidad
    for(int j=1;j<=10000000;j++){}//pausa
    if(a>1 && a<20)
    {
        glColor3f(1.0,0.0,0.0);
        circulo(247,381,34);
    }
    if(a>20 && a<40)
    {
        glColor3f(0.0,1.0,0.0);
        circulo(247,226,34);
    }
    if(a>40 && a<50)
    {
        glColor3f(1.0,1.0,0.0);
        circulo(247,302,34);
    }
    if(a>55 && a<50)
    {
        glColor3f(1.0,1.0,0.0);
        circulo(247,302,34);
    }
    if(a>60 && a<55)
    {
        glColor3f(1.0,1.0,0.0);
        circulo(247,302,34);
    }
    if(a>60)
    {
        a=0;
    }
    glFlush();
    glutSwapBuffers();
}
int main (int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA| GLUT_DEPTH);    glutInitWindowSize(500,500);
    glutInitWindowPosition(15,10);
    glutCreateWindow("Ventana");
    inicializa();
    glutDisplayFunc(dibuja);
    glutIdleFunc(dibuja);
    glutMainLoop();
    return 0;
}

_________________________________________________________________________________

FOCO Y VENTILADOR

No hay comentarios:

Publicar un comentario