Bu sayfadaki yazılar
Sayfanın metni
Sayfa 20
Herkese yeni bir sayı ve yeniden AMOS Pro. Yazıma hepinizin sevineceği bir haberle başlıyorum. AGA Chip Set'ini (Amiga 1200 ve 4000 serisinde kullanılan grafik seti) destekleyen AMOS piyasaya sürüldü. AGA normal modda 256, HAM modunda ise 260.000 renge çıkabilen şirin bir sistem. Artık 1200 ve 4000 için programlar yazabileceksiniz. Mutluluklar! Evet, şimdi bu ayki yazıma geçiyorum. Geçen ay renk paletiyle oynayarak ekranda çeşitli efektler yaratmıştık. Bu ay renk üzerinde biraz daha duracağım ve Colour komutuyla resimler üzerinde değişiklikler yapacağız. Şimdi komutumuzu biraz tanıyalım. Colour komutu 2 görevi birden üstlenmiş. Bunlardan ilki ekran renklerini ayarlamak. Kullanılışı ise: Colour Num,$RGB Num: Değiştirmek istediğiniz rengin paletteki numarası. Palet renkleri 0'dan başlar 31'e kadar gider. (Tabi bu eski model Amiga'lar için geçerli) $RGB: Renge vereceğiniz değer. Amiga'da renkler tanımlanırken 3 ana renkten Kırmızı (Red), Yeşil (Green) ve Mavi (Blue) oluşur. Bu renkleri istediğiniz tonlarda karıştırıp yeni renkler de elde edebilirsiniz. Her ana renk 0-F arası değer alabilir. Bu değerler 16'lık sayı sistemine göre verilir. Örneğin açık kırmızı bir renk elde etmek için $F00 değerini, açık yeşil için $0F0 değerini, açık mavi için ise $00F değerini paletinizin herhangi bir rengine yerleştirmeniz gerekir. 16'lık sayı sisteminin 10'luk sayı sistemindeki karşılıkları ise aşağıdaki gibidir. 16'lık: 0123456789ABCDEF 10'luk: 0123456789101112131415
Komutun ikinci kullanımı ile palet içindeki herhangi bir rengin değerini öğrenebilirsiniz. Colour(Num) Num: Değerini öğrenmek istediğiniz rengin numarası. Küçük bir örnek; Colour 1, $fff c=Hex$(Colour(1)) Print c İkinci satırdaki Hex$() komutu parantez içindeki değerin 16'lık düzene çevrilmesini sağlar. Colour komutu herhangi bir rengin değerini değiştirmek için kullanılır. Ama tüm paleti değiştirmek istediğinizde Colour yerine Palette komutunu kullanmanız daha uygun olacaktır. Palette $RGB,$RGB,$RGB,... Örneğin; Palette komutu 0, 2 ve 4. renklerin değerlerini değiştirir. Renk komutları devam ediyor. Sıradaki komut: Get Palette. Bu komut istediğiniz bir ekranın paletini diğer bir ekrana kopyalamakta kullanılır. Get Palette Num: Paletini kopyalamak istediğiniz ekranın numarası. Bu ekranın paleti aktif ekrana kopyalanır. Kopyalama işlemi 0. renk 0. renge, 1. renk 1. renge şeklinde gider. Eğer ekranların renk sayıları eşit değilse hata vermez, herhangi birinin son rengine geldiğinde işlemi bitirir. Şimdi ilk program ve açıklaması: Program Colour komutu yardımıyla herhangi bir resmin paletini değiştiriyor. Bu değiştirme işlemi resmin mavi, yeşil veya kırmızı filtreden geçirilmesi, resmin siyah-beyaz tonlarda renklendirilmesi ya da resmin negatifinin alınmasından ibaret. Değiştirme işlemi için gerekli hesaplamalar CLFIL adlı procedure'de gerçekleşmekte. CLFIL procedure'ünün çalışması için; renkler, değiştirilecek ekran numarası, filtre modu, işleminin yapılacağı ilk rengin paletteki yeri ve işlemin biteceği son rengin numarası.
Filtreleme işlemini biraz açıklamak istiyorum. Hesaplama, Red, Green ve Blue tonlarını bulur ve bu değerlerin ortalamasını filtre edilecek renge verir. Örnek olarak $837 değerine sahip bir rengi mavi filtreden geçirelim. Rengin R, G, B değerleri sıra ile 8, 5, 7'dir. Bu değerlerin ortalaması ise 6 olur. Mavi filtreden geçirdiğimiz için R ve G 0, B ise 6 olacaktır. Sonuçta $837 rengi filtre işleminden sonra $006 rengine dönüşecektir. Oldukça basit değil mi? Bu açıklamalar kırmızı, yeşil veya mavi filtreleme için yapılan hesaplamalar içindi. Siyah-beyaz filtreleme işleminde yine RGB ortalaması bulunur ve değer kırmızı, yeşil ve mavi değerler olarak atanır. Yani yukarıdaki örnekte $837 değerli renk siyah-beyaz filtreden geçirildiğinde sonuç $666 olacaktır. Negatifleme işlemi ise R, G, B değerlerinin 15'ten çıkarılıp yerleştirilmesidir. Örneğin aynı $837 renginin negatifi $788 olacaktır. Program içindeki MOUSKEY procedure'ü ise sol mouse tuşunu kontrol eder. Fonksiyon kullanıcının sol mouse tuşuna basıp, bırakmasını bekler. Fonksiyon içindeki Mouse Key deyimi Mouse'u kontrol eder. Eğer sol tuşa basılmış ise geriye 1, sağ tuşa basılmış ise 2, ikisine birden basılmış ise 3, hiçbir tuşa basılmamış ise 0 değerini geri gönderir. Programın içindeki Unpack deyimini ise bir başka yazıda açıklayacağım. Şimdilik programların kullandıkları grafiklerin bu komutlarla ekrana basıldığını belirterek geçiyorum.
Şimdi de 2. program içinde kullanılan bazı komutların açıklaması: Fade Hız, renk paleti to Renklerin siyaha doğru yavaşça soldurulmasını sağlar. Hız: Her rengi soldurduktan sonra beklemesi gereken süre. Fade komutunun ardından ekran kopyalamaları veya renk değiştirmeleri yaparsanız solma işlemi durdurulur. Bu yüzden Fade komutunun ardından Wait ile beklemeniz daha sağlıklı olacaktır. Bekleme süresi Hız x 15 kadar olmalıdır. Renk paleti: Verilmesi mecburi olmayan parametredir. İstenirse soldurma işlemi siyah yerine verilen renge doğru yapılır. Screen Num: Soldurma işleminin siyaha doğru değil de numarası verilen palete doğru yapılmasını sağlar. Örnek:
Fade 5 renkleri siyaha doğru soldurur. Fade 5 to 1 renkleri 1 nolu ekranın paletine doğru soldurur. Fade 5 $111,$222,$333,... renkleri verilen palete doğru soldurur. Bu Fade örnekleri için Wait değeri en az 60 olmalıdır.
Degree trigonometrik işlemlerde kullanılan açıların derece cinsinden hesaplanmasını sağlar. Ve şimdi daha önceden kısaca açıkladığım önemli bir komutu detaylı olarak açıklamak istiyorum. Screen Copy ekr1 to ekr2,x1,y1,x2,y2,x3,y3 Daha önceden mutlaka duymuşsunuzdur. Amiga'nız büyük miktarda bilgiyi, üzerinde çeşitli işlemler yaparak bir yerden bir yere taşıma işini donanım seviyesinde halledebilir. Bu işi, AGNUS chip'inin Blitter adlı parçası üstlenir. Blitter işlemleri (ki ekran kopyalama ve BOB işlemleri) doğrudan yapıldığında oldukça zor, karmaşık işlemlerdir. AMOS'un program piyasasında tutulmasının en önemli nedenlerinden biri de Blitter programlama üzerine getirdiği kolaylıklardır. Screen Copy komutu da ekran kopyalama işlemini gerçekleştirir. Parametreler; Ekr1: Kopyalanacak alanın bulunduğu ekran nosu. x1,y1,x2,y2: Kopyalanacak alanın sınırları. x1,y1 alanın sol üst, x2,y2 ise sağ alt köşesini belirtir. Ekr2: Kopyalamanın yapılacağı ekranın nosu. x3,y3: Kopyalanacak ekranın Ekr2'de başlangıç pozisyonu. Örnek:
Screen Copy 0,5,10,20,30 to 1,50,40. 0 nolu ekrandan 5,10,20,30 arasındaki alanı 1 nolu ekranın 50,40 pozisyonuna kopyalar.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 21
Screen Copy'nin 2. kullanım şekli ise: Screen Copy to Ekr1 nolu ekranın tamamını Ekr2 nolu ekrana kopyalar. Evet, Screen Copy bu kadar. Şimdi ikinci program. Program Colour ve Screen Copy komutlarının ortak kullanıldığı rutinlerden oluşmakta. Yazı içindeki resimler ve XWAVE ve YWAVE procedure'lerinin ortak kullanımı ile elde edilmekte.
XWAVE ve rutinleri birbirine benzer procedure'ler. Proc. parametresi efektin yapılacağı ekranın numarası olarak verilmelidir. Proc.'lar 7 nolu ekranı geçici olarak kullanır. Bu yüzden 7 nolu ekranı parametre olarak vermemeniz faydalı olacaktır. Proc. içindeki hesaplamadan da bahsetmek istiyorum. XWAVE fonksiyonu For X ile başlayan döngüde ekran kopyalama ve dalgalandırma işlemini gerçekleştirir. G(15*Sin) satırı hesaplama işleminin formülüdür. Bu formül işlem gören satırın ne kadar öteleneceğini hesaplar. Örnek olarak X değeri yerine 319'u verirsek (Ki, 319 ekranın genişliğidir. Ekran 0'dan başlar) sonuç 8, 39'u verirsek sonuç yaklaşık 23 olacaktır. Bu da ekranın her bir satırının en fazla 23 piksel öteleneceği anlamına gelir. Dalgalandırma işleminde K değeri satır nosu olduğundan her satır farklı ötelenmelere maruz kalacaktır. Ama sonuçta ekran bir sinüs eğrisine uygun olarak dalgalandırılacaktır. Proc.'unu açıklamak istemiyorum. Çünkü hemen hemen aynı. Evet, bu aylık bu kadar. Her zamanki gibi programlar Manyetik Paket içinde resimleriyle birlikte yer almakta. Manyetik Paket'e abone olmayanlar için duyuru; 2. programın 1. efekti diskten herhangi bir dosya okumuyor. Bu yüzden programın 1. efektini yazıp procedure'lere geçerseniz daha iyi olur. Gelecek ay yeni programlar ve komutlarda görüşmek üzere. Mektuplarınızı bekliyorum.
TOLGA KAHRAMAN
1.PROGRAM
Filter *
3.00 '* AMIGA DERGİSİ 1993 * Jnpack 6 To 1 : Unpack 6 To 0
Hide on LETL(0, Get Palette 1
1
1,31) MOUSKEY : Get Palette 1 CLFIL(0,'r',1,12 MOUSKEY : Get Palette MOUSKEY ; Get Palette 1 MOUSKEY : Get Palette : CLEIL [O, 'bw', 1,12] CLFIL IO, 'NEG', 13,31] Show On
SLETİ. (SOR, RGRS, ERENK) “A Ser 3: edilecek ekran nosu * Rgb$ : Filtre modu * . R Kirmizi * yesil * B Mavi Bu Siyah Beyaz — * NEG Negatif * Brenk: Filtrelemenin baslama rengi * Rrank: Filtrelemenin bitiş rengi — *
Screen SCR : RGB;
-Upper$ (RGB$) : If RGB$S'R' Then If RGBS='G' Then H=16 : Rem** GREEN FILTEF If RGBS='B' Then H=1 : Rem** BLUE FILTER For K-BRENK To ERENK C$‚¿Hex$ (Colour (K) , 3 G-Val (*$"+Mid$ (C$, 3,1)) B-Val ("S"+Right$ (C$,1); C- (R+G+B) /3
Rem*t RED FİLTER Ramtt GREEN FİLTER 1 Remtt BLUE FİLTER
Rem Siyah beyaz Colour K,M End 1£ End 1£ Next Procedure MOUSKEY Repeat : Üntil Mouse Kel Repeat : Üntil Mouse Ke; End Proc