folder Tahribat.com Forumları
linefolder Programlama Genel
linefolder Panda3d İle 3Boyutlu Oyun Programlamaya Giriş [Tahribat Programlama Rüzgarı]



Panda3d İle 3Boyutlu Oyun Programlamaya Giriş [Tahribat Programlama Rüzgarı]

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    celoron
    celoron's avatar
    Kayıt Tarihi: 13/Ekim/2008
    Erkek

    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;

     http://www.panda3d.org/randomscreens/ssg-pirates/pirates02.jpghttp://www.panda3d.org/randomscreens/ssg-pirates/pirates04.jpg

     

     http://www.panda3d.org/randomscreens/ssg-antarean/antarean8.jpg

     


    Microsoft isn't evil, they just make really crappy operating systems. Linus Torvalds
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Milamber
    Milamber's avatar
    Kayıt Tarihi: 27/Mayıs/2009
    Erkek
    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.

    Fırtına koparmaktır işim... Uzaklar Yolcusu
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    iLLuMiNaTi
    iLLuMiNaTi's avatar
    Banlanmış Üye
    Kayıt Tarihi: 08/Mart/2007
    Erkek

    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 :|

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    e2
    e2's avatar
    Kayıt Tarihi: 20/Haziran/2008
    Erkek
    python oyun programlama için çok yavaş kalmazmı? özelliklede 3D???
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    celoron
    celoron's avatar
    Kayıt Tarihi: 13/Ekim/2008
    Erkek

    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.


    Microsoft isn't evil, they just make really crappy operating systems. Linus Torvalds
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    celoron
    celoron's avatar
    Kayıt Tarihi: 13/Ekim/2008
    Erkek

    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


    Microsoft isn't evil, they just make really crappy operating systems. Linus Torvalds
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wert
    wert's avatar
    Kayıt Tarihi: 19/Eylül/2005
    Erkek
    deneyecem bakalım olmazsa yakarım seni :D

    |sadece aptalların başarısı ders notu ile ölçülür|
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    celoron
    celoron's avatar
    Kayıt Tarihi: 13/Ekim/2008
    Erkek

    wert bunu yazdı:
    -----------------------------
    deneyecem bakalım olmazsa yakarım seni :D
    -----------------------------

    tabii hocam bekliyorum :)


    Microsoft isn't evil, they just make really crappy operating systems. Linus Torvalds
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    flybatwin
    flybatwin's avatar
    Kayıt Tarihi: 01/Mayıs/2008
    Erkek
    oyun yazmak zor iştir bence 3 d bir animasyon filmi yapın daha kolay :)

    www.sohhbet.com
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wert
    wert's avatar
    Kayıt Tarihi: 19/Eylül/2005
    Erkek
    laaaa 3ds yada obj yada dfx felan bu uzantıları tanıyormu nasıl :s

    |sadece aptalların başarısı ders notu ile ölçülür|
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Abizittin
    Abizittin's avatar
    Kayıt Tarihi: 19/Haziran/2008
    Erkek

    resimlerden en alttaki oyunun sistem gereksinimleri , ismini , download linkleri yazabilecek olan var mı ? :)

    çok hoşlaştımda :D

Toplam Hit: 7519 Toplam Mesaj: 21