Plastik Grafik

Program dökümü: BIG RINGS, DEMO, FACETS, FACETS2, HV-RINGS, RINGS, SPOOLS, KURELER1, KURELER2, KURELER3

Bilgisayarların günümüzde en çok kullanıldığı alanlardan biri de grafik konusudur. Tıptan mühendisliğe, film çekiminden kimyaya, oyundan iş grafiğine kadar çok çeşitli konularla beraber kullanılabilmektedir. Ve bu konunun kuşkusuz en ilgi çekici yanı, 3 boyutlu grafiklerin görüntülenebilmesidir.

3 boyutlu grafiğin en zor yanı, 2 boyutlu ekranda hacimli cisimleri göstermek, gözü kandırabilmektir. Bir de buna cismin arkasında kalan kısımların görünmemesinin gerekliliği eklenince işimiz bir hayli zorlaşır. Daha önce, matematiksel fonksiyonların 3 boyutlu çizimlerini vermiştik. Şimdi de sanatsal duygularınıza hitap edecek bir programımız var: PLASTİK GRAFİK.

Örnek olarak sunduğumuz grafiklerin tamamı bu program ile üretilmiştir. Bu grafiklerin bazılarını sizin de kolayca oluşturabilmeniz için, gerekli yan programları da veriyoruz. Sonucun sizi tatmin edeceğini umarız.

Tüm işlemlerin ana iskeleti sayılabilecek olan program, MDE ile yazmanız gereken PLASTİK GRAFİK programıdır. Oldukça uzun görünmesine rağmen, yaptığı işlemlerin niteliği ve hızı gözönüne alındığında oldukça kısa sayılabilir. Bu programı yazıp kaset veya diskette sakladıktan sonra yükleyin ve RUN komutunu verin. Ekran çerçeve rengi kısa bir süre değişecektir. İşlem bittikten sonra NEW komutunu verin.

Eğer verdiğimiz örnek programları BDE'yi kullanarak yazacaksanız, size tavsiyemiz bu işlemi PLASTİK GRAFİK programını çalıştırmadan önce yapmanızdır. Çünkü PLASTİK GRAFİK ve BDE, hafızada aynı bölgeleri kullanmaktadırlar ve bu bilgisayarınızın kilitlenmesine yolaçabilir.

Şimdi de bu programı kullanarak nasıl grafikler yaratabileceğimizi görelim. Aşağıda anlatacaklarımızın uygulamalı örneklerini, verdiğimiz örnek programlarda da görebilirsiniz.

Programımız, bazı temel grafik biçimlerini çizebilmektedir. Bunlar küre, silindir, simit, sosis ve makaradır. Şimdi, bu kadar sınırlı bir malzeme ile ne yapılabilir dediğinizi duyar gibiyiz. Ancak bu cisimlerin büyüklüklerini, konumlarını, koyuluklarını, kaçta kaçının çizilmesi gerektiğini ve ışığın yönünü belirlemek olanaklarına da sahibiz. Bunlar, insan yaratıcılığıyla birleşince ortaya inanılmayacak eserler çıkabilir.

PLASTİK GRAFİK programını çalıştırdıktan sonra, çeşitli POKE ve SYS komutlarıyla grafiğinizi çizebilirsiniz. POKE komutunu, grafiğin çeşitli özelliklerini değiştirmek için kullanacağız. SYS ile de, grafik cisimlerinin istediğimiz kısımlarını, istediğimiz büyüklükte ve istediğimiz noktaya çizebileceğiz.

İlk önce grafik ekranı ile yazı ekranı

arasında nasıl gidip geleceğimizi görelim. SYS 49 378 ile grafik ekranı çağırıyoruz; SYS 49411 ile de yazı ekranına geri dönüyoruz.

Eğer bilgisayarı açtıktan hemen sonra grafik ekranına geçerseniz, ekranda bir sürü garip çizgiler göreceksiniz. Ekranı temizlemek için şu komutu kullanacağız: SYS 51979

Çizim işlemlerine geçmeden önce, çizim yapacağımız renkleri nasıl saptayacağımızı da görelim. Bunun için SYS 52001, sayı komutunu kullanacağız. Burada verilmesi gereken sayıyı ise, 0-15 arasındaki ekran rengi ile 0-15 arasındaki çizgi rengi kodunun 16 katını toplayarak elde edeceğiz. Örneğin açık gri (15) ekranda kırmızı (2) ile çizim yapacaksak, sayımız 16*2 + 15 olacaktır.

Ekranımızı silip renklerini ayarladıktan sonra sıra çizimleri yapmaya geldi. Ancak temel cisimlerin nasıl çizildiğini görmeden önce, bu cisimlerin görünüşlerinin nasıl etkilendiğini görelim.

Örnek grafiklerden de göreceğiniz gibi, cisimlerin koyulukları iki şekilde sağlanıyor. İçleri ya düzenli ya da tesadüfi yerleştirilmiş noktalarla dolduruluyor. Bunu ayarlamak için, POKE 838, sayı komutunu kullanıyoruz.

Eğer sayı yerine 1 verirsek, bilgisayarın bundan sonra yapacağı taramalar düzenli olacaktır. Tekrar sıfır verdiğimizde ise, düzensiz tonlama başlayacaktır.

Bir başka önemli nokta, COMMODORE 64'ün ekran düzeniyle ilgili. 320x200'lük ekran, televizyon ekranında göründüğünde, herbir noktanın yüksekliği genişliğinden 4:3 oranında fazla olmaktadır. Bu da, aslında bir küre çizdiğimiz halde, bir yumurta şekli yaratmaktadır. Bunu hesaplama yoluyla engelleyebiliriz. Eğer POKE 839,0 yapıp çizimlerimize devam edersek, normalden farklı bir şey olmayacaktır; biz yine yumurta kılıklı kürelerle uğraşırız. Ancak POKE 839,1 yaparsak, bu sefer orantılı bir ekran elde ederiz ve kürelerimiz gerçek küre gibi çizilir. Eğer orantılı ekran kullanıyorsanız, Y-koordinat değerleri için 0-239 arası sayılar verebilirsiniz. Normal ekranda ise bu 0-199'dur. X-koordinat değerleri içinse daima 0-319 değerleri geçerli olacaktır. Sırası gelmişken iki noktayı belirtelim. X değerleri ekranda soldan sağa, Y değerleri ise aşağıdan yukarıya gitmektedir. Ve eğer belirttiğimiz koordinat sınırları dışına çıkarsanız, garip bazı şekillerin oluşturulduğunu görebilirsiniz.

Ve bir diğer faktör olan ışık yönünü de, POKE 898, sayı ile ayarlayabilirsiniz. Eğer sayı yerine 0 verirseniz ışık önden gelecektir, 1 verirseniz de arkadan.

Artık ilk şeklimize geçelim. Cismimiz küre. SYS 52119,X,Y,R komutu ile merkezi, belirlediğimiz X,Y koordinatlarında olan ve R yarıçapına sahip bir küreyi daha önce belirlediğimiz ışık, tonlama ve orantı kriterlerine göre çizebiliyoruz (Örn: SYS 52119,160,100,50).

Bir sonraki cisme simit diyebiliriz. Simitin tam ortasını merkez (X,Y) kabul edersek, bu merkezden simitin iç kenarına kadar olan uzaklığa R1, dış kenarına olan uzaklığa da R2 diyebiliriz. İşte bu simiti, SYS 52141,X,Y,R1,R2 ile çizebiliriz (Örn: SYS 52141,160,100,20,50).

Bundan sonra üç cisim daha var. Bunların ilk ikisi aslında da simitin değişik görünümleri. Demin simite tepeden bakmıştık. Şimdi de yandan bakalım.

Ortaya çıkacak olan cisim sosise benzetilebilir. Ayrıca bu sosisi yatay veya dikey durumunda çizebiliriz. Yatay sosis için kullanılacak komut, SYS 52186,X,Y,R1,R2 olacaktır. Dikey sosis içinse, SYS 52189,X,Y,R1,R2 kullanacağız. Değişkenlerin anlamları simitteki gibidir (Örn: SYS 52186,160,100,20,50).

Diğer cisme makara diyebiliriz. Bu şekli tanımlamak biraz karışık. Biraz iştahınızı açacak bir tanım yapalım. Şimdi dolgunca bir simit alın, masaya koyun. Sonra da ortasındaki boşluğu, üstünden taşacak kadar jöle koyup doldurun. Bekleyin jöle donsun. Sonra simiti uzaklaştırın. Ortada kalan jölenin biçimi, simitin iç ve dış yarıçaplarına göre değişebilen bir makara görüntüsünü alacaktır. Bir başka deyişle, bu komut ile ölçüleri verilmiş bir simitin aslında boş olan kısmının görüntüsü üretilecektir. Dikey makara üretmek için SYS 52203,X,Y,R1,R2, yatay makara için ise SYS 52206,X,Y,R1,R2 (Örn: SYS 52203,160,100,20,50).

Son cismimiz ise, yatay ve dikey silindir olacak. Silindirin yarıçapına R, yüksekliğine de H diyelim. Silindirimizin tam ortasını, yani merkezini de X,Y koordinatlarıyla gösterelim. O zaman SYS 52150,X,Y,R,H/2 ile dikey silindir, SYS 52153,X,Y,R,H/2 ile de yatay silindir çizebilirsiniz (Örn: SYS 52150,160,100,20,30).

Şimdi programın değişik bir özelliğini görelim. Bu özelliğe pencereleme diyebiliriz. Bu işlemle, çizimi yapılacak cismin merkez koordinatlarından yukarı, aşağı, sağa ve sola doğru olan kaç noktalık alanın çizimde kullanılabileceği belirlenebilir. Örneğin, bir simit çizmeden önce bu sınırlar için sola doğru 255, yukarıya doğru 255, sağa doğru 0 ve aşağıya doğru 0 değerlerini verirseniz, simitin sadece sol üst çeyreği çizilebilecektir. Böylece çizeceğimiz cismin ne kadarının çizileceğini de saptayabiliyoruz. Bunun için çi-

zimden önce şu POKE komutlarının kullanılması gerekir:

POKE 893,sol sınır POKE 894,sağ sınır POKE 895,üst sınır POKE 896,alt sınır

Örneğin hepsine 25 değerini verip, SYS 52119,160,100,30 ile bir küre çizin. Ortaya bir yüzük taşı biçimi çıkacaktır.

Üç boyutlu çizimlerin dışında, programımız tek boyutlu çizimler de yapabilmekte. Bunun için kullanılacağımız malzemeler nokta, çizgi ve üçgen olacak.

İstediğimiz bir koordinata nokta koyabilmek için, SYS 52023,X,Y kullanmamız gerekiyor. O noktayı silmek içinde SYS 52026,X,Y kullanacağız. Buradaki X,Y koordinatları, orantılı ekran seçmiş olsanız bile orantısız ekran koordinatları gibi davranacaklardır. Ekranın istenilen iki noktası arasında çizgi çekmek içinse, SYS 52049,X1,Y1,X2,Y2 komutunu kullanmalısınız.

Üçgen çiziminin ise bazı özellikleri var. Bir kere bu üçgenler içi dolu üçgenler, daha doğrusu sizin belirlediğiniz 0-64 arası bir koyuluğa sahip olacaklar. Burada 0 ile tamamen dolu, 64 ile de tamamen boş üçgenler elde edebilirsiniz. Ayrıca, üçgenin kenarlarında çizgi olup olmamasını veya üçgenin etrafındaki bir çizgi genişliğindeki alanın silinip silinmeyeceğini de belirtebilirsiniz.

SYS 52052,X1,Y1,X2,Y2,X3,Y3,K ile belirtilen koordinatlar arasında ve K derecesinde koyuluğa sahip bir üçgen elde edebiliriz. Ancak X1..X3 koordinatları 0-255 arasında olmalıdır.

Eğer üçgenin çevresine çizgi çekilmesini istiyorsanız, çizimden önce POKE 868,1 demelisiniz, istemiyorsanız da POKE 868,0. Eğer üçgen etrafında bir çizgi kalınlığındaki alan silinecekse, gene çizimden önce POKE 871,1, silinmeyecekse de POKE 871,0 vermelisiniz.

Son iki komutumuz da, yarattığınız resimleri kaset veya diskete kaydedip tekrar yüklemenizi sağlayacak. OPEN 10,8,1,"isim":SYS 52300,S,10 diyerek ekranı diskete, "isim" adı altında bir program dosyası halinde SAVE edebilirsiniz. Eğer kaset kullanıyorsanız, 8 yerine 1 koymalısınız. Eğer sequential bir dosya yaratmanız gerekiyorsa, "isim,S,W" yazabilirsiniz. Ayrıca verdiğimiz komutta 10 olarak belirttiğimiz kanal numarası 0-255 arası herhangi bir sayı olabilir, ancak SYS komutunda da aynı sayının verilmesi gerekir.

Sakladığımız grafikleri tekrar yüklemek için, OPEN 7,8,0,"isim":SYS 52300,L,7 yapmak yeterli olacaktır. Aynen yukarıdaki açıklamalar geçerlidir. SYS komutundaki S ile L harfleri ile OPEN komutundaki 0 ve 1 ikincil adreslerine dikkat edin.

Artık bitiriyoruz. Size bol sanatlı günler dilerken, tüm komutların bir toplu listesini de veriyoruz.

ÖZET LİSTE

POKE 893,sayı : sol kenar sınırlaması (sayı: 0-255) POKE 894,sayı : sağ kenar sınırlaması (sayı: 0-255) POKE 895,sayı : üst kenar sınırlaması (sayı: 0-255) POKE 896,sayı : alt kenar sınırlaması (sayı: 0-255)

POKE 838,0 : düzensiz tonlama POKE 838,1 : düzenli tonlama POKE 839,0 : orantısız ekran POKE 839,1 : orantılı ekran POKE 868,0 : üçgen çevresinde çizgi yok POKE 868,1 : üçgen çevresinde çizgi var POKE 871,0 : üçgen çevresi silinmiyor

POKE 871,1 : üçgen çevresi siliniyor POKE 898,0 : ışık önden geliyor POKE 898,1 : ışık arkadan geliyor

SYS 49378 : grafik ekranına geçiş SYS 49411 : yazı ekranına geçiş SYS 52001,sayı : ekran ve çizim rengi (sayı=16*nokta+ekran) SYS 51979,sayı : ekranı verilen değer ile doldur (sayı 0 ise SYS 51979 verilebilir ve ekranı siler) SYS 52023,X,Y : nokta bas (orantısız) SYS 52026,X,Y : nokta sil (orantısız) SYS 52049,X1,Y1,X2,Y2 : çizgi çiz SYS 52052,X1,Y1,X2,Y2,X3,Y3,K : K koyulukta üçgen çiz (K:0-64,0:siyah,64:beyaz)

SYS 52119,X,Y,R : küre SYS 52141,X,Y,R1,R2 : simit SYS 52150,X,Y,R,H/2 : dikey silindir SYS 52153,X,Y,R,H/2 : yatay silindir SYS 52186,X,Y,R1,R2 : yatay sosis SYS 52189,X,Y,R1,R2 : dikey sosis SYS 52203,X,Y,R1,R2 : dikey makara SYS 52206,X,Y,R1,R2 : yatay makara

Bu yazıdaki programlar

Dergideki dökümlerden çıkarıldı; satırlar derginin kontrol toplamlarıyla doğrulandı ve programlar VICE emülatöründe denendi. Tarayıcıdaki C64'te çalıştırabilir, indirip bir emülatöre sürükleyip bırakabilir ya da gerçek bir C64'te LOAD "AD",8,1 ile yükleyebilirsiniz. "Sorun bulundu" yazanlarda bazı satırlar okunamadı ya da tutmadı; düzeltilmiş bir sürümünüz varsa contact@coze.org adresine gönderin.