Objetos con texturas OpenGL [Delphi 7]

Buenas noches!, en esta entrada veremos ahora como aplicar texturas a nuestros objetos en OpenGL asi usando una librería casera para poder facilitar el uso de la aplicación de texturas. Tal vez esta librería no es un poco efectiva pero sirve para acentar bases.

Primero que nada y como post anteriores, yo uso delphi 7 y estas librerias son las que uso OpenGL, Glut(API,DLL), Geometry y esta es la libreria para aplicar las  texturas.

Para comenzar vamos a crear nuestro contexto como lo hemos hecho en los 2 posts anteriores, creando varios eventos(OnCreate,OnDestroy,OnPaint,OnResize) asi que les pido porfavor que vean este post para crear el contexto hasta antes de comenzar a dibujar, o si bien quieren descargar este proyecto que contiene todas las librerias y el codigo necesario que se ha visto en post anteriores ( el proyecto esta listo para comenzar este post, recomiendo mejor que lo bajen)

Para comenzar pues haremos algo sencillo como una esfera texturizada:

La textura que se va a utilizar es importante que sea de tamaño de múltiplos de 2 debido a que así fue programada la librería casera, osea la imagen debe de ser BMP 64×64  o 128×128  descargar textura

Para comenzar en nuestro proyecto donde ya agregamos todas las librerias (OpenGL,Glut,Texturas) en el uses, o en dado caso que descargamos el proyecto que les proporcione, agregamos al uses la libreria texturas y declaramos una variable privada de la clase TTexture

  private
    { Private declarations }
      RC : HGLRC; //declaradas anteriormente
      Angle : Integer; // declaradas anteriormente
      Textura:TTextura; // variable tipo TTextura

La manera de que cargaremos nuestras texturas del disco duro sera de una manera nada peculiar, lo que haremos es cargar un TImage a nuestro form y ahi le cargaremos la textura, y de ese TImage agarraremos la textura ya cargada para asi ya aplicarla a nuestro objetos. Entonces agregamos un TImage a nuestro form de la siguiente manera:

al TImage en la propiedad Visible le ponemos False para que no afecte a nuestro contexto.

Ahora tenemos que inicializar este objeto, y lo haremos en el evento onCreate de nuestro form

     textura:=TTextura.Create;
     textura.Cargarde(Image1.Picture.Bitmap);
     textura.Definicion:=dAlta;
     textura.ModeEnv:=GL_DECAL;

Establecemos la imagen que proviene del Image1 y la definicion de la textura (dAlta,dMedia,dBaja)
y tambien en el evento onDestroy destruimos la textura

textura.free;

Ahora ya es hora de empezar a usar nuestra textura, en el evento onPaint antes del comentario //Aqui podremos dibujar lo que queramos, pondremos lo siguiente que sera habilitar las texturas:

  //Configuracion de las texturas
  glEnable(GL_TEXTURE_GEN_S);
  glEnable(GL_TEXTURE_GEN_T);
  glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR) ;
  glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR) ;
  //fin config tex

con glTextGeni establecemos el tipo de generación de coordenadas de nuestra textura, en este caso establecemos respecto al objeto, esto significa que la textura estará totalmente adherida a nuestro objeto
y ahora si comenzaremos a dibujar despues del comentario //Aqui podremos etc…

  //Aqui podremos dibujar lo que queramos
 glTranslatef(0,0,-5);
 glRotatef(angle*2,0,1,0);
 glTranslatef(0,0,0.5);
 textura.UsaTextura; //hacemos uso de nuestra textura
 glutSolidSphere(1,20,20);

Podemos correr nuestra aplicacion y tendremos ahora una esfera totalmente texturizada con metal!.. Si recuerdan el post anterior y este, si los combinamos podremos ahora hacer un sistema solar simple!
Espero y les sea de utilidad o les entretenga en un rato!
Code4Fun!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s