Pages

joi, 11 martie 2010

PyGame : OpenGL - part 2.

Today I will show you how we find stuff about graphics hardware.
We will use two modules: pyopengl and pygame.
Modules can import other modules.
Each module is only imported once per interpreter session.
>>> import pygame 
>>> import OpenGL 

The imports are taken in the local symbol table, so we need to do this:
>>> from pygame import *
>>> from OpenGL import *
>>> from OpenGL.GL import * 
>>> from OpenGL.GLUT import * 

The next thing you must do is call the function glutInit.
>>> glutInit()
['foo']

Use pygame init function to initialize the window:
>>> pygame.init()
(6, 0)
>>> pygame.display.set_mode((10,10),OPENGL|DOUBLEBUF)


Note:If we not create the window the next commands will not work.
About the beautiful glGetString function, we know.
This return a string describing the current GL connection.
You can use dir() and help() functions to see more.
But we see bellow, some example:
>>> dir(glGetString)
['__call__', '__class__', '__ctypes_from_outparam__', '__delattr__',
 '__dict__','__doc__', '__format__', '__getattribute__', '__hash__',
 '__init__', '__module__',
 '__name__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', 
'__subclasshook__',
 '__weakref__', '_b_base_', '_b_needsfree_', '_flags_', '_objects', 
'_restype_', 'argtypes', 'errcheck', 'restype']
>>> dir(glGetString())
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', 
'__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

Now, the parameters of this function are :
glGetString(GL_VERSION)
glGetString(GL_VENDOR)
glGetString(GL_RENDERER)
glGetStringi(GL_EXTENSIONS, i) 

Bellow, we see how we use these parameters:
>>> glGetString(GL_VERSION) 
'2.1.2 NVIDIA 173.14.22'
>>> glGetString(GL_VENDOR) 
'NVIDIA Corporation'
>>> glGetString(GL_RENDERER) 
'GeForce FX 5200/AGP/SSE/3DNOW!'

Because the GL_EXTENSIONS is a space-separated list of supported extensions to GL, we can use these commands:
>>> print glGetString(GL_EXTENSIONS)

Or you can format this result, see below
>>> print glGetString(GL_EXTENSIONS).split()
['GL_ARB_depth_texture', 'GL_ARB_fragment_program', ...

This is all.

sâmbătă, 28 martie 2009

PyGame : OpenGL - part 1

OpenGL is an application programming interface.
The PyOpenGL modules have many functions and several matrices for working with 3D graphics. This is one example of how to use PyOpenGL.
I've successfully tested it under Linux.

import os
import sys
import pygame
from pygame import *
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

def init_display(w, h):
 pygame.display.set_mode( (w,h) , pygame.OPENGL | pygame.DOUBLEBUF )
 glViewport(0, 0, w, h)
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

 glEnable(GL_LIGHTING)

 glEnable(GL_LIGHT0)        

 glLight(GL_LIGHT0, GL_POSITION,  (0, 0, 1, 0))    
 glMatrixMode(GL_PROJECTION);

 glLoadIdentity();

 gluOrtho2D(-1, 1, -1, 1);

 glMatrixMode(GL_MODELVIEW);

def draw():
 glClearColor(0.0, 0.0, 0.0, 1.0)
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
 glColor(0,1,0)
 glLight(GL_LIGHT0, GL_POSITION,  (1, 1, 1, 0))
 glMaterial(GL_FRONT, GL_AMBIENT, (0.1, 0.1, 0.1, 1.0))    

 glMaterial(GL_FRONT, GL_DIFFUSE, (1.0, 1.0, 1.0, 1.0))
 glutSolidTorus(0.1,0.5,24,24)
 pygame.display.flip()

def main():
 pygame.init()
 glutInit()
 init_display(800, 600)
 while 1:
  event=pygame.event.poll ()
  draw()
  if event.type is KEYDOWN:
   if event.key is K_ESCAPE:
    sys.exit(0)
main()

vineri, 27 februarie 2009

PyGame : How I used time on pygame.

This is a simple example.
The program shows some random colors.

import time
import random
import pygame

pygame.init()

def main():
    for i in range(60):
        screen = pygame.display.set_mode((800,600))
        pygame.display.set_caption("Some random colors!")

        bg = pygame.Surface(screen.get_size())
        bg = bg.convert()
        bg.fill((random.randint(1,255),random.randint(1,255),random.randint(1,255)))
        clock = pygame.time.Clock()
        Go = True
        while Go:
            clock.tick(2)
            screen.blit(bg,(0,0))
            pygame.display.flip()
            time.sleep(6)
            Go = False

if __name__ == "__main__":
    main()
As you see, try to create one loop:

        clock = pygame.time.Clock()
        Go = True
        while Go:
            clock.tick(2)
            ...  
            some code line 
            ...
            time.sleep(6)
            Go = False

miercuri, 18 februarie 2009

PyGame : Sounds in pygame.

First of all, you need two files. This is "load.py".

import os
import sys
import pygame
from pygame import mixer
pygame.mixer.init() 
def snd(nume):
    numeintreg = os.path.join("sunete",nume)
    sound = pygame.mixer.Sound(numeintreg)
    return sound
This is "main.py". The sounds "o.wav" can be any sound file.

import os
import sys
import pygame
from pygame import *
import load
def main():
     ocean=load.snd("o.wav")
     ocean.play()
main()

PyGame : Showing pictures on pygame

First of all, you need two files. This is "load.py"

import os
import sys
import pygame
def img(nume):
    numeintreg = os.path.join("date",nume)
    image = pygame.image.load(numeintreg)
    image = image.convert()
    return image
This is "main.py". The image "bk2.bmp" can be any image.
import os
import sys
import pygame
import load
def main():
    pygame.init()
    ecran = pygame.display.set_mode((640, 480))
    fundal = load.img('bk2.bmp')
    ecran.blit(fundal, (0, 0))
    pygame.display.flip()
main()

marți, 17 februarie 2009

PyGame : Keyboard on pygame

This is a short example of how to use the keyboard in pygame.

import os
import sys
import pygame
from pygame import *
def main():
   pygame.init()
   ecran = pygame.display.set_mode((640, 480))
   ruleaza= True
   action = "Help!"
   while ruleaza is True:
       for event in pygame.event.get():
           if event.type == QUIT:
               ruleaza == False
           elif event.type == KEYDOWN:
               if event.key == K_ESCAPE:
                   ruleaza = False
               elif event.key == K_LEFT:
                   action="L"
               elif event.key == K_RIGHT:
                   action="R"
           print action
main()

luni, 9 februarie 2009

About Pygame python module.

About PYGAME we can find out from web articles and we can get a picture of this python module:
Yet another powerful open source 2D game engine. Pygame is a set of modules allows you to create fully featured games and multimedia programs in the python language. Pygame is portable and runs on every platform and operating system.
Pygame is free. Released under the LGPL license, you can create an open source, free, freeware, shareware, and commercial games with it. See the license for full details.

The Python PyGame module is easy to use in both procedural and object programming.
The installation process is easy:
pip install pygame
The official web page can be found here.
The Wikipedia page with info about this python module can be found here.
The pypi webpage can be found here.
All documentation can be found on this webpage.