C++ / OpenGL [ 03 – ReShape ]

GLUT ReShape Callback

Bu sayfamizda  ,C++ / OpenGL [ 02 – GLUT ] dersinde olusturdugumuz projenin uzerinden duzeltmeler ve bazi eklemelerle Glut icin olmazsa olmaz bazi fonksiyonlarin uzerine deginecegiz.

kutuphanelerimizi cagiriyoruz.

[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")

[/c]

Asagiya yazacagimiz fonksiyonlarimizi cagiriyoruz,

Ana main fonksiyonumuzu olusturuyoruz

[c language=”++”]
//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;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(&amp;quot;BASLIK&amp;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();

}
[/c]

Ayarlarimizin bulunacagi fonksiyonumuzu olusturuyoruz

[c language=”++”]
//Ayarlarimizin bulunacagi fonksiyonumuz
void Init()
{
//arkaplani siyaha boyuyoruz
glClearColor (0.0, 0.0, 0.0, 0.0);
}

[/c]

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);

//Matriximiz icin kayit aciyoruz
glPushMatrix();
//yapilacak cizimin konumunu kaydirir x,y,z (x sagsol,y asagi yukari,z iceri disari)
glTranslatef(0,0,-1);
//Cisimi dondurmek icin kullanicagimiz kod
glRotatef(0.0, 0.0, 0.0, 1.0);
//suanki rengi kirmiziya donusturur
glColor3f(1,0,0);
//bizim icin kare olusturan kod 4 noktasi icin kordinatlar
glRectf(-25.0, -25.0, 25.0, 25.0);
//Matriximiz icin kayit kapatiyoruz
glPopMatrix();

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

[/c]

Burada kullandigimiz bazi methodlardan

glPushMatrix(); // Olusturacagimiz cizim icin Matrix kaydi aciyoruz

//Buraya gelicek butun kodlar push pop arasinda kayit edilecektir sadece bu matrix icin

glPopMatrix(); // Kayidimizi yapip kapatiyoruz

glRotatef(0.0, 0.0, 0.0, 1.0); // bu kodu nerde kullanirsak altinda kalan cisimler verilen degerde donecektir.(aci,x,y,z)

ornegin ; glRotatef(90.0, 0.0, 0.0, 1.0); // Z ekseninde 90 derece donecektir.

glRotatef(90.0, 0.0, 1.0, 0.0); // Y ekseninde 90 derece donecektir.

glRotatef(90.0, 1.0, 0.0, 0.0); // X ekseninde 90 derece donecektir.

glRectf(-25.0, -25.0, 25.0, 25.0); // gl nin icinde bulunan kare cizdirme fonksiyonu cagiriyoruz.

GLUT icerisinde bulunan 3 boyutlu cisimler

cone icosahedron teapot
cube octahedron tetrahedron
dodecahedron sphere torus

GLUT icinde bulunan bazi cisimleri cizmek icin;

glutWireCube(GLdouble size);

glutSolidCube(GLdouble size);

glutWireSphere(GLdouble radius, GLint slices, GLint stacks);

glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);

Ve son olarak ReShape fonksiyonumuzu olusturuyoruz bu fonksiyonun amaci

Ekran boyutunun degistirilmesi yuzunden goruntunun bozulmasini engellemek

[c language=”++”]

//Penceremiz yeniden boyutlandirildiginda GLUT tarafindan cagirilacak fonksiyonumuz
void ReShape(GLsizei width, GLsizei height)
{
if (height==0)// 0 a bolunurse
{
height=1;// boyutu 1 yap
}

/*Viewport OpenGL nin kullanabilecegi gercek cizim koordinat
alanini belirlemektedir.Egre gercek pencerekoordinatlarindan
daha kucuk bir viewport belirlerseniz cizim daha kucuk olarak olceklenecektir.*/
glViewport (0, 0, (GLsizei) width, (GLsizei) height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

//goruntu ekran ile ortusturulup boyutunun ortada sabit kalmasi icin
// glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
//goruntu alanimiz ve acimiz
gluPerspective(45.0, (GLfloat) width/(GLfloat) height, 0.0, 100.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

}

[/c]

Projemizin son goruntusu;
ders2glut

Ders sonunda olusturdugumuz projenin .cpp kaynak dosyasini buradan indirebilirsiniz.

OpenGL -03

 

Leave a Reply

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