Yazan : Şadi Evren ŞEKER

Bu yazının amacı opengl kütüphanesi kullanılarak şekil değiştirme işlemlerinin nasıl yapıldığını açıklamaktır. Temel olarak 3 tip şekil değiştirme işlemi vardır:

  • Taşıma (Translate)
  • Döndürme(Rotate)
  • Ölçekleme (Büyültüp küçültmr, Scaling)

Bu işlemlerin hepsi için OpenGL kütüphanesinde hazır fonksiyonlar bulunmaktadır. Aşağıda her işlem için kullanılan fonksiyonlar ve bu fonksiyonların açıklaması bulunmaktadır.

Ayrıca birden fazla şekil değiştirme işlem arka arkaya yapılacaksa bunun için çoklu şekil değiştirmeler (multiple transformations) başlıklı yazıyı okuyabilirsiniz.

Taşıma

Bu işlem kabaca bir şeklin veya şekli oluşturan noktaların bütün koordinatların belirli bir değer kadar arttırılması vey azaltılmasıdır. Bu konuyla ilgili taşıma işlemleri başlıklı yazıyı okuyabilirsiniz. Aşağıda gösterilen örnek kodda glTranslate fonksiyonu kullanılmıştır.

glTranslatef(1,0.5,0);

Bu fonksiyon float değerler aldığı için ekranı -1,1 aralığında kodlayan ve 0,0 orjin noktası ekranın merkezinde olan koordinat sistemine göre şekli çeyrek ekran yukarı ve yarım ekran sağa kaydıracaktır.

Aynı fonksiyonu double değişken kullanarak çağırmak da mümkündür. Bunun için fonksiyonun sonundaki f yerine d harfi konulur:

glTranslated(100,50,0);

Bu satırda ise ekranda 100 pixel (imgecik) sağa ve 50 imgecik aşağı kaydırma yapılmıştır. Ekranın boyutları glutInitWindowSize( en, boy); şeklinde main fonksiyonun içerisinde ilk pencere oluşturulurken tanımlı olmalıdır. İşte bu boyutlara göre ekranın sol üst köşesini 0,0 alan koordinat sisteminde kaydırma yapılmaktadır.

Döndürme

Ekrandaki nesneleri istenilen bir eksen etrafında döndürmeye yarayan koddur. Bu işlemin detayı için döndürme başlıklı yazıyı okuyabilirsiniz.  Aşağıda örnek bir kod satırı verilmiştir:

glRotatef(10, 0, 0, 1);

Yukarıdaki kodda, ekranda z ekseni etrafında 10 derece döndürme işlemi yapılacağı anlatılmaktadır. Buna göre ilk parametre döndürme açısını alırken 2. , 3. ve 4. parametrelerde eksen değerlerini almaktadır. Örneğin x ve y eksenleri arasında 45 derecelik açı yapan eksen etrafında 10 derece döndürmek isteseydik:

glRotatef(10,1,1,0);

değeri verilecekti.

Ölçekleme

Ekrandaki şekillerin verilen oranlarda büyümesi veya küçülmesini sağlayan koddur. Buna göre şeklin orjinal oranlarının bozulmadan büyümesi veya küçülmesi için 3 boyutta da aynı oranda büyüme küçülme olması gerekir. Detaylı bilgi için ölçekleme başlıklı yazıyı okuyabilirsiniz.

Aşağıda örnek bir kod satırı verilmiştir:

glScalef(0.5,0.5,0.5);

Yukarıdaki bu koda göre şekil orjinal oranları ile yarı yarıya küçülmüştür. Şekin örneğin x ekseninde genişlemesini (Esnemesini ) istiyor olsaydık:

glScalef(3.0,1.0,1.0);

şeklinde x boyutunu 3 misline çıkarırken y ve z boyutlarını sabit bırakabilirdik.

Yorumlar

  1. Birsen Nane

    Bir soruda “A(1,1) B(3,1) C(3,3) noktalarınıb oluşturduğu üçgene (0,0,1) noktasına göre 30 derece rotasyon uygulayın “deniliyor. Nasıl bir kod parçası yazıcaz acaba?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir