Amiga Dergisi sayı 5, sayfa 20

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ı.