

Panda3d İle 3Boyutlu Oyun Programlamaya Giriş [Tahribat Programlama Rüzgarı]
-
Panda3D ile 3Boyutlu oyun programlamaya giriş
Müridler normalde kodaman.org a yazdığım haberi(henüz yayınlanmadı) burdada paylaşmak istedim. python kodlarını ########## içerisine aldım
Bu yazımda basitliğiyle ün yapmış pythonun 3D oyun kütüphanesi olan Panda3D yi tanıtmaya çalışacağım
Panda3D nin en sevdiğim özellikleri diye söylemek isteseydim;
-python ile yazılabilmesi
-Hem Directx hemde OpenGl altyapısı kullanabilmesi
-İkinci nedenden ötürü multi-platform olabilmesi
-Korkunç derecede basit olması
Pek tabii ki pythonun diğer dillere göre daha basit olmasını oyun programlamada da kendini gösteriyor.
Şimdi bir önceki yazımda yaptığım gibi ilk önce işe boş bir ekran hazırlayarak başlıyorum.
##########
import direct.directbase.DirectStart #panda çizim kütüphanesi
run() #çalıştır
##########
Olabilecek en basit yolu buydu, daha basitini istemek tam anlamıyla insafsızlık olurdu.
Sadece iki satır kodla boş bir pencere açtıktan sonra sadece iki satır kodla model eklemeye geçiyoruz
##########
import direct.directbase.DirectStart
model = loader.loadModel("models/environment") #panda3d nin örnek modellerinden biri
model.reparentTo(render) #render ortamına aktarıyoruz
run() #çalıştır
##########
Diğer oyun motorlarıyla cebelleştikten sonra bunu görmek bende zamanımı-boşa-harcamışım etkisi yaptı.
Panda3D'nin desteklediği 3D formatı olan .egg yi modelimizin sonuna yazmamıza gerek yok. Yani bu şekildede yazılabilirdi;
##########
model = loader.loadModel("models/environment.egg")
##########
.egg formatı daha önce hiç duymamış olduğunuz bir format olabilir(ki benimde öyleydi), hiç üzülmeyin egg formatı birçok formattan çevrilebiliyor.
Şimdi modelimizle biraz oynayalım. İlk önce pozisyonunu ayarlayalım;
##########
model.setPos(0,10,20)
##########
Bu fonksiyonda bilmemiz gereken tek şey setPos(x,y,z) x,y ve z koordinatları
Şimdide modelimizi biraz küçültelim
##########
model.setScale(0.25,0.25,0.25)
##########
Bu fonksiyonda bilmemiz gereken şey ise setScale(x,y,z) x,y ve z eksenlerinden ne kadar küçültüleceği.
Burada 0.25 kullanarak modelimizi 1/4 üne küçültüyoruz. Bunu her eksenden yapmaz isek görüntümüz bozulacaktır.
Şimdi biraz farklı şeyler deneyelim, mesela bir tuşa bastığımızda bir fonksiyonu çalıştırmak istedik;
##########
def tus():
print 'Tusa basildi'
base.accept("arrow_up",tus)
##########
base.accept fonksiyonunda ilk argüment tuşun ismi, ikinciside çalıştırılacak fonksiyondur.
arrow_up klavyedeki yukarı tuşu oluyor ve biz bunu farklı şekillerede sokabiliriz. Mesela;
arrow_up: Tuşa bastığım anda
arrow_up-up : Elimi tuştan çektikten sonra,
arrow_up-repeat : Elimi sürekli tuşa basarsam
Tüm tuş listesine kendi sitesinde vermiş olduğu gibi bakarsak;
"escape", "f"+"1-12" (e.g. "f1","f2",..."f12"), "print_screen" "scroll_lock"
"backspace", "insert", "home", "page_up", "num_lock"
"tab", "delete", "end", "page_down"
"caps_lock", "enter", "arrow_left", "arrow_up", "arrow_down", "arrow_right"
"shift", "lshift", "rshift",
"control", "alt", "lcontrol", "lalt", "space", "ralt", "rcontrol"
Klavyedeki harf ve rakamları direk yazabiliriz yani "a" gibi..
Hatta bunlarda kombinasyonda yapabiliriz. Mesela;
"shift-a", "shift-control-alt-a", "shift-alt-a" gibi..
Şimdide modelimize geri dönelim. Modelimize şimdi bir iskelet hareketi ekleyerek onu aktör yapmak istedik :)
##########
from direct.actor import Actor #bunu unutmayalım bu bizim aktörümüz için kullancağımız kütüphane
pandaActor = Actor.Actor("models/panda-model",{"walk":"models/panda-walk4"})
pandaActor.reparentTo(render)
pandaActor.loop("walk")
##########
Yine kendi örnek modellerinden birini ve iskeletini koyarak işe başladık. loop("walk") diyerek önceden tanımladığımız istekeli çalıştırdık.
loop("walk") yerine play("walk") deseydik sadece iskeletimizi 1 kere oynatacaktık. İskelet hareketini durdurmak için stop() fonksiyonunu kullanabiliriz.
Ama buda tam iskelet neredeyse orada tabiri-caizse kalas gibi kalır. Aktörümüzü ilk pozisyonuna almak içinse bunu kullanabiliriz;
##########
actor.pose('walk',1)
##########
Buradaki 1 frame numarasını karşılıyor.
Daha çok değinmek istediğim yer var ama başlangıç seviyesi olduğu için son olarak bir sis yapıp artislik bir şekilde yazıdan çıkıcam :P
##########
Fog = Fog("sis")
Fog.setColor(100,100,100)
Fog.setExpDensity(0.5)
render.setFog(Fog)
##########
setColor(Kırmızı,Yeşil,Mavi) tonları(0-1 arası), setExpDensity(0.5) 1 ve 0 arasında baskınlık değeri girerek sisimizi oluşturduk.
Eğer bu yazının sonunda Panda3D yi denemek isterseniz;
http://www.panda3d.org/download.php
Senin anlattığın kafi gelmedi benim İngilizcemde var diyorsanız;
http://www.panda3d.org/wiki/index.php/Main_Page
İndirip kurması çok kolay. Hatta Panda3D python üzerine kurulmuyor kendi pythonunyla beraber geliyor. Eğer yazdığımız bir kodu çalıştırmak istersekte cmd den yada terminalden
ppython kod.py
(Dikkat iki p var) yazmamız yeterli.Burdada Panda3D ile yapılımş birkaç oyunun resimleri var;





-
python un iyi olduğunu biliyordum ama bu kadarda iyi olduğunu bilmiyorum süperin ötesinde mükemmeliyet diye tanımlanabilecek birşey varsa sanırım bu olabilir.
-
python çok hoşuma gidiyoda ide kısmı çok dandik ya :D
Sürükle bırak mantığına alışmış biri olarak böle tabi :D
Bu arada o oyunlar tamamen python ilemi yazılmış oha :|
-
python oyun programlama için çok yavaş kalmazmı? özelliklede 3D???
-
Claros bunu yazdı:
-----------------------------
python oyun programlama için çok yavaş kalmazmı? özelliklede 3D???
-----------------------------zaten pythonun en önemli iki özelliği hızı ve basitliği. 3D de ise c/c++ a göre fark göremedim ben.
-
iLLuMiNaTi bunu yazdı:
-----------------------------python çok hoşuma gidiyoda ide kısmı çok dandik ya :D
Sürükle bırak mantığına alışmış biri olarak böle tabi :D
Bu arada o oyunlar tamamen python ilemi yazılmış oha :|
-----------------------------oyunlar panda3D ile yapılmış.hangi programlama dili diye sorarsan; c/c++ lada yazılmış olabilir. ama pythonlada aynısını yazabilirsin
-
deneyecem bakalım olmazsa yakarım seni :D
-
wert bunu yazdı:
-----------------------------
deneyecem bakalım olmazsa yakarım seni :D
-----------------------------tabii hocam bekliyorum :)
-
oyun yazmak zor iştir bence 3 d bir animasyon filmi yapın daha kolay :)
-
laaaa 3ds yada obj yada dfx felan bu uzantıları tanıyormu nasıl :s
-
resimlerden en alttaki oyunun sistem gereksinimleri , ismini , download linkleri yazabilecek olan var mı ? :)
çok hoşlaştımda :D