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,-
glVertex2f(-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,-
glVertex2f(-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,-
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,-
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,-
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,-
glVertex2f(-0.6f,-
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