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

Slides:



Advertisements
Benzer bir sunumlar
EKRAN ÇIKTISI.
Advertisements

JavaScript Birinci Hafta.
Oyun Programlama (Grafiklere Giriş)
MATLAB MATLAB İLE GRAFİK.
ADOBE FİREWORKS CS5 PROGRAMA GENEL BAKIŞ.
FIZ 171 GRAFİK ÇİZİM PROGRAMI ORIGIN
Bilgisayar Programlama
OpenGL 2.x II İnönü Üniversitesi.
İnönü Üniversitesi Bilgisayar Mühendisliği
Bölüm 2 C Dilinin Temelleri
Bezier Eğrileri ve Yüzeyleri
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 3: Döngüler
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
MATLAB’ de Programlama
Program Kontrol İfadeleri
CSS Birimleri.
Erişim Denetimi, Fonksiyon
Fonksiyonlar.
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 9. Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1,
MPI İle Paralel Programlama Tunahan Altıntop
Bilgisayar Grafikleri OPENGL
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Nesneye Dayalı Programlama
Paralel Programlamaya Giriş
FONKSİYONLAR.
Kontrol Yapıları ve Döngüler
İNTERNET PROGRAMLAMA - 1
JAVA’DA DÖNGÜLER.
Algoritma & Programlama
OPENCV İLE OTOMATİK ARABA PLAKA TANINMASI
TEMEL SAYFA YAPISI İŞLEMLERİ
Grafik ve Animasyon-II FLASH CS5 Öğr.Gör. Onur BULUT.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Fonksiyonlar
UYGULAMALARLA İLGİLİ KOMUTLAR SHELL APPACTIVATE ENVIRON DOEVENTS GİBİ KOMUTLARDIR...
Grafik ve Animasyon-II
VERİ YAPILARI İşaretçi Nedir? Nesne Tabanlı Programlama.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bilgisayar Grafikleri Ders 12: OpenGL_5 Örnekler
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Bilgisayar Grafikleri Ders 4: 2B Homojen koordinat
BİLİŞİM TEKNOLOJİLERİ
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bilgisayar Grafikleri Ders 10: OpenGL_2
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
4. Hafta1 4. HAFTA. 4. Hafta2 Fonksiyonlar  Büyük problemler, küçük parçalara bölünerek kolay çözülür  Yazılımlar benzer modüller içerirler  Hata ayıklama.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BİLGİSAYAR GRAFİĞİ Ders 5:PROJEKSİYONLAR
Fonksiyonlar.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Hafta2 Rekürsif Algoritmalar
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
Bölüm 4 Seçme Komutları Alıştırmalar
Örnek Sorular Bilgisayar Programlama BIL 107. Soru 1: Ekran çıktısında 66 yazması için boşlukları doldurunuz ______ i = 'A'; printf(____, i__); CEVAP:
Bölüm 2 C Dilinin Temelleri
C Programlama Dili Bilgisayar Mühendisliği.
Grafik ve Animasyon-II
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
Bölüm 2 C Dilinin Temelleri
YAPISAL PROGRAMLAMA Hafta-6
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
5. FONKSİYONLAR VE ALT PROGRAMLAR
Bölüm 2 C Dilinin Temelleri
FIZ 171 GRAFİK ÇİZİM PROGRAMI ORIGIN. Temel bilimlerde yapılan bilimsel çalışmalarda yaygın olarak kullanılan grafik programlarından biri ORIGIN’dır.
Show Turtle = ST (Kalemi göster) Kullanımı ST
Sunum transkripti:

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

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.

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.

#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(); }

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

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

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. }

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

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

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

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

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