SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Akademy-es 2011

Introducción a las librerías
   Pygame y PyOpenGL
¿Qué necesitamos?(1)

La presentación:
 goo.gl/3psq1


   El código:
goo.gl/6AD1A
¿Qué necesitamos?(2)

● Tener Python instalado en nuestro sistema. Por lo general
  viene incluido en prácticamente todas las distros de Linux
  populares.
● Tener instaladas las librerías Pygame y PyOpenGL

 Ejemplo en Ubuntu:
       ● sudo apt-get install python-pygame python-opengl freeglut3-dev
                                       ●
● O usando las setuptools de Python:
●
                         ● sudo easy_install pygame
                         ● sudo easy_install pyopengl
¿Qué son Pygame y PyOpenGL?

                Ambas son librerías gráficas




● procesado de gráficos 2D   ● Manejo de gráficos 3D
● Gestor de ventanas         ● Procesamiento matemático
● Manejo de eventos            3D interno
● Sonido
● ...
Nuestros Objetivos

Conseguir crear un pequeño programa en python que use
                  pygame y pyopengl
Inclusiones

#Importamos las nuevas librerias
import pygame
from pygame.locals import *

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GL.shaders import *

#Definimos el ancho y largo de nuestra ventana
WIDTH = 600
HEIGHT = 600
Inicializando Pygame

def init():
  #inicializamos pygame
  pygame.init()

  #creamos una pantalla de WIDTHxHEIGHT pixeles que use doblebuffer,
  #que se pueda redimensionar y que acepte opengl
  flags = DOUBLEBUF|OPENGL
  screen = pygame.display.set_mode((WIDTH, HEIGHT), flags)
El método main(1)
El método main(2)

#Metodo main
def main():
  running = True
  init()

  while running:
    for event in pygame.event.get():
       if event.type == QUIT:
          running = False

  pygame.quit()

#Llamamos al metodo main
main()
La función init_gl

def init_gl():
  #Cada vez que se dibuja la escena esta se borra enteramente
  #glClearColor y ClearDepth definen el color y la profundidad
  #del borrado
  glClearColor(0.0,0.0,0.0,1.0);
  glClearDepth(1.0);
La función resize_glscene

def resize_glscene(w,h):
  #Especifica el tamaño de la ventana para OPENGL
  #Aunque la ventana física tenga ciertas dimensiones
  #podemos hacer que las de OpenGL no coincidan con
  #estas.
  glViewport(0,0,w,h);

  #Se establece la matriz de proyeccion como la identidad
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();

  gluPerspective(45.0, float(w)/float(h), 0.1, 100.0);

  #Se establece la matriz de modelado como la identidad
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
Dibujando la escena
                                La función draw_scene(1)
vertices = (GLfloat * (4*4))(
  1.0, 1.0, 0.0, 1.0,
  1.0,-1.0, 0.0, 1.0,
  -1.0,-1.0, 0.0, 1.0,
  -1.0, 1.0, 0.0, 1.0)

def draw_scene():
  #Limpiamos la pantalla
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  #Colocamos la matriz identidad
  glLoadIdentity();
  #Movemos en el eje Z (profundidad) 6 puntos hacia atras
  glTranslatef(0.0, 0.0, -6.0);
Dibujando la escena:
             Definiendo tipos en Python(1)
● Definiremos una variable de un tipo determinado tal y como
  lo haríamos en C
● Al igual que hacemos en C podemos crear arrays de esos
  tipos
● ¿Por qué hacer esto?
  PyOpenGL sólo acepta parámetros dados de esta forma
  en algunas de sus funciones
Dibujando la escena:
Definiendo tipos en Python(2)




               Nota:
               En C sería algo como
               GLfloat vertices[4*4]
Coordenadas Homogéneas

Todo punto del espacio con coordenadas (x,y,z) se puede
expresar en coordenadas homogéneas como (x,y,z,1)

Estas tienen su utilidad ya que la mayoría de los cambios
sobre los puntos como rotaciones, traslaciones,... se expresan
como matrices 4x4

                  Click para más información
El código siguiente puede no funcionar
 dependiendo de la tarjeta gráfica que
    se tenga o los drivers instalados
Dibujando la escena:
                                   La función draw_scene(2)
  #Pasa a OpenGL los datos almacenados en vertices y le asignamos
  #el identificador 0
  glVertexAttribPointer(0, 4, GL_FLOAT, 1, 0, vertices);
  #Activamos este atributo con identificador 0
  glEnableVertexAttribArray(0);

  #Dibujamos, usando cuadrados, los vertices en el orden 0,1,2,3
  glDrawElements(GL_QUADS, len(faceIndex), GL_UNSIGNED_SHORT, faceIndex);

  #Desactivamos este atributo
  glDisableVertexAttribArray(0);

...
def main():
  ...
  #Le decimos al programa que en el identificador 0 posicionaremos
  #los datos para la variable "position" del shader
  glBindAttribLocation(program, 0, "position");
  ...
Dibujando la escena:
La función glVertexAttribPointer
Dibujando la escena:
La función glDrawElements
¿Qué son los shaders?

 ● A groso modo son programas que se ejecutan en la
   GPU
 ● Existen varios lenguajes de alto nivel para programar
   Shaders. Por ejemplo:
    ○ GLSL (OpenGL Shading Language, desarrollado por
      el grupo Khronos)
    ○ HLSL (High Level Shading Language, desrrollado por
      Microsoft)
    ○ Cg (C for Graphics, desarrollado por Nvidia)

Nosotros centraremos en GLSL
Estructura de un programa en GLSL

Tendremos dos fuentes distintos:



Tipos de datos definidos:
             float, vec3, vec4, mat4,...

Tipos de entrada/salida de datos:
            attribute, uniform y varying
El Vertex Shader

● Opera sobre cada vértice
● Control total sobre lo que pasa
  en los vértices
● Se usa para:
   ○ Transformaciones en los
      vértices (Rotaciones,
      traslaciones, ...)
   ○ Transformaciones en las
      normales
   ○ Iluminación
   ○ Coordenadas de las
      texturas
   ○ ...
El Fragment Shader

● Opera sobre cada pixel (No los
  de la pantalla, sino de los de
  cada figura)
● Se usa para:
   ○ Controlar los efectos sobre
      la imagen
   ○ Iluminación y sombras
   ○ ...
Attributes, Uniforms y varyings

● Attributes:
  Son datos de entrada y salida que varían para cada vértice en
  cada rendering.
  Por ejemplo: Las coordenadas de los vertices o las normales son
  específicas de cada vértice
● Uniforms:
  Son datos de entrada y salida que se mantienen iguales para
  todos los vértices en cada rendering.
  Por ejemplo: la posición de una luz, una cierta matriz de
  transformaciones que queramos aplicar a todos los vértices,...
● Varyings:
  Son usados para comunicar datos entre el Vertex Shader y el
  Fragment Shader.
  Son variables de únicamente lectura en el FS y de lectura y
  escritura en el VS.
  Además han de ser declarados tanto en el VS como en el FS
Creación de un programa:
          Pasos a seguir
Creación de un programa:
                       función load_shaders (1)
def load_Shaders(vsFileName, fsFileName):
    #creamos un identificador del programa
    program = glCreateProgram();

    #leemos el contenido de los ficheros
    vsSource = open(vsFileName, 'r').read()
    fsSource = open(fsFileName, 'r').read()

    #creamos unos identificadores de los shaders y les
    #asociamos su codigo
    vsShader = glCreateShader(GL_VERTEX_SHADER);   #Vertex Shader
    glShaderSource(vsShader, vsSource);

    fsShader = glCreateShader(GL_FRAGMENT_SHADER); #Fragment
Shader
    glShaderSource(fsShader, fsSource);
Creación de un programa:
                   función load_shaders (2)
#Compilamos los shaders
glCompileShader(vsShader);
glCompileShader(fsShader);

#Adjuntamos los shaders al programa
glAttachShader(program, vsShader);
glAttachShader(program, fsShader);

#Enlazamos el programa
glLinkProgram(program);

return program
Escribiendo el Vertex Shader

void main() {
  gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;

}


    ● Siempre debemos escribir en el VS el valor de gl_Position
      Define la posición final del vértice
    ● gl_ModelViewProjectionMatrix aplica las matrices de
      proyección y modelado.
      La de proyección viene dada en resize_glscene, la de
      modelado ha cambiado a lo largo del programa
    ● gl_Vertex toma los valores dados en el canal 0 de
      glVertexAttribPointer
Escribiendo el Fragment Shader

void main() {
  gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}


   ● Siempre debemos escribir en el FS el valor de gl_FragColor.
     Define el color final del pixel o fragmento.
   ● Lo coloreamos con el valor (1.0,1.0,1.0,1.0) que es blanco
     en RGBA
La importancia de las funciones
                    glGet(Attrib/Uniform)Location
Problema: Al cambiar el índice en glVertexAttribArray deja de
dibujar el cuadrado.
Solución: Dejar la elección del índice a OpenGL
def main():
  ...
  #Solicitamos la posición de la variable "position"
  position = glGetAttribLocation(program, "position");
  #Se la asignamos con bind
  glBindAttribLocation(program, position, "position");


def draw_scene(position):
  ...
  glVertexAttribPointer(position, 4, GL_FLOAT, 1, 0, vertices);
  glEnableVertexAttribArray(position);
  glDisabelVertexAttribArray(position);
Tareas pendientes

● Añadir en el VS la variable de atributo de position
● ¿Como localizar la posición de las variables Uniforms?
● Hacer algo más divertido que un cuadrado

                Ampliando conocimientos:
                      goo.gl/2yXhc
¡GRACIAS POR VENIR!

     Nos vemos en Twitter!




                        Aarón Negrín Santamaría

Mais conteúdo relacionado

Mais procurados

Transformada fourier corina_martinez
Transformada fourier corina_martinezTransformada fourier corina_martinez
Transformada fourier corina_martinezcormartinez
 
Imagen Filtrado Frecuencial
Imagen Filtrado FrecuencialImagen Filtrado Frecuencial
Imagen Filtrado FrecuencialOmar Sanchez
 
Integrales multiples
Integrales multiplesIntegrales multiples
Integrales multiplesTensor
 
Manual de Configuracion de SASL
Manual de Configuracion de SASLManual de Configuracion de SASL
Manual de Configuracion de SASLK-milo Rivera
 
9. el ancho de banda
9. el ancho de banda9. el ancho de banda
9. el ancho de bandaJhon Barrera
 
Transmisión por modulación de amplitud2
Transmisión por modulación de amplitud2Transmisión por modulación de amplitud2
Transmisión por modulación de amplitud2Marco Mendoza López
 
EJERCICIOS BUCLES REPETITIVOS LENGUAJE C
EJERCICIOS BUCLES REPETITIVOS LENGUAJE CEJERCICIOS BUCLES REPETITIVOS LENGUAJE C
EJERCICIOS BUCLES REPETITIVOS LENGUAJE CGato Rivitas
 
Tableau Public en HHBA - Agosto 2012
Tableau Public en HHBA - Agosto 2012Tableau Public en HHBA - Agosto 2012
Tableau Public en HHBA - Agosto 2012lndata
 
12962797 ccna-3-v-40-exploration-examen-final-modulo-3-50-preguntas (1)
12962797 ccna-3-v-40-exploration-examen-final-modulo-3-50-preguntas (1)12962797 ccna-3-v-40-exploration-examen-final-modulo-3-50-preguntas (1)
12962797 ccna-3-v-40-exploration-examen-final-modulo-3-50-preguntas (1)Connections Systems
 
Investigacion rip versión 2
Investigacion rip versión 2Investigacion rip versión 2
Investigacion rip versión 2Michael Cm
 

Mais procurados (17)

Transformada fourier corina_martinez
Transformada fourier corina_martinezTransformada fourier corina_martinez
Transformada fourier corina_martinez
 
Detector sincrono
Detector sincronoDetector sincrono
Detector sincrono
 
Imagen Filtrado Frecuencial
Imagen Filtrado FrecuencialImagen Filtrado Frecuencial
Imagen Filtrado Frecuencial
 
Integrales multiples
Integrales multiplesIntegrales multiples
Integrales multiples
 
Manual de Configuracion de SASL
Manual de Configuracion de SASLManual de Configuracion de SASL
Manual de Configuracion de SASL
 
9. el ancho de banda
9. el ancho de banda9. el ancho de banda
9. el ancho de banda
 
Labo fragmentación ip.
Labo fragmentación ip.Labo fragmentación ip.
Labo fragmentación ip.
 
Transmisión por modulación de amplitud2
Transmisión por modulación de amplitud2Transmisión por modulación de amplitud2
Transmisión por modulación de amplitud2
 
EJERCICIOS BUCLES REPETITIVOS LENGUAJE C
EJERCICIOS BUCLES REPETITIVOS LENGUAJE CEJERCICIOS BUCLES REPETITIVOS LENGUAJE C
EJERCICIOS BUCLES REPETITIVOS LENGUAJE C
 
Tableau Public en HHBA - Agosto 2012
Tableau Public en HHBA - Agosto 2012Tableau Public en HHBA - Agosto 2012
Tableau Public en HHBA - Agosto 2012
 
Fundamentos de VoIP con Tecnología Cisco
Fundamentos de VoIP con Tecnología CiscoFundamentos de VoIP con Tecnología Cisco
Fundamentos de VoIP con Tecnología Cisco
 
12962797 ccna-3-v-40-exploration-examen-final-modulo-3-50-preguntas (1)
12962797 ccna-3-v-40-exploration-examen-final-modulo-3-50-preguntas (1)12962797 ccna-3-v-40-exploration-examen-final-modulo-3-50-preguntas (1)
12962797 ccna-3-v-40-exploration-examen-final-modulo-3-50-preguntas (1)
 
Introducción a Javascript I
Introducción a Javascript IIntroducción a Javascript I
Introducción a Javascript I
 
Guía de Código de Linea
Guía de Código de LineaGuía de Código de Linea
Guía de Código de Linea
 
Proceso estocastico
Proceso estocasticoProceso estocastico
Proceso estocastico
 
Investigacion rip versión 2
Investigacion rip versión 2Investigacion rip versión 2
Investigacion rip versión 2
 
Shell sort
Shell sortShell sort
Shell sort
 

Destaque

Minecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines with Pyglet - PyCon UKMinecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines with Pyglet - PyCon UKRichard Donkin
 
Python científico (introducción a numpy y matplotlib))
Python científico (introducción a numpy y matplotlib))Python científico (introducción a numpy y matplotlib))
Python científico (introducción a numpy y matplotlib))kikocorreoso
 
Asafa Powell Double X El Hombre Mas Veloz Del Mundo Double X
Asafa Powell Double X El Hombre Mas Veloz Del Mundo Double XAsafa Powell Double X El Hombre Mas Veloz Del Mundo Double X
Asafa Powell Double X El Hombre Mas Veloz Del Mundo Double Xdelfinotrevino
 
Peña nieto infiltra el ieem
Peña nieto infiltra el ieemPeña nieto infiltra el ieem
Peña nieto infiltra el ieemPedro Guadiana
 
Boletin riate n2_7
Boletin riate n2_7Boletin riate n2_7
Boletin riate n2_7gmsrosario
 
I link, I like - Connectivism: Lernen in der Cloud - das Modell der Zukunft?
I link, I like - Connectivism: Lernen in der Cloud - das Modell der Zukunft?I link, I like - Connectivism: Lernen in der Cloud - das Modell der Zukunft?
I link, I like - Connectivism: Lernen in der Cloud - das Modell der Zukunft?Hochschule Weserbergland
 
Aging, Mental Retardation and Physical Fitness
Aging, Mental Retardation and Physical FitnessAging, Mental Retardation and Physical Fitness
Aging, Mental Retardation and Physical FitnessGeoAnitia
 
Sentencia Final Tribunal Permanente de los Pueblos (TPP) Mexico 2014
Sentencia Final Tribunal Permanente de los Pueblos (TPP) Mexico 2014Sentencia Final Tribunal Permanente de los Pueblos (TPP) Mexico 2014
Sentencia Final Tribunal Permanente de los Pueblos (TPP) Mexico 2014Jack Fante
 
Asturias rutas y sendas de asturias
Asturias   rutas y sendas de asturiasAsturias   rutas y sendas de asturias
Asturias rutas y sendas de asturiasJuan Ignacio B.
 
Jernej petrin (studio moderna) including online_channels_into_multichannel_st...
Jernej petrin (studio moderna) including online_channels_into_multichannel_st...Jernej petrin (studio moderna) including online_channels_into_multichannel_st...
Jernej petrin (studio moderna) including online_channels_into_multichannel_st...Društvo za marketing Slovenije
 
General presentation Luxembourg BioHealth Cluster
General presentation Luxembourg BioHealth ClusterGeneral presentation Luxembourg BioHealth Cluster
General presentation Luxembourg BioHealth ClusterLuxBioHealth
 

Destaque (20)

Minecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines with Pyglet - PyCon UKMinecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines with Pyglet - PyCon UK
 
Python científico (introducción a numpy y matplotlib))
Python científico (introducción a numpy y matplotlib))Python científico (introducción a numpy y matplotlib))
Python científico (introducción a numpy y matplotlib))
 
Asafa Powell Double X El Hombre Mas Veloz Del Mundo Double X
Asafa Powell Double X El Hombre Mas Veloz Del Mundo Double XAsafa Powell Double X El Hombre Mas Veloz Del Mundo Double X
Asafa Powell Double X El Hombre Mas Veloz Del Mundo Double X
 
Peña nieto infiltra el ieem
Peña nieto infiltra el ieemPeña nieto infiltra el ieem
Peña nieto infiltra el ieem
 
Boletin riate n2_7
Boletin riate n2_7Boletin riate n2_7
Boletin riate n2_7
 
Presentación1 lina mayde
Presentación1 lina maydePresentación1 lina mayde
Presentación1 lina mayde
 
PortlandVancouveroffice Brochure
PortlandVancouveroffice BrochurePortlandVancouveroffice Brochure
PortlandVancouveroffice Brochure
 
I link, I like - Connectivism: Lernen in der Cloud - das Modell der Zukunft?
I link, I like - Connectivism: Lernen in der Cloud - das Modell der Zukunft?I link, I like - Connectivism: Lernen in der Cloud - das Modell der Zukunft?
I link, I like - Connectivism: Lernen in der Cloud - das Modell der Zukunft?
 
Aging, Mental Retardation and Physical Fitness
Aging, Mental Retardation and Physical FitnessAging, Mental Retardation and Physical Fitness
Aging, Mental Retardation and Physical Fitness
 
LA CRÓNICA 699
LA CRÓNICA 699LA CRÓNICA 699
LA CRÓNICA 699
 
Sentencia Final Tribunal Permanente de los Pueblos (TPP) Mexico 2014
Sentencia Final Tribunal Permanente de los Pueblos (TPP) Mexico 2014Sentencia Final Tribunal Permanente de los Pueblos (TPP) Mexico 2014
Sentencia Final Tribunal Permanente de los Pueblos (TPP) Mexico 2014
 
OFERTAS HISVE ENERO
OFERTAS HISVE ENEROOFERTAS HISVE ENERO
OFERTAS HISVE ENERO
 
Franchise Times 2008 Top 200
Franchise Times 2008 Top 200Franchise Times 2008 Top 200
Franchise Times 2008 Top 200
 
Jornal OJE edição 14ABR15
Jornal OJE edição 14ABR15Jornal OJE edição 14ABR15
Jornal OJE edição 14ABR15
 
Asturias rutas y sendas de asturias
Asturias   rutas y sendas de asturiasAsturias   rutas y sendas de asturias
Asturias rutas y sendas de asturias
 
Mkpv álvaro
Mkpv álvaro Mkpv álvaro
Mkpv álvaro
 
Jernej petrin (studio moderna) including online_channels_into_multichannel_st...
Jernej petrin (studio moderna) including online_channels_into_multichannel_st...Jernej petrin (studio moderna) including online_channels_into_multichannel_st...
Jernej petrin (studio moderna) including online_channels_into_multichannel_st...
 
General presentation Luxembourg BioHealth Cluster
General presentation Luxembourg BioHealth ClusterGeneral presentation Luxembourg BioHealth Cluster
General presentation Luxembourg BioHealth Cluster
 
MANAGING_ECO_DRIVING_20160218a
MANAGING_ECO_DRIVING_20160218aMANAGING_ECO_DRIVING_20160218a
MANAGING_ECO_DRIVING_20160218a
 
DGLR Membership
DGLR MembershipDGLR Membership
DGLR Membership
 

Semelhante a Introducción a las librerías PyGame y PyOpenGL

Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez Mery_Angie_Ugalde
 
Intro opengl
Intro openglIntro opengl
Intro openglsispro
 
Practicas OpenglC++
Practicas OpenglC++Practicas OpenglC++
Practicas OpenglC++jesicecytem
 
Manual de practicas de Open GL
Manual de practicas de Open GLManual de practicas de Open GL
Manual de practicas de Open GLAlincita Simon
 
Proyecto de reneya terminado
Proyecto de reneya terminadoProyecto de reneya terminado
Proyecto de reneya terminadojesicecytem
 
Proyecto de reneya terminado
Proyecto de reneya terminadoProyecto de reneya terminado
Proyecto de reneya terminadoKaren_Avilaa
 
Open gl tutorial diana hernandez 303
Open gl tutorial diana hernandez 303Open gl tutorial diana hernandez 303
Open gl tutorial diana hernandez 303Pablo Solis
 
Manual de practicas segundo parcial
Manual de practicas segundo parcialManual de practicas segundo parcial
Manual de practicas segundo parcialGuillermo Mendoza
 
Programación Open GL ES en iPhone e iPod touch
Programación Open GL ES en iPhone e iPod touchProgramación Open GL ES en iPhone e iPod touch
Programación Open GL ES en iPhone e iPod touchBlogintosh
 
Renderización en java
Renderización en javaRenderización en java
Renderización en javaaleja0940
 
Manual de Practicas de Open GL con Dev C++
Manual de Practicas de Open GL con Dev C++Manual de Practicas de Open GL con Dev C++
Manual de Practicas de Open GL con Dev C++Alincita Simon
 
Api java 2D
Api  java 2DApi  java 2D
Api java 2DESPOL
 

Semelhante a Introducción a las librerías PyGame y PyOpenGL (20)

Estela y naye
Estela y nayeEstela y naye
Estela y naye
 
Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez
 
Intro opengl
Intro openglIntro opengl
Intro opengl
 
Practicas OpenglC++
Practicas OpenglC++Practicas OpenglC++
Practicas OpenglC++
 
Manual de practicas de Open GL
Manual de practicas de Open GLManual de practicas de Open GL
Manual de practicas de Open GL
 
Proyecto de reneya terminado
Proyecto de reneya terminadoProyecto de reneya terminado
Proyecto de reneya terminado
 
Proyecto de reneya terminado
Proyecto de reneya terminadoProyecto de reneya terminado
Proyecto de reneya terminado
 
Manual de actividades
Manual de actividadesManual de actividades
Manual de actividades
 
Mini introopengl
Mini introopenglMini introopengl
Mini introopengl
 
Open gl tutorial diana hernandez 303
Open gl tutorial diana hernandez 303Open gl tutorial diana hernandez 303
Open gl tutorial diana hernandez 303
 
Iniciación a OpenGL
Iniciación a OpenGLIniciación a OpenGL
Iniciación a OpenGL
 
Ogre Game Engine
Ogre Game EngineOgre Game Engine
Ogre Game Engine
 
Manual de practicas segundo parcial
Manual de practicas segundo parcialManual de practicas segundo parcial
Manual de practicas segundo parcial
 
Opengl
OpenglOpengl
Opengl
 
Programación Open GL ES en iPhone e iPod touch
Programación Open GL ES en iPhone e iPod touchProgramación Open GL ES en iPhone e iPod touch
Programación Open GL ES en iPhone e iPod touch
 
Renderización en java
Renderización en javaRenderización en java
Renderización en java
 
Introduccion al OpenGL
Introduccion al OpenGLIntroduccion al OpenGL
Introduccion al OpenGL
 
Manual de Practicas de Open GL con Dev C++
Manual de Practicas de Open GL con Dev C++Manual de Practicas de Open GL con Dev C++
Manual de Practicas de Open GL con Dev C++
 
Renee opengl karla
Renee opengl karlaRenee opengl karla
Renee opengl karla
 
Api java 2D
Api  java 2DApi  java 2D
Api java 2D
 

Mais de kdeespana

Desarrollando software libre sin ser informático akademy es 2017
Desarrollando software libre sin ser informático akademy es 2017Desarrollando software libre sin ser informático akademy es 2017
Desarrollando software libre sin ser informático akademy es 2017kdeespana
 
Slimbook - Welcome to Freedom - Akademy-es 2017
Slimbook - Welcome to Freedom - Akademy-es 2017Slimbook - Welcome to Freedom - Akademy-es 2017
Slimbook - Welcome to Freedom - Akademy-es 2017kdeespana
 
valgrind y ASAN Dos formas de instrumentar código en busca de errores
valgrind y ASAN Dos formas de instrumentar código en busca de erroresvalgrind y ASAN Dos formas de instrumentar código en busca de errores
valgrind y ASAN Dos formas de instrumentar código en busca de erroreskdeespana
 
KDE España: Qué es y para que sirve
KDE España: Qué es y para que sirve KDE España: Qué es y para que sirve
KDE España: Qué es y para que sirve kdeespana
 
Qtquick, interfaces con animaciones fluídas en Qt5
Qtquick, interfaces con animaciones fluídas en Qt5Qtquick, interfaces con animaciones fluídas en Qt5
Qtquick, interfaces con animaciones fluídas en Qt5kdeespana
 
Descubre plasma 5, el escritorio de la Comunidad KDE
Descubre plasma 5, el escritorio de la Comunidad KDEDescubre plasma 5, el escritorio de la Comunidad KDE
Descubre plasma 5, el escritorio de la Comunidad KDEkdeespana
 
Clazy, mejorando tu código en tiempo de compilación
Clazy, mejorando tu código en tiempo de compilaciónClazy, mejorando tu código en tiempo de compilación
Clazy, mejorando tu código en tiempo de compilaciónkdeespana
 
La potencia del Terminal
La potencia del TerminalLa potencia del Terminal
La potencia del Terminalkdeespana
 
Novedades de C++11
Novedades de C++11Novedades de C++11
Novedades de C++11kdeespana
 
10 formas de colaborar akademy es 2016
10 formas de colaborar akademy es 201610 formas de colaborar akademy es 2016
10 formas de colaborar akademy es 2016kdeespana
 
Kool Desktop Environment
Kool Desktop EnvironmentKool Desktop Environment
Kool Desktop Environmentkdeespana
 
openQA y Open Build System
openQA y Open Build SystemopenQA y Open Build System
openQA y Open Build Systemkdeespana
 
KDE Frameworks, cuando Qt se nos queda corto
KDE Frameworks, cuando Qt se nos queda corto KDE Frameworks, cuando Qt se nos queda corto
KDE Frameworks, cuando Qt se nos queda corto kdeespana
 
Qt5 en distintas plataformas
Qt5 en distintas plataformasQt5 en distintas plataformas
Qt5 en distintas plataformaskdeespana
 
Next gen Desktop Apps
Next gen Desktop AppsNext gen Desktop Apps
Next gen Desktop Appskdeespana
 
KDE España: Qué es y para qué sirve
KDE España: Qué es y para qué sirveKDE España: Qué es y para qué sirve
KDE España: Qué es y para qué sirvekdeespana
 
KDE connect - Akademy-es 2014 por Albert Vaca
KDE connect - Akademy-es 2014 por Albert VacaKDE connect - Akademy-es 2014 por Albert Vaca
KDE connect - Akademy-es 2014 por Albert Vacakdeespana
 
Next gen-apps
Next gen-appsNext gen-apps
Next gen-appskdeespana
 
Kde experience - Akademy-es 2014
Kde experience - Akademy-es 2014Kde experience - Akademy-es 2014
Kde experience - Akademy-es 2014kdeespana
 

Mais de kdeespana (20)

Desarrollando software libre sin ser informático akademy es 2017
Desarrollando software libre sin ser informático akademy es 2017Desarrollando software libre sin ser informático akademy es 2017
Desarrollando software libre sin ser informático akademy es 2017
 
Slimbook - Welcome to Freedom - Akademy-es 2017
Slimbook - Welcome to Freedom - Akademy-es 2017Slimbook - Welcome to Freedom - Akademy-es 2017
Slimbook - Welcome to Freedom - Akademy-es 2017
 
valgrind y ASAN Dos formas de instrumentar código en busca de errores
valgrind y ASAN Dos formas de instrumentar código en busca de erroresvalgrind y ASAN Dos formas de instrumentar código en busca de errores
valgrind y ASAN Dos formas de instrumentar código en busca de errores
 
KDE España: Qué es y para que sirve
KDE España: Qué es y para que sirve KDE España: Qué es y para que sirve
KDE España: Qué es y para que sirve
 
Qtquick, interfaces con animaciones fluídas en Qt5
Qtquick, interfaces con animaciones fluídas en Qt5Qtquick, interfaces con animaciones fluídas en Qt5
Qtquick, interfaces con animaciones fluídas en Qt5
 
Descubre plasma 5, el escritorio de la Comunidad KDE
Descubre plasma 5, el escritorio de la Comunidad KDEDescubre plasma 5, el escritorio de la Comunidad KDE
Descubre plasma 5, el escritorio de la Comunidad KDE
 
Clazy, mejorando tu código en tiempo de compilación
Clazy, mejorando tu código en tiempo de compilaciónClazy, mejorando tu código en tiempo de compilación
Clazy, mejorando tu código en tiempo de compilación
 
La potencia del Terminal
La potencia del TerminalLa potencia del Terminal
La potencia del Terminal
 
Novedades de C++11
Novedades de C++11Novedades de C++11
Novedades de C++11
 
10 formas de colaborar akademy es 2016
10 formas de colaborar akademy es 201610 formas de colaborar akademy es 2016
10 formas de colaborar akademy es 2016
 
Kool Desktop Environment
Kool Desktop EnvironmentKool Desktop Environment
Kool Desktop Environment
 
openQA y Open Build System
openQA y Open Build SystemopenQA y Open Build System
openQA y Open Build System
 
Plasma Next
Plasma NextPlasma Next
Plasma Next
 
KDE Frameworks, cuando Qt se nos queda corto
KDE Frameworks, cuando Qt se nos queda corto KDE Frameworks, cuando Qt se nos queda corto
KDE Frameworks, cuando Qt se nos queda corto
 
Qt5 en distintas plataformas
Qt5 en distintas plataformasQt5 en distintas plataformas
Qt5 en distintas plataformas
 
Next gen Desktop Apps
Next gen Desktop AppsNext gen Desktop Apps
Next gen Desktop Apps
 
KDE España: Qué es y para qué sirve
KDE España: Qué es y para qué sirveKDE España: Qué es y para qué sirve
KDE España: Qué es y para qué sirve
 
KDE connect - Akademy-es 2014 por Albert Vaca
KDE connect - Akademy-es 2014 por Albert VacaKDE connect - Akademy-es 2014 por Albert Vaca
KDE connect - Akademy-es 2014 por Albert Vaca
 
Next gen-apps
Next gen-appsNext gen-apps
Next gen-apps
 
Kde experience - Akademy-es 2014
Kde experience - Akademy-es 2014Kde experience - Akademy-es 2014
Kde experience - Akademy-es 2014
 

Último

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 

Último (20)

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 

Introducción a las librerías PyGame y PyOpenGL

  • 1. Akademy-es 2011 Introducción a las librerías Pygame y PyOpenGL
  • 2. ¿Qué necesitamos?(1) La presentación: goo.gl/3psq1 El código: goo.gl/6AD1A
  • 3. ¿Qué necesitamos?(2) ● Tener Python instalado en nuestro sistema. Por lo general viene incluido en prácticamente todas las distros de Linux populares. ● Tener instaladas las librerías Pygame y PyOpenGL Ejemplo en Ubuntu: ● sudo apt-get install python-pygame python-opengl freeglut3-dev ● ● O usando las setuptools de Python: ● ● sudo easy_install pygame ● sudo easy_install pyopengl
  • 4. ¿Qué son Pygame y PyOpenGL? Ambas son librerías gráficas ● procesado de gráficos 2D ● Manejo de gráficos 3D ● Gestor de ventanas ● Procesamiento matemático ● Manejo de eventos 3D interno ● Sonido ● ...
  • 5. Nuestros Objetivos Conseguir crear un pequeño programa en python que use pygame y pyopengl
  • 6. Inclusiones #Importamos las nuevas librerias import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GL.shaders import * #Definimos el ancho y largo de nuestra ventana WIDTH = 600 HEIGHT = 600
  • 7. Inicializando Pygame def init(): #inicializamos pygame pygame.init() #creamos una pantalla de WIDTHxHEIGHT pixeles que use doblebuffer, #que se pueda redimensionar y que acepte opengl flags = DOUBLEBUF|OPENGL screen = pygame.display.set_mode((WIDTH, HEIGHT), flags)
  • 9. El método main(2) #Metodo main def main(): running = True init() while running: for event in pygame.event.get(): if event.type == QUIT: running = False pygame.quit() #Llamamos al metodo main main()
  • 10. La función init_gl def init_gl(): #Cada vez que se dibuja la escena esta se borra enteramente #glClearColor y ClearDepth definen el color y la profundidad #del borrado glClearColor(0.0,0.0,0.0,1.0); glClearDepth(1.0);
  • 11. La función resize_glscene def resize_glscene(w,h): #Especifica el tamaño de la ventana para OPENGL #Aunque la ventana física tenga ciertas dimensiones #podemos hacer que las de OpenGL no coincidan con #estas. glViewport(0,0,w,h); #Se establece la matriz de proyeccion como la identidad glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, float(w)/float(h), 0.1, 100.0); #Se establece la matriz de modelado como la identidad glMatrixMode(GL_MODELVIEW); glLoadIdentity();
  • 12. Dibujando la escena La función draw_scene(1) vertices = (GLfloat * (4*4))( 1.0, 1.0, 0.0, 1.0, 1.0,-1.0, 0.0, 1.0, -1.0,-1.0, 0.0, 1.0, -1.0, 1.0, 0.0, 1.0) def draw_scene(): #Limpiamos la pantalla glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); #Colocamos la matriz identidad glLoadIdentity(); #Movemos en el eje Z (profundidad) 6 puntos hacia atras glTranslatef(0.0, 0.0, -6.0);
  • 13. Dibujando la escena: Definiendo tipos en Python(1) ● Definiremos una variable de un tipo determinado tal y como lo haríamos en C ● Al igual que hacemos en C podemos crear arrays de esos tipos ● ¿Por qué hacer esto? PyOpenGL sólo acepta parámetros dados de esta forma en algunas de sus funciones
  • 14. Dibujando la escena: Definiendo tipos en Python(2) Nota: En C sería algo como GLfloat vertices[4*4]
  • 15. Coordenadas Homogéneas Todo punto del espacio con coordenadas (x,y,z) se puede expresar en coordenadas homogéneas como (x,y,z,1) Estas tienen su utilidad ya que la mayoría de los cambios sobre los puntos como rotaciones, traslaciones,... se expresan como matrices 4x4 Click para más información
  • 16. El código siguiente puede no funcionar dependiendo de la tarjeta gráfica que se tenga o los drivers instalados
  • 17. Dibujando la escena: La función draw_scene(2) #Pasa a OpenGL los datos almacenados en vertices y le asignamos #el identificador 0 glVertexAttribPointer(0, 4, GL_FLOAT, 1, 0, vertices); #Activamos este atributo con identificador 0 glEnableVertexAttribArray(0); #Dibujamos, usando cuadrados, los vertices en el orden 0,1,2,3 glDrawElements(GL_QUADS, len(faceIndex), GL_UNSIGNED_SHORT, faceIndex); #Desactivamos este atributo glDisableVertexAttribArray(0); ... def main(): ... #Le decimos al programa que en el identificador 0 posicionaremos #los datos para la variable "position" del shader glBindAttribLocation(program, 0, "position"); ...
  • 18. Dibujando la escena: La función glVertexAttribPointer
  • 19. Dibujando la escena: La función glDrawElements
  • 20. ¿Qué son los shaders? ● A groso modo son programas que se ejecutan en la GPU ● Existen varios lenguajes de alto nivel para programar Shaders. Por ejemplo: ○ GLSL (OpenGL Shading Language, desarrollado por el grupo Khronos) ○ HLSL (High Level Shading Language, desrrollado por Microsoft) ○ Cg (C for Graphics, desarrollado por Nvidia) Nosotros centraremos en GLSL
  • 21. Estructura de un programa en GLSL Tendremos dos fuentes distintos: Tipos de datos definidos: float, vec3, vec4, mat4,... Tipos de entrada/salida de datos: attribute, uniform y varying
  • 22. El Vertex Shader ● Opera sobre cada vértice ● Control total sobre lo que pasa en los vértices ● Se usa para: ○ Transformaciones en los vértices (Rotaciones, traslaciones, ...) ○ Transformaciones en las normales ○ Iluminación ○ Coordenadas de las texturas ○ ...
  • 23. El Fragment Shader ● Opera sobre cada pixel (No los de la pantalla, sino de los de cada figura) ● Se usa para: ○ Controlar los efectos sobre la imagen ○ Iluminación y sombras ○ ...
  • 24. Attributes, Uniforms y varyings ● Attributes: Son datos de entrada y salida que varían para cada vértice en cada rendering. Por ejemplo: Las coordenadas de los vertices o las normales son específicas de cada vértice ● Uniforms: Son datos de entrada y salida que se mantienen iguales para todos los vértices en cada rendering. Por ejemplo: la posición de una luz, una cierta matriz de transformaciones que queramos aplicar a todos los vértices,... ● Varyings: Son usados para comunicar datos entre el Vertex Shader y el Fragment Shader. Son variables de únicamente lectura en el FS y de lectura y escritura en el VS. Además han de ser declarados tanto en el VS como en el FS
  • 25. Creación de un programa: Pasos a seguir
  • 26. Creación de un programa: función load_shaders (1) def load_Shaders(vsFileName, fsFileName): #creamos un identificador del programa program = glCreateProgram(); #leemos el contenido de los ficheros vsSource = open(vsFileName, 'r').read() fsSource = open(fsFileName, 'r').read() #creamos unos identificadores de los shaders y les #asociamos su codigo vsShader = glCreateShader(GL_VERTEX_SHADER); #Vertex Shader glShaderSource(vsShader, vsSource); fsShader = glCreateShader(GL_FRAGMENT_SHADER); #Fragment Shader glShaderSource(fsShader, fsSource);
  • 27. Creación de un programa: función load_shaders (2) #Compilamos los shaders glCompileShader(vsShader); glCompileShader(fsShader); #Adjuntamos los shaders al programa glAttachShader(program, vsShader); glAttachShader(program, fsShader); #Enlazamos el programa glLinkProgram(program); return program
  • 28. Escribiendo el Vertex Shader void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } ● Siempre debemos escribir en el VS el valor de gl_Position Define la posición final del vértice ● gl_ModelViewProjectionMatrix aplica las matrices de proyección y modelado. La de proyección viene dada en resize_glscene, la de modelado ha cambiado a lo largo del programa ● gl_Vertex toma los valores dados en el canal 0 de glVertexAttribPointer
  • 29. Escribiendo el Fragment Shader void main() { gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); } ● Siempre debemos escribir en el FS el valor de gl_FragColor. Define el color final del pixel o fragmento. ● Lo coloreamos con el valor (1.0,1.0,1.0,1.0) que es blanco en RGBA
  • 30. La importancia de las funciones glGet(Attrib/Uniform)Location Problema: Al cambiar el índice en glVertexAttribArray deja de dibujar el cuadrado. Solución: Dejar la elección del índice a OpenGL def main(): ... #Solicitamos la posición de la variable "position" position = glGetAttribLocation(program, "position"); #Se la asignamos con bind glBindAttribLocation(program, position, "position"); def draw_scene(position): ... glVertexAttribPointer(position, 4, GL_FLOAT, 1, 0, vertices); glEnableVertexAttribArray(position); glDisabelVertexAttribArray(position);
  • 31. Tareas pendientes ● Añadir en el VS la variable de atributo de position ● ¿Como localizar la posición de las variables Uniforms? ● Hacer algo más divertido que un cuadrado Ampliando conocimientos: goo.gl/2yXhc
  • 32. ¡GRACIAS POR VENIR! Nos vemos en Twitter! Aarón Negrín Santamaría