15 Nisan 2014 Salı

Geometrik Nesnelerin Çizimi(glBegin(),glEnd)

Openglde Geometrik nesnelerin Çizimi
Openglde geometrik nesnelerin,Nokta,Çizgi,Çokgen vs.. tanımını gördük bu konuda  bu tanımların nasıl işedigini, kullanıldıgını görecegiz.
Daha öncede belirttigim gibi openglde geometrix nesnelerin çizimi için glBegin ve glEnd komutlarını kullanmak zorunda oldugumuzu belirtmiştik eger bir çizim yapıcaksak mutlaka bu çizim glBegin ve glEnd arasından olmalı yoksa çizim işlemi gercekleşmez.İlk olarak glBegin ve glEnd in ne işe yaradıgını anlamalıyız.

void glBegin(GLenum mode);

glBegin çizim işleminin başladıgını belirten komuttur ve bir mod almaktadır belirlenen mod çizim modudur.
örnegin
glBegin(GL_LINES);
glBegin içersindeki GL_LINES modu çizimin,çizgi (LINES) olarak yapıladcagını belirtir
ve çizim komutları belirtilerek çizim başlar
glEnd();
parametresi ile çizim biter.Genel kullanımı bu şekildedir.


glBegin in alabilecegi çizim modları şunlardır

GL_POINTS Nokta olarak Cizer

GL_LINES Noktaları dogrularla bileştirir

GL_LINE_STRIP Belirlenen vertexler arası cizgi cizer bir birine baglar

GL_LINE_LOOP LINE_STRIP e benzer ancak son daki vertex baştaki vertex e baglanır

GL_TRIANGLES Verilen üç noktadan içi boyanmış üçgen oluşturmaktadır

GL_TRIANGLE_STRIP Birbirine baglı üçgenler oluşturur

GL_TRIANGLE_FAN Birbirinle baglantılı üçgenler oluşturur

GL_QUADS Verilen dört noktadan içi boyanmış dörtgen oluşturur

GL_QUAD_STRIP GL_TRIANGLE_STRIP gibi çalışır, ama bu sefer verilen iki noktayı önceki iki nokta ile birleştirerek bir dörtgen oluşturur.

GL_POLYGON Noktaları dogrularla birleştiri oluşan şekli renklendirir


bunları grafiksel olarak görelim


Geometrik nesneleri,çizim komutlarını ve modlarını anladıktan sonra çizim işlemine başlamanın zamanı geldi çizim bir koordinata dayalı yapılan bir işlemdir onun için bir koordinat sistemi bilmemizde fayda var kartezyen koordinat sistemide bunlarda biri ve bu iş için gayet kullanışlı onun için kartezyen koordinat sistemi makalesini okumanızı tavsiye ederim

ilk olarak noktayı (POINTS) modunu ele alarak nokta oluşturmayı ögrenelim

void nokta(void)
{
glPointSize(3.0);
glBegin(GL_POINTS);
glColor3f(0.0,0.0,1.0);
glVertex2f(-0.5,0.3);
glEnd();
}

uygulamanın ekran çıktısı



Kodu inceleyelim ve nasıl bu sonuca ulaştık anlayalım
kod içersinde
glPointSize(3.0);
fonksiyonu noktanın buyuklugunu ebadını belirtmektedir
glBegin(GL_POINTS);
glBegin komutu ile çizim işlemini başlatıp GL_POINTS modunu atadık yani çizimin noktalar ile olucagını belirledik
glColor3f(0.0,0.0,1.0);
glColor çizim rengini belirlemektedir çizim için renk belirleme makalesinde bunu inceledik
glVertex2f(-0.5,0.3);
glVertex çizim koordinatlarını belirlemektedir burada x=-0.5 y=0.3 olarak belirlemişiz
glEnd(); ile çizimi bitigini belirtiyoruz

bu işleme dayanarak bir den fazla noktada oluşturmanız mümkündür örnegin

void nesne(void)
{
glPointSize(3.0);
glBegin(GL_POINTS);
glColor3f(0.0,0.0,1.0);
glVertex2f(-0.4f,0.4f);
glVertex2f(0.4f,0.4f);
glVertex2f(0.4f,-0.4);
glVertex2f(-0.4,-0.4);
glEnd();
}


LINES

LINES çizgi anlamına gelen moddur bir çizgi oluşturmak için en az iki köşe noktasına sahip olmamız gerekmektedir
void nesne(void)
{
glBegin(GL_LINES);
glColor3f(0.0,0.0,1.0);
glVertex2f(-0.4f,0.4f);
glVertex2f(0.4f,0.4f);
glEnd();
}


Uygulama sonucu
s



resme baktıgımız zaman düz bir çizgi elde ettik

GL_LINE_STRIP
GL_LINE_STRIP belirlenen köşe noktalarını bir birine baglayarak çizgiler oluşturmaktadır.

void nesne(void)
{
glBegin(GL_LINE_STRIP);
glColor3f(0.0,0.0,0.0);
glVertex2f(-0.4f,0.4f);
glVertex2f(0.4f,0.4f);
glVertex2f(0.0f,0.1f);
glVertex2f(-0.2f,0.6f);
glVertex2f(0.0f,0.7f);
glVertex2f(0.1f,0.6f);
glEnd();
}

Uygulama çıktısı



GL_LINE_STRIP köşe noktalarını bir birine baglandı,çizgide her kırılma noktası yeni bir köşe noktasının oluştugunu göstermektedir başlangıç noktasınıda sayarsak 6 köşe noktası tanımlamışız her nokta başlangıç tan itibaren bir birine baglanmış


GL_LINE_LOOP
GL_LINE_LOOP modu GL_LINE_STRIP modunla aynı işlemi yapmaktadır tek farkkı ilk oluşturulan köşe noktası ile son oluşturulan köşe noktasını bir birine baglamasıdır.

void nesne(void)
{
glBegin(GL_LINE_LOOP);
glColor3f(0.0,0.0,0.0);
glVertex2f(-0.4f,0.4f);
glVertex2f(0.4f,0.4f);
glVertex2f(0.4f,-0.4f);
glVertex2f(-0.4f,-0.4f);
glEnd();
}

Uygulama çıktısı



Kodu incelediginiz zaman 4 adet köşe noktası belirlemişiz GL_LINE_LOOP modu çizgileri bir birine bagladıgı gibi
en son köşe noktası ile ilk köşe noktasını birleştirince çıktımız kare görünümünü aldı.


GL_TRIANGLES

GL_TRIANGLES Verilen üç noktadan içi boyanmış üçgen oluşturmaktadır

void nesne(void)
{
glBegin(GL_TRIANGLES);
glColor3f(0.0f,0.3f,1.0f);
glVertex2f(0.0f,0.4f);
glVertex2f(0.4f,-0.4f);
glVertex2f(-0.4f,-0.4f);
glEnd();
}


Uygulama ekran çıktısı



Burada tek bir üçgen çizilmiş eger köşe noktalarını çogaltıp koordinatları ayarlarsak 1 den fazla üçgen çize biliriz.


GL_TRIANGLE_STRIP
GL_TRIANGLE_STRIP Birbirine baglı üçgenler oluşturur.

void nesne(void)
{
glBegin(GL_TRIANGLE_STRIP);
glColor3f(0.0f,0.3f,1.0f);
glVertex2f(0.0f,0.9f);
glVertex2f(0.4f,0.1f);
glVertex2f(-0.4f,0.1f);
glVertex2f(-0.0f,-0.7f);
glEnd();
}


Uygulamanın ekran çıktısı




2 Boyutlu bir kristal şekli oldu ancak burada iki tane üçge var birbirine yapışık oldugu için böyle bir görüntü elde etmiş olduk .Burada dikkat etmemiz gereken konu şudur üçgenler 3 köşe noktasından oluşur ekran çıktısında 2 iki üçgen var öle ise 6 köşe noktası olması gerekmektedir ancak biz 4 köşe noktası tanımlamışız,burada GL_TRIANGLE_STRIP modu ortaya çıkmaktadır koddaki 4 köşe noktasının ilk üçü bir üçgen eder ikinci köşe noktası , üçüncü köşe noktası ve dördüncü köşe noktaları ayrı bir üçgen daha çizmektedir, burada ikinci ve üçüncü köşe noktaları ortak nokta olmaktadır.


glVertex2f(0.0f,0.9f);
glVertex2f(0.4f,0.1f); // ortak köşe noktası
glVertex2f(-0.4f,0.1f); // ortak köşe noktası
glVertex2f(-0.0f,-0.7f);



GL_TRIANGLE_FAN
GL_TRIANGLE_FAN Birbirinle baglantılı üçgenler oluşturur.GL_TRIANGLE_STRIP moduna çok benzemektedir aradaki fark şudur GL_TRIANGLE_STRIP te sonradan oluşturulan köşe noktaları bir birine baglanır ,GL_TRIANGLE_FAN ise hemen hemen bütün köşe noktaları bir birine baglantılıdır

void nesne(void)
{
glBegin(GL_TRIANGLE_FAN);
glColor3f(0.0f,0.3f,1.0f);
glVertex2f(0.0f,0.0f);
glVertex2f(0.4f,-0.4f);
glVertex2f(0.4f,0.1f);
glVertex2f(0.1f,0.5f);
glVertex2f(-0.1f,0.5f);
glEnd();
}


Uygulama ekran çıktısı





Uygulamada daha iyi anlaşılması için üçgenleri belirten çizgiler oluşturdum ancak kodu derlediginiz zaman aynı çıktıyı siz alamassınız birde köşe noktalarını belirledim v1,v2,v3,v4,v5 olarak , ekran çıktısına baktıgımız zaman v1,v2,v3 ten bir üçgen oluşturmuşuz v1,v3,v4 ten ayrı bir üçgen oluşturmuşuz v1,v4,v5 ten ayrı bir üçgen oluşturmuşuz .

GL_QUADS

GL_QUADS Verilen dört noktadan içi boyanmış dörtgen oluşturur

void nesne(void)
{
glBegin(GL_QUADS);
glColor3f(0.0f,0.3f,1.0f);
glVertex2f(-0.8f,0.8f);
glVertex2f(-0.4f,0.8f);
glVertex2f(-0.4f,0.4f);
glVertex2f(-0.8f,0.4f);
glEnd();
}


Uygulama ekran çıktısı




GL_QUAD_STRIP
GL_QUAD_STRIP GL_TRIANGLE_STRIP gibi çalışır, ama bu sefer verilen iki noktayı önceki iki nokta ile birleştirerek bir dörtgen oluşturur.

void nesne(void)
{
glBegin(GL_QUAD_STRIP);
glColor3f(0.0f,0.3f,1.0f);
glVertex2f(-0.5f,0.8f);
glVertex2f(-0.1f,0.4f);
glVertex2f(-0.1f,0.8f);
glVertex2f(-0.5f,0.4f);
glVertex2f(-0.1f,-0.1f);
glVertex2f(-0.6f,-0.1f);
glEnd();
}


Uygulama ekran çıktısı





GL_POLYGON
GL_POLYGON
Noktaları dogrularla birleştiri oluşan şekli renklendirir.


void nesne(void)
{
glBegin(GL_POLYGON);
glColor3f(0.0f,0.3f,1.0f);
glVertex2f(-0.5f,0.8f);
glVertex2f(-0.1f,0.8f);
glVertex2f(-0.1f,0.4f);
glVertex2f(-0.5f,0.4f);
glEnd();
}


Uygulama ekran çıktısı








glBegin ve glEnd için gecerli modlar bunlar.

glBegin ve glEnd arasındaki bazı kısıltlamalar


Çizim yaparken dikkat etmemiz gereken en önemli konulardan biri koordinatlardır buda glVertex *() komutu ile belirtilmektedir, Ayrıca her oluşturulan noktaya ayrı bir renk belirleme şanşımızda vardır.Bu komutları glBegin ve glEnd arasında kullana biliriz ancak her komut glBegin ve glEnd arasında çalışmamaktadır gecerli komut listesi





Hiç yorum yok:

Yorum Gönder