Bilgisayar Grafikleri Ders 12: OpenGL_5 Örnekler

Slides:



Advertisements
Benzer bir sunumlar
Matlab’da Diziler; Vektörler ve Matrisler
Advertisements

Fonksiyonlar.
DÖRTGENLER.
MATLAB MATLAB İLE GRAFİK.
FIZ 171 GRAFİK ÇİZİM PROGRAMI ORIGIN
Bilgisayar Programlama
BİLGİSAYAR İŞLETMENLİĞİ
void medyan(int cevap[]) { int j; siralama(cevap);
İnönü Üniversitesi Bilgisayar Mühendisliği
Bölüm 2 C Dilinin Temelleri
Bölüm 4 İşlevlerve Modüler Programlama. 1 / 8 İşlev Tanımı /* İşlev açıklama satırı */ ( ) { }
GEOMETRİK ŞEKİLLER.
Dr. Ahmet KÜÇÜKER Sakarya Üniversitesi Mühendislik Fakültesi
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
ÇOKGENLER.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
ÇEVRE.
MPI İle Paralel Programlama Tunahan Altıntop
Bilgisayar Programlama
Bilgisayar Grafikleri OPENGL
Nesneye Dayalı Programlama
Paralel Programlamaya Giriş
FONKSİYONLAR.
Grafik İşlemleri.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Geometri Öğrenme Alanı Temel Beceriler
VİSUAL BASIC İLE GRAFİK ÇİZİMİ
Neler öğreneceğiz Temel Çizimler Üçgen Çizimleri
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
Listeleme Etiketleri.
BM-103 Programlamaya Giriş Güz 2014 (4. Sunu)
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Paralel Programlamaya Giriş
DERS:5 TRİGONOMETRİK FONKSİYONLAR.
ÇEVRE hesabı.
Örnek Adam asmaca oyununun programının yazılması.
Kullanıcı Seçeneklerini Güncelleme Kullanıcı güncelleme işlemi konsol ve grafik ortamdan yapılabilir. Komut Satırı ile Kullanıcı Seçeneklerini Güncelleme.
VERİ YAPILARI İşaretçi Nedir? Nesne Tabanlı Programlama.
Bilgisayar Grafikleri Ders 9: OpenGL_1
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
SAÜ Bilgisayar Mühendisliği 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.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
GEOMETRİK ŞEKİLLER KARE
TEKNİK RESİM Perspektifler.
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
Programlamaya Giriş-I Bölüm-1. Algoritma Algoritma günlük yaşamımızda yaptığımız işler sırasında sıklıkla kullandığımız bir yöntemdir. Algoritma, bir.
Bilgisayar Programlama BIL 107
C Programlama Dili Bilgisayar Mühendisliği.
SketchUp 3D Çizim Programı
DÖRTGENLER-ÇOKGENLER
Pergel Yardımıyla Dik Doğru Çizmek
Kesirler 1/2 1/8 1/3 6/8 3/4.
9. BİR ÇİZİM ORTAMININ YARATILMASI
Bölüm 2 C Dilinin Temelleri
PROGRAMLAMA VE KODLAMAYA GİRİŞ
YAPISAL PROGRAMLAMA Hafta-6
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
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.
C ile Programlamaya Giriş
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Bilgisayar Grafikleri Ders 12: OpenGL_5 Örnekler Doç. Dr. Cemil Öz Bilgisayar Grafikleri Ders 12: OpenGL_5 Örnekler SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

OpenGL Temel Çizim Örnekleri Boş pencere Oluşturma   Pencere oluşturmak için glut(openGL araç takımı) fonksiyonlarını kullanıyoruz. Glut ile işletim sistemi penceresi değil kendi penceremizi oluşturuyoruz. Böylece her işletim sisteminde derlenerek çalıştırılabilir.

#include <windows.h> #include<math.h> #include<gl.h> #include<glu.h> #include<glut.h>   #pragma comment(lib,"opengl32.lib") #pragma comment(lib,"glu32.lib") #pragma comment(lib,"glut32.lib") void ayarlar() { glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT); } void gosterim() glClear(GL_COLOR_BUFFER_BIT); glFlush(); int main(int argc, char** argv) glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); // diplay modunu set etme glutInitWindowSize(800,600); // pencere boyutunu belirleme glutInitWindowPosition(10,10); glutCreateWindow(" Çizim örneği"); ayarlar(); glutDisplayFunc(gosterim); glutMainLoop(); return 0;

Bazı fonksiyonların açıklaması glutInit(&argc, argv): glut fonksiyonlarını başlatmak için kullanılır.   glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB): pencerenin nasıl bir renk kipine, tek veya çift arabellekli olup olmayacağınaveya pencereye derinlik sağlanıp sağlanmayacağı belirlenir. Tek arabellekte çizim komutlarının işlevi hemen uygulanır. Arkasından başka bir komut geldiğinde önceki silinir yerine yeni olanın işlevi görüntülenir. Bu görüntü oluşturmada ekran titremelerine sebep olur. Bu yüzden çift arabellek kullanılır. Böylece titreşim engellenir. Çizimler ayrı bir çizim belleğinde gerçekleştirilir tamamlandığında ekrana bastırılır. GLUT_RGBA : Kırmızı, yeşil, mavi ve alfa(geçirgenlik) renk modunda pencere açar. GLUT_RGBA : Kırmızı, yeşil, mavi renk modunda pencere açar. GLUT_INDEX :Renk sıralama kipini seçer. GLUT_DOUBLE :Çift ara bellekli bir pencere oluşturur. GLUT_SINGLE : Tek ara bellekli bir pencere oluşturur. GLUT_ACCUM :ara bellekli bir pencere açar ve depolar. GLUT_ALPHA : renk arabelleğinde alfa bileşenli bir pencere oluşturur. GLUT_DEPTH : derinlik arabellekli bir pencere oluşturur.

glutInitWindowSize(800,600): fonksiyon ile pencere boyutları belirlenir.pencere boyutu 800’e 600 piksel olarak verilmiştir. glutInitWindowPosition(200,250): penceremizin konumlanacağı ekran koordnatını belirtiriz.   glutCreateWindow(" Çizim örneği"): Çizim örneği başlıklı bir pencere verilen boyut, pozisyon ve özellikte oluştururlur.

NOKTA verilecek program oluşturulan pencereye dört adet nokta oluşturur. Bilindiği üzere OpenGL komutları glBegin() ile başlar ve glEnd() ile biter. Burada noktaçizmek için glBegin(GL_POINTS);//Nokta için glVertex2f(0.5, 0.5);glVertex2f(0.0, 0.5); glVertex2f(0.5, 0.0);glVertex2f(0.0, 0.0); glEnd(); ifadeleri kulanılacaktır. glVertex2f(0.5, 0.5) komutu nokta olduğunu, parametrelerin ondalık olduğunu ve noktanın x koordinatının 0.5, y koordinatınında 0.5 olduğunu belirtir.

#include <math.h> #include <glut.h>   void Ciz(void) { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3f(1.0,0.0,0.0);//kırmızı renk glBegin(GL_POINTS);//Nokta için glVertex2f(0.5, 0.5);glVertex2f(0.0, 0.5); glVertex2f(0.5, 0.0);glVertex2f(0.0, 0.0); glEnd();   glutSwapBuffers(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("Üçgen"); glutDisplayFunc(Ciz); glutIdleFunc(Ciz); glEnable(GL_DEPTH_TEST); glutMainLoop();

Çizgi(doğru) Çizimi Verilecek olan program oluşturulan pencereye doğru çizer. Bilindiği üzere OpenGL komutları glBegin() ile başlar ve glEnd() ile biter. Burada doğru çizmek için glBegin(GL_LINES);//çizgi çizmemize yarayan komut glVertex2f(-0.5,0.0); glVertex2f(0.5,0.0); glEnd();   ifadeleri kulanılacaktır. Bilindiği üzere iki nokta birleştirilerek bir doğru çizilebilir. Burada verilen iki nokta birleştirilerek bir doğru elde edilir

#include <math.h> #include <glut.h>   void Ciz(void) { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3f(1.0,0.0,1.0);//Mor renk glBegin(GL_LINES);//çizgi çizmemize yarayan komut glVertex2f(-0.5,0.0); glVertex2f(0.5,0.0); glEnd(); glutSwapBuffers(); }  void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("Üçgen"); glutDisplayFunc(Ciz); glutIdleFunc(Ciz); glEnable(GL_DEPTH_TEST); glutMainLoop();

Üçgen çizimi   verilecek program oluşturulan pencereye üçgen çizer. Bilindiği üzere OpenGL komutları glBegin() ile başlar ve glEnd() ile biter . burada üçgen çizmek için glBegin(GL_TRIANGLES);//üçgen çizme komutu glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); ifadeleri kulanılacaktır. Bilindiği üzere üç nokta birleştirilerek bir üçgen çizilebilir. Burada verilen üç nokta birleştirilerek bir üçgen elde edilir programın tamamı ise aşağıda verilmiştir.

#include <math.h> #include <glut.h>   void Ciz(void) { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3f(1.0,1.0,0);//sarı renk glBegin(GL_TRIANGLES);//üçgen çizme komutu glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glutSwapBuffers(); }    void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("Üçgen"); glutDisplayFunc(Ciz); glutIdleFunc(Ciz);   glEnable(GL_DEPTH_TEST); glutMainLoop();

KARE VEYA DİKDÖRTGEN verilecek program oluşturulan pencereye Kare veya dikdörtgen çizer. Bilindiği üzere OpenGL komutları glBegin() ile başlar ve glEnd() ile biter . burada Kare veya dikdörtgen çizmek için glBegin(GL_QUADS); glVertex2f(1.0,1.0); glVertex2f(1.0,0.0); glVertex2f(0.0,0.0); glVertex2f(0.0,1.0); glEnd();   ifadeleri kulanılacaktır. Bilindiği üzere dört nokta birleştirilerek bir dörtgen çizilebilir. Burada verilen dört nokta birleştirilerek bir dörtgen elde edilir. glBegin(GL_QUADS) fonksiyonun içerisine parametre olarak GL_QUADS verilmektedir.

#include <math.h> #include <glut.h>   void Ciz(void) { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3f(1.0,0.0,1.0);//Mor renk glBegin(GL_QUADS); glVertex2f(1.0, 1.0); glVertex2f(1.0, 0.0); glVertex2f(0.0,0.0); glVertex2f(0.0,1.0); glEnd(); glutSwapBuffers(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("Üçgen"); glutDisplayFunc(Ciz); glutIdleFunc(Ciz); glEnable(GL_DEPTH_TEST); glutMainLoop();

Çember çizimi   Çember çizimi, dörtgen veya üçgen çizme gibi basit koordinatları girilerek oluşturulan bir çokgen değildir. Kareyi düşünürsek dört noktadan oluşur, noktaları artırırsak bu çembere benzeyecektir. Dolayısı ile belli açılarda noktalar çizilir ve bunlar doğrularla birleştirilirse çember elde edilebilir. X=a*cos(x) Y=b*sin(x) X açı, a ve b ise parametredir. A ve b eşit ise çember aksi durumda elips olur. Yani çember için X=r*cos(x) Y=r*sin(x) Diyebiliriz Sin() ve cos() fonksiyonları Math.H kütüphanesinde ve radyan cinsinden açı değerleri ile çalışmaktadır. Bu yüzden açı değerini radyana dönüştürmek gerekir. 180 Pİ ise Y x dir. Ozaman da x=y*Pİ()/180 den verilen y cinsinden açının x radyan karşılığını bulabiliriz.

Burada glBegin(GL_LINE_LOOP); for(aci=0;aci<=360;aci++) { radyan=aci*3.1416/180; glVertex2f(cos(radyan)*0.6,sin(radyan)*0.6); } glEnd()   İçi boş cember çizecektir. Yani noktaları bir birine bağlayacaktır. Çemberin dolu olabilmesi için glBegin(GL_POLYGON); GL_POLYGON parametresi ile içi dolu daire çizilecektir.

#include<math.h> #include<glut.h>   void ayarlar() { glClearColor(1.0,1.0,1.0,1.0); glShadeModel(GL_FLAT); glPolygonMode(GL_FRONT,GL_FILL); } void cember() glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0,0.0,1.0); double radyan=0; int aci=0; glBegin(GL_LINE_LOOP); for(aci=0;aci<=360;aci++) radyan=aci*3.1416/180; glVertex2f(cos(radyan)*0.6,sin(radyan)*0.6); glEnd() glFlush();

int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); // diplay modunu set etme glutInitWindowSize(800,600); // pencere boyutunu belirleme glutInitWindowPosition(10,10); glutCreateWindow(" cember örneği"); ayarlar(); glutDisplayFunc(cember); glutMainLoop(); return 0; }