Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment