Panda3D Hareket İçin Interval

Evet arkadaşlar, sahnemizi oluşturduk. İçerisine bir panda koyduk güzel oldu şimdi sırada pandamızı hareket ettirmeye geldi. Bunun için Interval denilen bir özelliği kullanacağız. Öncelikle kodlarımızı ekleyelim:


import direct.directbase.DirectStart
from pandac.PandaModules import *

from direct.task import Task
from direct.actor import Actor
from direct.interval.IntervalGlobal import *
import math

environ = loader.loadModel("models/environment")
environ.reparentTo(render)
environ.setScale(0.25,0.25,0.25)
environ.setPos(-8,42,0)

def SpinCameraTask(task):
angledegrees = task.time * 6.0
angleradians = angledegrees * (math.pi / 180.0)
base.camera.setPos(20*math.sin(angleradians),-20.0*math.cos(angleradians),3)
base.camera.setHpr(angledegrees, 0, 0)
return Task.cont

taskMgr.add(SpinCameraTask, "SpinCameraTask")

pandaActor = Actor.Actor("models/panda-model",{"walk":"models/panda-walk4"})
pandaActor.setScale(0.005,0.005,0.005)
pandaActor.reparentTo(render)
pandaActor.loop("walk")

pandaPosInterval1= pandaActor.posInterval(13,Point3(0,-10,0), startPos=Point3(0,10,0))
pandaPosInterval2= pandaActor.posInterval(13,Point3(0,10,0), startPos=Point3(0,-10,0))
pandaHprInterval1= pandaActor.hprInterval(3,Point3(180,0,0), startHpr=Point3(0,0,0))
pandaHprInterval2= pandaActor.hprInterval(3,Point3(0,0,0), startHpr=Point3(180,0,0))

pandaPace = Sequence(pandaPosInterval1, pandaHprInterval1,
pandaPosInterval2, pandaHprInterval2, name = "pandaPace")
pandaPace.loop()

run()

Şimdi interval nedir onu açıklayalım. Öncelikle bir tür zamanlanmış görev olduğunu söylesek yanlış olmaz. Belli bir zaman aralığında bir değeri başka bir değere çeviririz. Eklediğimiz satırlara bakacak olursanız ilk olarak pandaPosInterval1 isimli bir nesne oluşturduğumuzu görürsünüz, bu nesnelerin isimleri o kadar da önemli değil ama ben ana dokümana sağdık kalıyorum aynı zamanda ne olduklarını açıklayan birer cümle gibi kullanıldıkları için ileride hatırlamanıza yardımcı olur. Neyse, nesnemizi oluşturduk ve posInterval fonksiyonunu kullandık fonksiyonda belirttiğimiz üzere başlangıç pozisyonu 0,10,0 noktası. Bu noktadan 13 saniyelik bir zaman içerisinde 0,-10,0 noktasına geçmiş oluyoruz. Sonraki satırdaysa aynı şeyi tersten yapıyoruz. Hpr ise anladığınız üzere açıyı değiştiriyor.

Son kısımda ise başka bir görev türüne geçiyoruz. Sequence sırayla Interval’ları gerçekleştiren bir görev türü. Sıraladıktan sonra loop() fonksiyonunu kullanarak bir döngü oluşturmuş oluyoruz. Zaten her şey döngüden ibaret…

Bu yazıyla birlikte Panda3D’yi sizlere tanıtmak için başlattığım seriyi bitirmiş oldum. Bundan sonra insanlara Panda’yı öğretmeye çalışmaktan ziyade tecrübelerimi paylaşacağım yazılar gelebilir. Panda3D ile uğraşan, animasyon yapan, kendini geliştirmek isteyenler benimle iletişim bölümü aracılığıyla irtibata geçebilir. Umarım bende sizlerden bir şeyler öğrenebilirim.

İyi Çalışmalar
Ceyhun Alyeşil

Panda3D Aktörler

import direct.directbase.DirectStart
from direct.task import Task
from direct.actor import Actor
import math

environ = loader.loadModel("models/environment")
environ.reparentTo(render)
environ.setScale(0.25,0.25,0.25)
environ.setPos(-8,42,0)

def SpinCameraTask(task):
angledegrees = task.time * 6.0
angleradians = angledegrees * (math.pi / 180.0)
base.camera.setPos(20*math.sin(angleradians),-20.0*math.cos(angleradians),3)
base.camera.setHpr(angledegrees, 0, 0)
return Task.cont

taskMgr.add(SpinCameraTask, "SpinCameraTask")

pandaActor = Actor.Actor("models/panda-model",{"walk":"models/panda-walk4"})
pandaActor.setScale(0.005,0.005,0.005)
pandaActor.reparentTo(render)
pandaActor.loop("walk")

run()

Sahnemizi daha önce ki eğitsellerde yüklemiştik. Kodumuz gittikçe gelişiyor şimdi ilk olarak import ettiğimiz modüllere tekrardan bakın. Ekstradan Actor modülünü import ettik. Şimdi uygulamanın son bölümüne bakın, tıpkı sahne yüklerken yaptığımız gibi bir nesne oluşturduk ve Actor.Actor fonksiyonuyla pandamızı yükledik. Şimdi aklınızda tutmanız gereken kısım loadmodel’in sabit modelleri yüklemede, Actor’ınsa hareketli animasyonlarda kullanıldığı. Bir şey hareket ediyorsa yani yeri değişiyorsa actor kullanılır. Actörü yüklerken bir python sözlüğü kullanarak dosyalarımızı isimlerle eşleştirebiliyoruz. Örneğin walk nesnesinin adresi models/panda-walk4’muş. Yerini belirleyip, render işlemini yaptıktan sonra walk animasyonunu loop ediyoruz(döngü başlatıyoruz). İşlem tamamlandıktan sonra dosyayı kaydedip çalıştırın. Yukarıda ki resimdeki pandanın yürüdüğünü göreceksiniz.

Panda3D Kamera Kontrolü

Devam ediyoruz, şimdi aşağıdaki kodları inceleyelim:

import direct.directbase.DirectStart
from direct.task import Task
import math

environ = loader.loadModel("models/environment")
environ.reparentTo(render)
environ.setScale(0.25,0.25,0.25)
environ.setPos(-8,42,0)

def SpinCameraTask(task):
angledegrees = task.time * 6.0
angleradians = angledegrees * (math.pi / 180.0)
base.camera.setPos(20*math.sin(angleradians),-20.0*math.cos(angleradians),3)
base.camera.setHpr(angledegrees, 0, 0)
return Task.cont

taskMgr.add(SpinCameraTask, "SpinCameraTask")

run()

Yine DirectStart’ı import ettik fakat bu sefer ekstra bir kaç modülü daha kullanmamız gerekti. Geçen sefer eklemiş olduğumuz sahnemizde kamera düzgün değildi burada işi halletmesi için SpinCameraTask isimli bir fonksiyon yazdık. Panda3D’nin görev yöneticisine taskMgr.add komutuyla yazdığımız görevi ekledik. Bu sayede görev yöneticisi SpinCameraTask’ı Task.cont’a döndüğü sürece uygulayacak(Task.done olduğunda bitiriyor, burada kullanmadık). Kamerayı döndürmeye yarayan fonksiyona bakacak olursak Task.time task’ın süresini belirtir biz burada saniyede 6 derece dönmesini istiyoruz. Sonraki satırda dereceden radyanı buluyoruz. setPos ile pozisyonunu belirtip(trigonometri, analitik geometri dediğim burada giriyor x,y,z koordinatları, yerden 3 birim yüksekte oluyor)setHpr ile de dönüşümü ayarlıyoruz(bunlar base.camera ile ilgili şimdilik buraya takılmayın).
Kodu çalıştırdığınızda kameranın artık bozuk olmadığını ve döndüğünü göreceksiniz.

Panda3D Sahne Yükleme


import direct.directbase.DirectStart

environ = loader.loadModel(“models/environment”)
environ.reparentTo(render)
environ.setScale(0.25,0.25,0.25)
environ.setPos(-8,42,0)

run()

Yine önce DirectStart’ı import ediyoruz. environ isimli bir nesne oluşturduk bu nesnemize modelimizi yükledik. “models/environment” kısmının ayrıntılı kullanımı için dosya söz dizimi eğitseline bakabilirsiniz. Aslında pygame dokümanlarını okumuş olan arkadaşlar sistemin benzer olduğunu fark edecektir. Nesneleri yükleyip render ediyoruz sonrada oynatıyoruz. Nesnelerin açı ve pozisyon değerlerini belirliyoruz. Ayarlanabilen bir çok özellik mevcut ileride bunlara da örnek gösteririm. Açılar, pozisyonlar değişir ama bu bölümde dikkat etmeniz gereken iki komut loadModel ve reparentTo, bunları her zaman kullanacağız. Bir hata yapmamışsak dosyamızı çalıştırdığımızda şunları görmemiz gerekecek^^

Panda3D Başlangıç

Öncelikle düzgün kurulup kurulmadığına bakalım:

import direct.directbase.DirectStart
run()

Satırlarını boş bir belgeye yazalım ve uzantısını .py yaparak kaydedelim. DirectStart vasıtasıyla gerekli bazı modülleri yükledik. Run komutuyla da döngümüzü başlattık. Her oyunda bir tane run() komutu uygulanır oyunumuzu başlatan bu komuttur bu yüzden bu boş dosyada da onu kullandık. Bu komut her zaman son satıra yazılır bunu unutmayın. Dosyamızı deneme.py ismiyle kaydettiğimizi varsayalım. Çalıştırmak için konsola python deneme.py yazın, karşınıza boş bir pencere gelecektir.

Panda3D

Merhaba arkadaşlar yeni bir yazı dizisiyle karşınızdayız bu kısa seride öncelikle amacımız panda3d’nin ilk bir kaç eğitselini gösterip sizlere ne işe yaradığı konusunda fikir vermek olacak. Bu ilk eğitseller temel olarak kendi sitesindeki dokümanları kullanacaklardır. Ekstradan kaynak kullanırsam yazıya ek olarak belirtirim bunun dışında genel eğitseller için www.panda3d.org adresini ziyaret etmenizi tavsiye ederim.

Panda3D ile oyun programlamaya başlamadan önce bazı noktaları belirtelim. Bu yazı dizisini anlamak için en azından Python programlama dilini bilmeniz gerekmektedir. İngilizce bilginiz temel fizik kurallarını bilmek, analitik geometri, 3 boyutlu uzay, trigonometri gibi konuları da bilmeden oyun yapabileceğinizi düşünmeyin. Elbette üç boyutlu animasyonları tasarlamak için blender gibi bir programı da kullanabiliyor olmanız gerekmekte. Benim burada yapacağım bir kaç dokümanın türkçeleştirmesiyle bir tanıtım kapsamında olduğu için(en azından şimdilik oyun yapmıyoruz) kendi tasarladığım animasyonları oynatmayacağım. Zaten düzgün bir şey tasarlayabildiğim söylenemez.

Her şeyi açıkladıysam Panda3D’nin ne olduğuna gelebilirim. Panda3D adı üstünde üç boyutlu bir oyun motorudur. C++ dilinde geliştirilmiştir ama oyun programlama konusunda Python dilini kullanır(script dili olarak). Mayıs 2008’den beri özgür BSD lisansıyla dağıtılmaktadır. Kendi tanıtımlarında da bahsedildiği üzere panda3d bir oyuncak veya yeni başlayanlar için bir araç değildir. Onunla birlikte oyun yapmak için en azından belli bir programlama yetisine sahip olmalısınız. Motorun tüm özelliklerine şu adresten bakabilirsiniz.

Panda hem windowsta hem de linux üzerinde kullanılabilmekte. Windows için sitesinde kurulum dosyası mevcut; linux için deb ve rpm paketleri mevcut ama bir pardus kullanıcısı için pek bir anlam ifade etmiyor. O zaman kaynak koddan derlemeniz gerekecek.

Django Admin Şifresi

Şifrenizi unuttunuz. Ne yapacaksınız?
Şunları
konsoldan python manage.py shell yazıp enter’a basın.

In[1]:from django.contrib.auth.models import User

In[2]:users = User.objects.all()

In[3]:users yazıp enter’a basın listeler kullanıcıları. şöyle bir şey olur:

Out[3]:[] (burada user:admin gibi bir ifade var da bloggerda çıkmıyor) 😀

In[4]:users[0].set_password(‘buraya yeni şifre gelecek’);

In[5]:users[0].save()

Çıkmak için de quit() yazarsınız shell’den çıkarsınız. Bu arada In[1] gibi ifadeler shell’de otomatik çıkıyor siz yazmıyorsunuz.

Django İle Tema


Erteliyordum şu işle uğraşmayı. Elimde yeterince kaynak ve örnek vardı ama bir türlü bitiresim gelmiyordu. Görsel tasarım konusunda kabiliyetli olduğumu düşünmüyorum. Belki bu sebeple bu işi bitirmeyi erteliyordum, bu gece bitti. 🙂 Hazır bir tema buldum ve iki dakikada Django’ya uyarladım. Önceden kodlarının bir kısmını paylaştığım sistemin kısmi ana sayfası yukarıdaki gibidir. Şimdilik tek model üzerinden siteyi tasarladım. Artık tema konusunda sıkıntı yaşamadığım için yeni modelleri eklemeye başlayabilirim.