C++ / OpenGL [ 04 – BeginEnd ]

glBegin(GL_); ,glEnd();

Onceki dersimizde glut icinde gomulmus hazir 3 boyutlu modellerden yararlandik bu dersimizde kendi cizimimiz uzerine yogunlasicagiz.

kullanicagimiz parametreler;

Deger Anlami
GL_POINTS noktalar
GL_LINES 2 noktanin cifti (cizgi)
GL_LINE_STRIP butun noktalarin birleserek cizgi olusumu
GL_LINE_LOOP ilk ve son noktaya gore cizgi cizimi
GL_TRIANGLES her uc nokta birlesiminde bir ucgen
GL_TRIANGLE_STRIP ucgenlerin birlesimi
GL_TRIANGLE_FAN bagli sirali ucgen
GL_QUADS 4 kenarli polygon
GL_QUAD_STRIP baglantili quadslar
GL_POLYGON butun bir alan

chap2-9

chap2-1

caydanlik icin yaptigimiz programda kullandigimiz ana fonksiyonlarimiz burda ayni olacak.

[c language=”++”]

//kullanicagimiz yardimci kutuphaneler
#include <Windows.h>
#include <gl/GL.h>
#include <gl/GLU.h>
//Glut herzaman gl ve glu dan sonra eklenicek
#include <glut.h>

//Kutuphanemizi manual olarak cagiriyoruz
#pragma comment(lib, "glu32.lib")

//Fonksiyonlarimizi Cagiriyoruz
void Init();
void RenderDisplay(void);
void ReShape(GLsizei width, GLsizei height);

//Ana fonksiyonumuz
void main(int argc, char **argv)
{
//glut pencere icin sabit komut
glutInit(&amp;argc,argv);
//goruntu ayari
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
//Penceremizin boyutu x,y
glutInitWindowSize (640, 480);
//Penceremizin ekranda bulunacagi konum x,y sol ust koseden baslayarak
glutInitWindowPosition (100, 100);
//pencereyi olusturur
glutCreateWindow(&quot;BASLIK&quot;);

//Ayarlarimizin tutuldugu fonksiyonumuzu cagiriyoruz
Init();
//kendi cizim fonksiyonumuzu GLUT icin cagiriyoruz
glutDisplayFunc(RenderDisplay);
//pencere boyutu degisikligi icin cagirdigimiz glut fonksiyonumuz
glutReshapeFunc(ReShape);

//GLUT penceresi icin Ana dongu
glutMainLoop();

}
//Ayarlarimizin bulunacagi fonksiyonumuz
void Init()
{
//arkaplani siyaha boyuyoruz
glClearColor (0.0, 0.0, 0.0, 0.0);
//3 boyutlu cisimlerin onde veya arkada olup olmadigini belirler
glEnable(GL_DEPTH_TEST);
}
//Penceremiz yeniden boyutlandirildiginda GLUT tarafindan cagirilacak fonksiyonumuz
void ReShape(GLsizei width, GLsizei height)
{
if (height==0)// 0 a bolunurse
{
height=1;// boyutu 1 yap
}

glViewport (0, 0, (GLsizei) width, (GLsizei) height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45.0, (GLfloat) width/(GLfloat) height, 0.0, 100.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

}

[/c]

yukariya glEnable(GL_DEPTH_TEST); methodunu ekledik.
bu method 3 boyutlu ortamda cisimlerin hangisinin onde oldugunu
hangisinin arkada oldugunu belirlemesini sagliyacak.
Buradan sonra ana cizim fonksiyonumuzu olusturuyoruz

[c language=”++”]
//Ana Cizim fonksiyonumuz
void RenderDisplay(void)
{
//Cizimden once Ekranimizi tamamen derinlik ve renk olarak temizler.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[/c]

Polygon cizimimizi yapiyoruz.Burada pushmatrix ve popmatrixlerimizi
onceki derslerde gordugumuz uzere arasinda kalan hareketleri o matris icin kayit ediyoruz.

[c language=”++”]
//POLYGON CIZIMI
glPushMatrix();
glTranslatef(1,1,-15);
glRotatef(0.0, 0.0, 0.0, 0.0);
// Olusturdugumuz modeli glscalef
//ilen boyut ayarlamasi yapabiliriz.
glScalef(1.0,1.5,0.0);

glColor3f(1,0,0);
glBegin(GL_POLYGON);
glVertex2f(0.0, 0.0);
glVertex2f(0.0, 3.0);
glVertex2f(4.0, 3.0);
glVertex2f(6.0, 1.5);
glVertex2f(4.0, 0.0);
glEnd();
glPopMatrix();
[/c]

glTranslatef ilen polygon cizimimizin yerini degistirdik
Burda gordugumuz yeni method glScalef(x,y,z) methodumuz;
cisimleri olceklendirmemize yarayacak.gl color ilen renk verdik ve
glBegin(GL_POLYGON); // cizime polygon olarak basliyacagimizi belirttik.
//vertexlerimizle noktalari belirledik
glEnd(); ilen cizimi sonuclandirdik.

diger cizimlerimize devam ediyoruz.

[c language=”++”]
//NOKTA CIZIMI
glPushMatrix();
// Noktamizin boyutunu bu kodlar belirleyebiliriz.
glPointSize(5.0);
glTranslatef(-7,2,-15);
glRotatef(0.0, 0.0, 0.0, 0.0);
glColor3f(1,0,0);
glBegin(GL_POINTS);
glVertex2f(0.0, 0.0);
glVertex2f(0.0, 3.0);
glVertex2f(4.0, 3.0);
glVertex2f(6.0, 1.5);
glVertex2f(4.0, 0.0);
glEnd();
glPopMatrix();
[/c]

yukarida gordugunuz kod sayesinde belirledigimiz noktalar
ekranda sadece nokta olarak gozukecekler bu alanda
noktalarimizin boyutunu ayarlamak icin ;
glPointSize(5.0); methodumuzu kullandik noktanin boyutunu 5.0f yaptik.

devam ediyoruz;
ici bos cizgilerin birlesiminden olusan bir ucgen ciziyoruz

[c language=”++”]
//Line cizimlerinin kesikligini belirler
glLineStipple(1, 0x3F07);
glEnable(GL_LINE_STIPPLE);
//

//UCGEN KENAR cizimi
glPushMatrix();
glTranslatef(-0.5,-2.0,0.0);
glRotatef(0.0, 0.0, 0.0, 0.0);
glColor3f(1,1,0);
glBegin(GL_LINE_LOOP);
//ucgen
glVertex3f(-0.5f, 0.5f, -5.0f);
glVertex3f(-1.0f, 1.5f, -5.0f);
glVertex3f(-1.5f, 0.5f, -5.0f);
glEnd();
glPopMatrix();
[/c]

yukarida daha once gormedigimiz bir method kullandik;
glEnable(GL_LINE_STIPPLE); // Belirledigimiz bit oraninda cizilen cizgilerin kesikligini acar.
glLineStipple(1, 0x3F07); // ise asagidaki tablodan secebileceginiz kesit uzunglugunu belirlemenizi saglar.

chap2-2
Ve son olarak 3 boyutlu bir kup cizelim;

[c language=”++”]
glPushMatrix();
glTranslatef(2.0,-2.0,-10.0);
glRotatef(30.0, 0.0, 1.0, 1.0);
glBegin(GL_QUADS);
glColor3f(0.0f,1.0f,0.0f); // Color Blue
glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glColor3f(1.0f,0.5f,0.0f); // Color Orange
glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);
glColor3f(1.0f,0.0f,0.0f); // Color Red
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glColor3f(1.0f,1.0f,0.0f); // Color Yellow
glVertex3f( 1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f,-1.0f);
glColor3f(0.0f,0.0f,1.0f); // Color Blue
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glColor3f(1.0f,0.0f,1.0f); // Color Violet
glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);
glEnd();
glPopMatrix();

//buffer lari cevirir cizimi ekrana doker
glutSwapBuffers();
}
[/c]

Ve cizim fonksiyonumuzu glutswapbuffers ilen kapatiyoruz.
Projemizin son goruntusu;

ders4

Ders sonunda olusturdugumuz projenin .cpp kaynak dosyasini buradan indirebilirsiniz.

ders04

One comment

Leave a Reply

Your email address will not be published. Required fields are marked *