#include<gl/glut.h>
#include <cmath>
GLfloat x=0.0f; // x ekseni kordinat değiştirmek için
GLfloat y=0.0f; // buda y ekseni kordinatları için
void Draw() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Ekranı ve belleği temizler
// Şekilllerimizin X ve Y eksenlerini normal kendimiz çizdirdik... fakat bunları hareket ettirirken...Hepsi bir bütün olarak hareket etmesi için
//yukarıda tanımladığımız x ve y değişkenleri ile topladım...bu x ve y değişkenleri değiştikçe tüm şekil koordine bir şekilde hareket etmiş olacak...
//altta aynı fonksiyonlar hep tekrar ettiği için burrda bir kerede açıklamakta fayda olacfağını düşündüm
// şekili çizmeden önce ona color fonksiyonu(Red green blue sıralaması ile) ile rengini atıyoruz....
// çizeceğimiz şekli begin blogu ile başlayıp end blogu ile bitiriyoruz...
// begine parametre olarak yazdığımız yerde ise şeklimizin tipini belirtiyoruz (çizgi üçgen kare vs.)
// son olarak da Vertex komutu ile cismimizin kordinatlarını belirtiyoruz(x y z)
//vertex de belirttiğimiz her kordinata bi nokta koyar ve onları birleştirerek şeklimizi ortaya koyar
//bunun için sırası önemlidir bi köşeden başlayıp sırayla gidilmelidir...
//aksi takdirde istenmedik sonuçlar doğurabilir...
//mesela benim ilk yaptığım çizimde evin gövdesini çizerken yan dönmüş m harfi gibi çıkmıştı...
//Duman
//j ile olan for halka sayısı için bu örnekte 25 halka var mesela
//alttaki for da ise 360 nokta yani 360 derece ile çemberimizi çiizdiriyoruz
for(int j=0;j<25;j++)
{
glColor3f(0.3,0.6,0.9);
glPointSize(3.0);
glBegin(GL_POINTS);
for(int i = 1; i < 360; i++)
{
float z = 0.025f * sin(((float)i) * 3.14 / 180);
float k = 0.025f * cos(((float)i) * 3.14 / 180);
glVertex2f(z+0.17f-j*0.022+x,k+0.43f+j*0.02+y);
}
}
glEnd();
//Baca
glColor3f(0.3,0.2,0.1);
glBegin(GL_QUADS);
glVertex3f(x+0.12f,y+0.4f,0.0f);
glVertex3f(x+0.2f,y+0.4f,0.0f);
glVertex3f(x+0.2f,y-0.2f,0.0f);
glVertex3f(x+0.12f,y-0.2f,0.0f);
glEnd();
//Çatı
glColor3f(0.9,0.0,0.0);
glBegin(GL_QUADS);
glVertex3f( x-0.25f,y+0.25f, 0.0f);
glVertex3f( x+0.25f,y+0.25f, 0.0f);
glVertex3f( x+0.3f, y+0.1f, 0.0f);
glVertex3f( x-0.3f, y+0.1f, 0.0f);
glEnd();
//Evin dörtgeni
glColor3f(0.7,0.8,0.9);
glBegin(GL_QUADS);
glVertex3f(x-0.3f,y+0.1f,0.0f);
glVertex3f(x+0.3f,y+0.1f,0.0f);
glVertex3f(x+0.3f,y-0.5f,0.0f);
glVertex3f(x-0.3f,y-0.5f,0.0f);
glEnd();
//Kapı
glColor3f(0.0,0.0,0.9);
glBegin(GL_QUADS);
glVertex3f(x-0.02f,y-0.15f,0.0f);
glVertex3f(x+0.23f,y-0.15f,0.0f);
glVertex3f(x+0.23f,y-0.5f,0.0f);
glVertex3f(x-0.02f,y-0.5f,0.0f);
glEnd();
//Pencere
glColor3f(1.0,0.5,0.5);
glBegin(GL_QUADS);
glVertex3f(x-0.25f, y-0.15f,0.0f);
glVertex3f(x-0.05f, y-0.15f,0.0f);
glVertex3f(x-0.05f, y+0.0f,0.0f);
glVertex3f(x-0.25f, y+0.0f,0.0f);
glEnd();
//Perde Soldaki
glColor3f(0.4,0.0,0.0);
glBegin(GL_TRIANGLES);
glVertex3f( x-0.15f, y+0.0f, 0.0f);
glVertex3f( x-0.25f, y+0.0f, 0.0f);
glVertex3f( x-0.25f, y-0.15f, 0.0f);
glEnd();
//Sağdaki Perde
glColor3f(0.4,0.0,0.0);
glBegin(GL_TRIANGLES);
glVertex3f( x-0.15f, y+0.0f, 0.0f);
glVertex3f( x-0.05f, y+0.0f, 0.0f);
glVertex3f( x-0.05f, y-0.15f, 0.0f);
glEnd();
//Kapı Kolu
glColor3f(0.3,0.6,0.4);
glPointSize(4.0);
glBegin(GL_POINTS);
for(int i = 1; i < 360; i++)
{
float z = 0.025f * sin(((float)i) * 3.14 / 180);
float k = 0.025f * cos(((float)i) * 3.14 / 180);
glVertex2f(z+0.17f+x,k-0.35f+y);
}
glEnd();
glFlush();
}
void Initialize()
{
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.5f, 0.0f, 1.0f); // Green Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); //Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
}
//Buradada yön tuşlarımmızı belirledik
//w-a-s-d ve büyük harfleride tanımladık ki capslock açıksa sorun çıkmasın...:)
//buradaki 0.1 değeri ile oynayarak hareket hassasiyetiyle oynayabiliriz.. ben 0.1 i ideal gördüm...
void keybFunc(unsigned char k, int a, int b)
{
if(k == 'd' || k == 'D' ) x += 0.1f;
if(k == 'a' || k == 'A') x -= 0.1f;
if(k == 'w' || k == 'W') y += 0.1f;
if(k == 's' || k == 'S') y -= 0.1f;
glutPostRedisplay();
}
int main(int iArgc, char** cppArgv)
{
glutInit(&iArgc,cppArgv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(600,600);
lutInitWindowPosition(20,20);
glutCreateWindow("Berdem");
Initialize();
glutDisplayFunc(Draw);
glutKeyboardFunc(keybFunc);
glutMainLoop();
return 0;
}