Bu sayfadaki yazılar
Sayfanın metni
Sayfa 8
Noktamız P(x1,y1) noktası olsun; bu noktayı saatin ters yönünde a açısı kadar döndürdüğümüz zaman noktamız Q(x2,y2) koordinatlarına gelecek. Elimizde x1, x2 ve a varken x2 ve y2'yi nasıl bulacağız?
Bunun için gelin P vektörünü iki bileşene ayıralım: Px(x1,0) ve Py(0,y1). Dikkat ederseniz P'yi, Px'i ve Py'yi ne kadar döndürürsek döndürelim, P her zaman Px ve Py'nin toplamına eşit olacak. Öyleyse biz Px ve Py'nin a açısı kadar döndürüldüğünde nereye geldiklerini bulursak (ki bunu bulmak kolay) sonra bu ikisini toplayıp Q(x2,y2) noktasını bulabiliriz.
Px, a kadar dönünce x ekseni ile a derece açı yapan x1 uzunluğunda bir vektör olur. Trigonometriden hatırlarsak bu durumda Px'in x koordinatı (x1)cos(a) olur. Aynı şekilde y koordinatı ise (x1)sin(a) olur.
Py, a kadar döndüğünde y ekseninin sol tarafına doğru a açısı yapan y1 uzunluğunda bir vektör olur. Onun koordinatları da sırası ile (-y1)sin(a) ve (y1)cos(a) olur.
Son olarak P'nin yeni yerini yani x2 ve y2'yi bulmak için Px ve Py'nin aynı koordinatlarını toplarsak, x2 = (x1)cos(a) – (y1)sin(a) y2 = (x1)sin(a) + (y1)cos(a)
İşte bu bir noktayı tek eksende iki boyutlu döndürmek için gereken işlemdir. Bir objeyi oluşturan bütün noktalar için bu işlem tekrarlanırsa obje origin etrafında (ya da 3 boyutlu düşünürsek z ekseni etrafında) döndürülmüş olur.
Ölçekleme
Ölçekleme işlemi bir objeyi büyütüp küçültmeye yarar. Bir vektörün skaler ile çarpılması konusundan hatırlarsanız, bu işlem sonucu vektörlerin boyları uzayıp kısaltılabiliyordu. Eğer bir objeyi tanımlayan bütün noktaların vektörlerini aynı skaler ile çarparsak o objeyi o skaler oranında ölçeklemiş oluruz.
Genelde bütün noktaların x ve y koordinatları aynı skaler ile çarpılarak ölçeklenir bu durumda obje şeklinde herhangi bir deformasyona uğramadan büyür ve küçülür. Eğer x ve y koordinatları aynı oranda ölçeklenmezse objeler x veya y yönünde yassılaşırlar. Bu da bazen kullanılan bir efekttir. Ben bu efekti Mist demosundaki wobbling vektör partında kullanmıştım.
Hatta objeyi oluşturan noktalar farklı farklı skalerler ile anime bir şekilde ölçeklenirse çok ilginç jelimsi objeler elde edilebilir ki bu tip efektler genelde çok prim yapar. 3 boyut motorunuzu yazdıktan sonra böyle ufak oynamalarla çok ilginç ve orijinal efektler bulabilirsiniz.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 9
Dönüşümlerin birleştirilmesi
Genelde dönüşümler tek tek değil birlikte gerçekleşirler. Yani bir obje uzayda aynı anda yer değiştirip kendi etrafında dönerken büyüyüp küçülüyor olabilir. Bir objeye olan dönüşümler bu durumda birleştirilip hesaplanabilmelidir.
Bu ihtiyacın doğduğu bir diğer popüler durum daha vardır. Kinematik. Örneğin kendi kolunuzu düşünün. Kolunuz omzunuzdan bir açı ile bir eksende dönerken, dirseğiniz başka bir açı ile döndüğünde eliniz ne kadar dönmüş ve yer değiştirmiş olur. Bu soruyu cevaplayabilmek için objelerin birbirlerine bir ebeveyn-çocuk hiyerarşisi ile bağlandığını düşünebiliriz. Yani bu örnekte gövdeniz, üst kolunuzun babası, üst kolunuz ön kolunuzun babası, ön kolunuz ise elinizin babası gibi. Çoğunlukla babalar bir dönüşüm yaptıklarında bütün çocuk ve torunları bu dönüşümü geçirir. Ama çocuk...
What is the matrix
Evet sayın okuyucular. Kısaca matrix matematiğinden de bahsederek gereken bütün temel matematik bilgisini tamamlamış olacağız. Bundan sonra da C64 üzerinde bu efektleri nasıl kodlayacağımıza geçeceğiz. Fakat bu sayı için yeterince şey öğrendiniz. Gelecek yazıda matrix'lerin tanımından devam edeceğim.
Tamamen matematik ağırlıklı olan bu yazıda anlamadığınız pek çok yer olabilir. Vektör işlemleri lise matematik seviyesinde olduğu için daha az problem olabilir ama dönüşümleri anlamak sizi daha çok zorlayabilir. Bu durumlar için forumlar veya mail yoluyla bana sorularınızı ulaştırabilirsiniz.
Gelecek yazıda görüşmek üzere...
Merhaba. Bu yazı dizisinde PC kullanarak C64 için nasıl program geliştirebileceğinize dair bilgiler vermeye çalışacağım. Böylece o ruhsuz PC’niz de faydalı bir iş için kullanılmış olacak ☺
Öncelikle birkaç şeyi tanımlayalım. Bir PC kullanarak başka bir bilgisayar sistemi için yazılım geliştirmeye çapraz geliştirme (cross-development) adı verilir. Bu yalnızca C64 için yapılan bir şey değildir. Uzun yıllardır gömülü (embedded) sistem adı verilen bütün cihazlar (TV'ler, DVD'ler, çamaşır makineleri, fabrika robotları vs.) bu şekilde geliştirilmektedir. Böyle yapılan geliştirmede PC'ye host platform, yazılımın aslında çalışacağı platforma da hedef platform denir.
Bunun çok basit sebepleri vardır. Genelde hedef platformlar RAM ve CPU gücü bakımından daha zayıftırlar. Bu yüzden onlar üzerinde janjanlı kod editörleri ve geliştirme araçları çalıştırmak mümkün olmayabilir. Çoğu zaman hard diskleri de olmadığı için kaynak kodları saklamak ve düzenlemek daha zordur.
C64'ü özellikle düşünürsek 5,25 disketlerle kaynak kodları saklamak nispeten daha güvensiz olabilir. PC’de yazdığınız kodları defalarca kopyalar, CD’lere yazar veya CVS gibi versiyon yönetim sistemlerinde saklayabilirsiniz. Bu kaynak kodlarda sonsuz uzunlukta değişken ve etiket isimleri kullanabilir, kod içine istediğiniz kadar yorum yazabilirsiniz.
Bütün bu avantajların yanında bence PC üstünde geliştirmenin gerçekten çok zaman ve efor kazandırdığı bir durum vardır. Çok parçalı demolarda linking dediğimiz süreç. Bu süreçte çeşitli efektler içeren demo partlarını birleştirerek, geçişlerin zamanlaması ve