Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.

Benzer bir sunumlar


... konulu sunumlar: "Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz."— Sunum transkripti:

1 Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

2 OpenGL Etkileşim Örnekleri klavye fonksiyon ve normal tuşlarını kullanarak çizim nesneleri üzerinde etkileşim sağlayan programlar örnekleri? ARKA PLAN RENGİ DEĞİŞTİRMEK İÇİN Burada arka plan renginin değiştirilmesine bir örnek verilmiştir. glClearColor(1.0, 0.0, 1.0, 0); ifadesi ile zemin rengi değiştirilebilir, Kırmızı, mavi ve yeşil renk bileşenleri 0 ile 1 arasında verilerek milyonlarca renk elde edilebilir. Ancak çizim rengi ile zemin rengi aynı olmamalıdır. Bu durumda çizim nesneleri görülmez. glClearColor (kirmizi, yesil, mavi); Şeklinde değişken parametre kullanolarak bu parametrelerin klavye tuşları ile değiştirilmesi sağlanır böylece şeklin rengi etkileşimli olarak değiştirilir.

3 Klavye tuşları kullanarak Çizim nesneleri ile etkileşim Etkileşim grafikte önemli konulardan biridir. oYun, sanal gerçeklik bilimsel görselleştirmelerde önemi dahada büyüktür. Burada klavye tuşlarını dinlemek için iki fonksiyondan bahsetmiştik. Bunlar glutKeyboardFunc(NormalTusİsle)ve glutSpecialFunc(OzelTusİsle) Bu fOnksiyonların parametreleri sizin klavyeyi dinlemek için kullandığınız fonksiyonlara verdiğiniz isimler olmalıdır. Burada glutKeyboardFunc ile normal tuşlar dinlenir. glutSpecialFunc ilede fonksiyon ve kontrol tuşları dinlenir. verilecek programda f1,f2 ve f3 fonksiyon tuşları ile çizilen üçgenin rengi değiştirilirken, sol,sağ,üst ve alt ok tuşları ile üçgenin konumu değiştirilmekte böylece üçgen sağa,sola,aşağı ve yukarı hareket ettirilmektedir. ESC tuşu ilede program sonlandırılır. Üçgenin hareket ettirilmesindeki, önemli özellik üçgeni oluşturan parametreleri sabir sayı değil tuşlarla değeri değiştirilebilen değişken değerleri olmasıdır. Üçgenin renginin değiştirilmesinin sebebi ise aynı şekilde renk bileşenlerinin sabit değil fonksiyon tuşları ile değiştirilebilen değişkenler olmasıdır.

4 #include //#include float red=1.0, blue=1.0, green=1.0; float x1=-1.0,y4=0.0,z1=0.0,x2=1.0,y2=0.0,z2=0.0,x3=0.0,y3=1.0,z3=0.0; void Ciz(void) { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); // Renk bu kodla belirtilir. // Bu koddan sonraki bütün şekiller bu renge boyanır. glColor3f(red,green,blue); //parametrelerimize göre bi üçgen çiziyoruz. glBegin(GL_TRIANGLES); glVertex3f(x1/10.0,y4/10.0,z1/10.0); glVertex3f(x2/10.0,y2/10.0,z2/10.0); glVertex3f(x3/10.0,y3/10.0,z3/10.0); glEnd(); glutSwapBuffers(); }

5 void OzelTusİsle(int key, int x, int y) { switch(key) { case GLUT_KEY_F1 : red = 1.0; green = 0.0; blue = 0.0; break; case GLUT_KEY_F2 : red = 0.0; green = 1.0; blue = 0.0; break; case GLUT_KEY_F3 : red = 0.0; green = 0.0; blue = 1.0; break; case GLUT_KEY_LEFT: //x parametreleri azaltılıyor dolayısıylada şekil sola kaydırılıyor. x1=x1-1.0;x2=x2-1.0;x3=x3-1.0;break; case GLUT_KEY_RIGHT: //x parametreleri arttırılıyor dolayısıylada şekil sağa kaydırılıyor. x1=x1+1.0;x2=x2+1.0;x3=x3+1.0;break; case GLUT_KEY_UP: //y parametreleri arttırılıyor dolayısıylada şekil yukarı kaydırılıyor. y4=y4+1.0;y2=y2+1.0;y3=y3+1.0;break; case GLUT_KEY_DOWN: //y parametreleri azaltılıyor dolayısıylada şekil aşşağıya kaydırılıyor. y4=y4-1.0;y2=y2-1.0;y3=y3-1.0;break; }

6 //normal tuş işleyen fonksiyonumuz void NormalTusİsle(unsigned char key, int x, int y) { if (key == 27) //Esc tuşu exit(0); }

7 void main(int argc, char **argv) { glutInit(&argc, argv); // This is where we say that we want a double buffer glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA); //pencerenin ekrandaki yeri glutInitWindowPosition(100,100); //Pencerenin boyutu glutInitWindowSize(320,320); //pencere bu kod ile oluşturuluyor. glutCreateWindow("Üçgen"); glutDisplayFunc(Ciz);//DisplayFunc render için gereklidir glutIdleFunc(Ciz);//uygulama işlem yapmaz iken çagrılır. // normal tuş olaylarını işleyebilmemizi saglayan fonksiyon.normalden kasıt numaralar harfler ve ascii kodu olan tuşlar. glutKeyboardFunc(NormalTusİsle); //özel tuş olayları ise bu fonksiyonla işlenir.özel tuşlar aşşagıda verilmiştir. glutSpecialFunc(OzelTusİsle); //Opengl hangi objelerin önde hangilerinin arkada oldugunu bilmez bunu manuel olarak ayarlamanız gerekir.Aşşagıdaki kod ile. glEnable(GL_DEPTH_TEST); glutMainLoop();//bu kod ise programı bitmeyen ve bir sonraki işlemi bekleyen bir döngüye sokuyor. }

8 Diğer özel tuşların kullanılması için gerekli anahtar kelimeler Anahtar kelimeGörevi GLUT_KEY_F1F1 function key GLUT_KEY_F2F2 function key GLUT_KEY_F3F3 function key GLUT_KEY_F4F4 function key GLUT_KEY_F5F5 function key GLUT_KEY_F6F6 function key GLUT_KEY_F7F7 function key GLUT_KEY_F8F8 function key GLUT_KEY_F9F9 function key GLUT_KEY_F10F10 function key GLUT_KEY_F11F11 function key GLUT_KEY_F12F12 function key GLUT_KEY_LEFTLeft function key GLUT_KEY_RIGHTRight function key GLUT_KEY_UPUp function key GLUT_KEY_DOWNDown function key GLUT_KEY_PAGE_UPPage Up function key GLUT_KEY_PAGE_DOWNPage Down function key GLUT_KEY_HOMEHome function key GLUT_KEY_ENDEnd function key GLUT_KEY_INSERTInsert function ke

9 Dönen Üçgen programı #include float angle=0.0;// Bütün değişkenlere 1.0 atanıcak yani, üçgenimizin rengi beyaz olacak float red=1.0, blue=1.0, green=1.0; void BoyutDegis(int w, int h) { // Pencere çok küçüldüğünde 0 a bölümü engellemek için // (Bir pencerenin genişliğini sıfır yapamazsınız). if(h == 0) h = 1; float ratio = 1.0* w / h;//oran ayarlanıyor // Koordinat sistemi ayarlanmadan önce resetleniyor glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Set the viewport to be the entire window glViewport(0, 0, w, h); // Dogru olan perspektif ayarlanıyor gluPerspective(45,ratio,1,1000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0,0.0,5.0, //kameranın yeri,baktımız nokta,up vektörü 0.0,0.0,-1.0, 0.0f,1.0f,0.0f); }

10 void Ciz(void) { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(angle,0.0,1.0,0.0);//şekli döndürmeye yarayan komut (0.0,1.0,0.0 y ekseni etrafında dönecegini gösteriyor) glColor3f(red,green,blue); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glPopMatrix(); angle++;//açıyı arttırıyoruz glutSwapBuffers(); }

11 void OzelTusIsle(int key, int x, int y) { switch(key) { case GLUT_KEY_F1 : red = 1.0; green = 0.0; blue = 0.0; break; case GLUT_KEY_F2 : red = 0.0; green = 1.0; blue = 0.0; break; case GLUT_KEY_F3 : red = 0.0; green = 0.0; blue = 1.0; break; } void NormalTusIsle(unsigned char key, int x, int y) { if (key == 27) exit(0); }

12 void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("Dönen Üçgen"); glutDisplayFunc(Ciz); glutIdleFunc(Ciz); //pencere boyutu değiştiğinde şekilde bozulmalar olur //bunu engellemek için aşağıdaki fonksiyon kullanılır glutReshapeFunc(BoyutDegis); glutKeyboardFunc(NormalTusIsle); glutSpecialFunc(OzelTusIsle); glEnable(GL_DEPTH_TEST); glutMainLoop(); }


"Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz." indir ppt

Benzer bir sunumlar


Google Reklamları