Bu içerik 5 yıl önce eklendi.
Bu sebeple içerik güncelliğini yitirmiş olabilir.

Bir önceki yazıda pencere oluşturmayı ve pencereninsürekli olarak yenilenmesini sağlamayı anlatmıştım.

Şimdi ise bazı şekilleri çizdirmeyi ve hareket ettirmeyi anlatacağım.

İlk olarak draw ve idle fonksiyonlarımızın son halini inceleyelim.

void draw()
{

glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);

glutSwapBuffers();

}

void idle()
{

draw();

}

Çizdireceğimiz tüm şekilleri draw fonksiyonu içerisinde çizdireceğiz. Bunun için glBegin isimli fonksiyonu kullanacağız. Örneğin bir çizgi çekelim ve bunu nasıl yaptığımızı inceleyelim. draw fonksiyonu içine aşağıdaki kırmızı satırları ekleyelim.

void draw()
{

glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.6,0.8,0);

glBegin(GL_LINES);
glVertex2f(100,100);
glVertex2f(400,500);
glEnd();

glutSwapBuffers();

}

Yeni eklediğimiz satırları inceleyelim.

glColor3f(0.6,0.8,0); Çizim yapmadan önce çizim yapacağımız rengi belirlemeliyiz. Ben burada yeşile yakın bir sarı seçtim. Daha önce de kısaca söylediğim gibi 3 paremetre alan bu fonksiyonun paremetreleri red, green, blue’dur. 0-1 arası değerler vererek istediğimiz rengi seçebiliriz. Eğer hepsine 1 verirsek beyaz, hepsine 0 verirsek siyah rengi elde ederiz. Sadece red’e 1 verip diğerlerine 0 verirsek ise kırmızı bir renk elde ederiz. Eğer RGB sistemi hakkında bir bilginiz yoksa, deneme yanılma ile kısa sürede kavrayabilirsiniz.

glBegin(GL_LINES); Çizim yapmaya başlayacağımızı, ve çizeceğimiz şekli belirtiyoruz bu satırda. GL_LINES yerine farklı değerler vererek farklı şekiller de çizeceğiz ileride. Bu satırdan sonra glEnd(); satırına dek yazacağımız tüm noktalar bu şeklin çiziminde kullanılır. Bu noktaları belirtmek için ise glVertex2f(100,100); kodunu kullanırız. x,y şeklinde paremetre alan bu fonksiyon çizimde kullanılacak noktaları belirlememizi sağlar.

Bu kodu çalıştırdığımızda 100,100 noktasından 400,500 noktasına; belirlediğimiz renkte bir çizgi çekildiğini göreceksiniz.

Bunun hemen altına şu kodları koyarak bir de dikdörtgen çizelim:

void draw()
{

glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.6,0.8,0);

glBegin(GL_LINES);
glVertex2f(100,100);
glVertex2f(400,500);
glEnd();

glBegin(GL_QUADS);
glVertex2f(400,250);
glVertex2f(400,400);
glVertex2f(650,400);
glVertex2f(650,250);
glEnd();

glutSwapBuffers();

}

Dikdörtgenin köşelerini, sırayla verdiğimizde istediğimiz koordinatlarda bir dikdörtgen çizildiğini görebiliriz. Farkettiğiniz üzere az önceki çizgimiz ile aynı renkte oldu çizimlerimiz. Çünkü şekil çizmeden önce değiştirilmediği sürece, en son hangi renk kullanılmışsa çizime onla devam edilir. Eğer dikdörtgenin rengini değiştirmek istersek bunu glBegin(GL_QUADS); satırından önce yapmalıyız.

Fakat rengi seçerken, komple şekil için seçmek zorunda değiliz. Demek istediğim; şeklin her köşesinin kendine özgü bir rengi olabilir. Örneğin az önce eklediğimiz kodu şu şekilde değişelim:

void draw()
{

glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.6,0.8,0);

glBegin(GL_LINES);
glVertex2f(100,100);
glVertex2f(400,500);
glEnd();

glBegin(GL_QUADS);
glColor3f(1,0,0);
glVertex2f(400,250);
glColor3f(0,1,0);
glVertex2f(400,400);
glColor3f(0,0,1);
glVertex2f(650,400);
glColor3f(1,0,1);
glVertex2f(650,250);
glEnd();

glutSwapBuffers();

}

Bu şekilde çalıştırdığınızda dikdörtgenin her köşesinin kendine göre bir rengi olduğunu, ve köşeden köşeye geçerken bu renkler arasında yumuşak bir geçiş yapıldığını görebilirsiniz.

Son olarak bu çizdiğimiz dikdörtgene ufak bir hareket kazandıralım istiyorum. Bunun için fonksiyonların dışına bir global değişken tanımlayalım ve dikdörtgenin çizildiği koordinatları aşağıdaki gibi değiştirelim.

float pos = 250;
bool dir = true;

void draw()

{

glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.6,0.8,0);

glBegin(GL_LINES);
glVertex2f(100,100);
glVertex2f(400,500);
glEnd();

if(dir)

pos+=0.1;

else

pos-=0.1;

if(pos>450)

dir = false;

if(pos<0)

dir = true;

glBegin(GL_QUADS);
glColor3f(1,0,0);
glVertex2f(400,pos);
glColor3f(0,1,0);
glVertex2f(400,pos+150);
glColor3f(0,0,1);
glVertex2f(650,pos+150);
glColor3f(1,0,1);
glVertex2f(650,pos);
glEnd();

glutSwapBuffers();

}

Burdaki dir değişkeni aşağı doğru mu yukarı doğru mu hareket ettiğini tutmak için kullanıldı. Ekranın dışına çıkmasın diye gerekli kontrolleri yapıp, hareket yönünü ona göre değiştriyioruz. Bu kodu çalıştırdığınızda bir aşağı, bir yukarı hareket eden dikdörtgenimizi göreceksiniz.

Şimdilik bu kadar, diğer şekilleri de siz deneyerek bulabilirsiniz.

Tüm kısımlara ulaşmak için tıklayın.

 

KınıX

Leave a Comment

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