Python ve OpenGL

Şimdiye kadar bir kaç kere OpenGL kullanımını gösterdim (En aşağıdaki listeyi inceleyebilirsiniz). Şimdi Python içerisinde OpenGL kullanımını anlatacağım. Öncelikli olarak ben Linux kullandığım için kullanmam oldukça kolay oldu. Python için OpenGL paketini (sudo apt-get install python-opengl) kurmam yetti. Bunu windowsta nasıl yapabilirsiniz hiç bilmiyorum. Eclipse için PyDev eklentisini kullandığım için geliştirme de o kadar zor olmadı. Önceki yazılarımda yapmış olduğum basit üçgen çizdirmeyi bu yazı için de yaptım. Ve aşağıdaki kod oluştu. Aşağıdaki kodu çalıştırdığınız zaman sorunsuz bir şekilde aşağıdaki pencere açılıyorsa başardınız. Şimdi OpenGL konusunda derin araştırmalar yapmaya başlayabilirsiniz.


Kaynak Kod:
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
import math
import sys

# Some api in the chain is translating the keystrokes to this octal string
# so instead of saying: ESCAPE = 27, we use the following.
ESCAPE = '\033'

# Genel OpenGL baslangic ayarlama metodu, baslangicta
# yapilmasi gereken tum isler yapiliyor
# Bu metod pencere yaratildiktan hemen sonra cagrilir
def InitGL(Width, Height):
#Arka plan rengini temizliyoruz (siyah oluyor)
glClearColor(0.0, 0.0, 0.0, 0.0)
#Gorunen alani ayarlayacagimiz icin projection
#moduna geciyoruz
glMatrixMode(GL_PROJECTION)
#matrisi resetleyelim
glLoadIdentity()
#2B ortogonal gorunur alani ayarlayalim
gluOrtho2D(-1,1,-1,1)
#Cizim yapacagimiz icin model moduna gecelim
glMatrixMode(GL_MODELVIEW)
#birim matrisi yukleyelim
glLoadIdentity()

# Bu metod pencere boyutunu degistirdigimizde cagriliyor
# eger tam ekran calisiyorsak cagrilmaz :)
def ReSizeGLScene(Width, Height):
#Goruntu penceresini yeni boyuta gore ayarliyoruz
glViewport(0, 0, Width, Height)

# Cizimlerin yapildigi metod
def DrawGLScene():
#Arka plan rengini gri yapiyoruz
glClearColor(0.5,0.5,0.5,1)
#Ekrani temizleyelim
glClear(GL_COLOR_BUFFER_BIT)
#Cizecegimiz sekil yesil olacak
glColor3f(0,1,0)
#ucgen cizecegimiz icin gerekli hesaplamalari yapiyoruz
hypotenus = 0.5/(math.sin(math.radians(60)))
adjacent = 0.5/(math.tan(math.radians(60)))
#3 kenarli poligon cizecegiz
glBegin(GL_POLYGON)
# Ucgeni cizmeye baslayalim
#ust kose
glVertex2f(0,hypotenus)
#sol alt kose
glVertex2f(-0.5,-adjacent)
#sag alt kose
glVertex2f(0.5,-adjacent)
glEnd()
# goruntu ekrana gelsin
#bunu iyice anlamak icin double buffering konusu ogrenilmeli
glutSwapBuffers()

# Bu metod her tusa basildiginda cagirilacaktir
# Asagida bu ayarlamayi yaptik
# Unutulmamasi gereken basilan tusun python tuple olarak
# gecirildigidir ( (key, x, y) seklinde)
def keyPressed(*args):
# Escape tusuna basilinca cikiyoruz
if args[0] == ESCAPE:
sys.exit()

def main():
global window
glutInit(sys.argv)
#Goruntuleme modunu seciyoruz
#double buffering ve alpha destegi olan RGB modu seciliyor
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE )
# pencerenin boyutunu 640 x 480 olarak ayarliyoruz
glutInitWindowSize(640, 480)
# pencere konumunu sol ust kose olarak ayarliyoruz
glutInitWindowPosition(0, 0)
# pencereyi yaratalim
glutCreateWindow("Merhaba Dünya")
# Cizim metodunu ayarliyoruz
glutDisplayFunc(DrawGLScene)
# Tam ekran olmasi icin asagidaki kisim kullanilabilir
# glutFullScreen()
# Yapilacak bir sey yokken ekrani yenileyelim
glutIdleFunc(DrawGLScene)
# Pencerenin yeniden boyutlandirilmasinda asagidaki metod kullanilacak
glutReshapeFunc(ReSizeGLScene)
# Klavyeye basildiginda calisacak olan metod
glutKeyboardFunc(keyPressed)
# Pencereyi ilklemesini tamamliyoruz
InitGL(640, 480)
# Ana dongumuz baslasin
glutMainLoop()

# Mesajimizi ekrana yazalim ve programi baslatalim
print "Çıkmak için ESC tuşunu kullanabilirsiniz."
main()
Ubuntu, Anjuta ve OpenGL
JOGL ne ola ki?
Dev C++ ve Glut
Daha güzel bir örnek incelemek isterseniz

2 yorum:

cagdas dedi ki...

Kafama nasıl oluyor acaba diye takılyordu ama oturup birşeyler okumaya da üşenmiştim açıkçası. Çok teşekkür ederim.

gurkan o dedi ki...

allah senden razı olsun nette o kadar aradım python ile opengl kullanımı hakkında bi belge bulamadım bu fikir edinmeme yardımcı oldu saolasın..