|
OpenGL ile İlk Kare ve Üçgenimizi Çizelim (Çeviri) Nasıl OpenGL pencere yapacağımızı öğrendik. Şimdi sırada ekran bişiler çizelim. Bu derste üçgen ve kare çizeceğiz.
Birşeyler çizmek için vertexler ile çalışacağız. Bu vertexler bize geometrik şeklimizin görünüşünün nasıl olacağını belirler. OpenGL 'de bir vertex çizmemiz için glVertex3f veya glVertex2f komutlarından birisini kullanırız. 3D 'de OpenGL 'ye odaklandığımız için glVertex3d 'i kullanacağız.glVertex3f komutunda "f" bize OpenGL 'de float bir değer kullandığımızı anlatır yani glVertex3i olan tamsayıyı değil.
Çizme işlemine başlamadan önce ilk olarak X ekseninde sola ve sağa hareketi, Y ekseninde yukarı ve aşağı, Z ekseninde de ekranın içine ve dışına hareketi yapacağımızı anlatmak için glLoadldentity() 'i çağıracağız. OpenGL ekranının ortasındaki X ve Y eksenleri 0.0f 'dir. Sol ortaya doğru negatif bir sayı olmalıdır. Sağ taraf pozitif bir sayı olmalı. Ekranın tepesine hareket ettirdiğimizde bir pozitif sayı, ekranın ortasına doğru da negatif bir sayı olmalı. Ekranın derinlerine doğru bir negatif sayı, bize doğru ise pozitif bir sayı olmalı.
Şimdi ne tür polygon ile çizim yapmak istiyoruz onu seçeceğiz. Üçgenimizi ve karemizi çizmek için glBegin(GL_TRIANGLES); ve glBegin(GL_QUADS); kullanıyoruz. Geometrik şeklimizi çizmeye başlarken herzaman glBegin fonksiyonu ile çağırma işlemini yapar, glEnd ile de bitiririz. glEnd; OpenGL 'ye bizim çizme işlemini bitirdiğimizi söyler. glBegin 'in GL_TRIANGLES gibi bir argümente ihtiyacı vardır. GL_TRIANGLES üç adet doğru ile bir üçgen oluşturacağımız anlamına gelir. GL_QUADS da dört doğru ile bir kare çizeceğimiz anlamına gelmekte. (Ayrıca GL_POINTS, GL_LINES vs.. de çizebilirsiniz ).
Geometrik şeklimizi hareket ettirmek için glTranslet(x,y,x) 'yi kullanıyoruz. glTranslatef ; X, Y, Z ekseni doğrultusunda hareket ettirmeye yarar. Bunu üçgenimizi ve karemizi oluşturmadan önce kullanacağız. Eğer glTranslatef(-1.5f, 0.0f, -6.0f) olarak kullanırsak bu demmeki eksi x yonune dogru 1.5 unite (sol) ve eksi z yonune dogru 6.0 unite (ekrana dogru).
int DrawGLScene(GLvoid) // Bütün Çizimin Yapıldığı Bölüm { // ekranı temizle glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Reset The Current Modelview Matrix glLoadIdentity();
//////////////////////////////////////////////////////////////////////////////////////////////////////////
glTranslatef(-1.5f,0.0f,-6.0f); // 1.5 sola hareket ettir ve 6.0 da ekranın içine. glBegin(GL_TRIANGLES); // Üçgen Kullanılarak Çizim glVertex3f( 0.0f, 1.0f, 0.0f); // Üst glVertex3f(-1.0f,-1.0f, 0.0f); // Orta Sol glVertex3f( 1.0f,-1.0f, 0.0f); // Orta Sağ glEnd(); // Çizim Bitti
glTranslatef(3.0f,0.0f,0.0f); // Hareket ettir glBegin(GL_QUADS); // Kare Çiz glVertex3f(-1.0f, 1.0f, 0.0f); // Sol Üst glVertex3f( 1.0f, 1.0f, 0.0f); // Sağ Üst glVertex3f( 1.0f,-1.0f, 0.0f); // Sağ Orta glVertex3f(-1.0f,-1.0f, 0.0f); // Sol Orta glEnd();
//////////////////////////////////////////////////////////////////////////////////////////////////////////
return TRUE; // Devam Et }
Eğer bir süre fonksiyona çalışırsanız,kendiniz nasıl daha detaylı yapabilirsiniz anlarsınız.Bu kodu OpenGL window dersinin render fonksiyonuna eklemeyi deneyin ve çalıştıp çalışmadığını görün. Deneme yanılma yöntemi en iyi öğrenme yoludur. KAYNAK Çeviren: Orhun 'Promethium' YURTTAŞ - Görsel Tasarım - Çeviri Editörü
|