Benim satın aldığım OpenGL kitabı sadece glVertex3f() fonksiyonunu kullanmış.
400x400 'lük bir ekranda çalıştığımızı düşünelim. (0, 0) noktası ekranın alt sol köşesi olsun. (100, 50) 'e bi nokta koymak için glVertex3f(-0.5f, -0.25f, 0.0f); fonksiyonunu çağırırız. Buraya kadar herşey normal...
Bir 100x100 'lük .bmp dosyasını ekrana taşımak isteyelim. glVertex3f() fonksiyonuyla bunu gerçekleştirmek, fazladan bir dönüşüm fonksiyonu kullanmadan, imkansızdır. Çünkü ekranın üzerindeki koordinatlar INT tanımlıdır. Fakat glVertex3f() fonksiyonu sadece GLfloat tip parametre kabul ediyor. Yani işler karışıyor.
glVertex3i(); fonksiyonunu kullanmayı denedim, fakat ekranda birşey göremedim. Aranızda bu fonksiyonun nasıl kullanıldığını bilen var mı?
Ekranda herhangi bir konuma vertex yerleştirmek için INT tip parametre kabul eden bir fonksiyon mevcut mu?
Örnek : glVertex??(100, 50); ya da glVertex??(100, 50, 0);
vertex fonksiyonları o anki belirlenen uzayda çalışır yani senin birim vektörün identity matrix şeklinde ayarlanmış ise normal bir 3 boyutta çalışıyorsun ancak scalef() gibi fonksiyonlar ile uzayın birim vektörlerini değiştiriyorsun ve vertexler farklı yerlerde görünüyor. yani senin fonksiyon değil uzay değiştirmen gerekiyor. orthographic uzayda 2 boyutlu uzayda gibi çalışabilirsin. bunu yapmak için Set2D() ve Set3D() gibi fonksiyonlar kullanırsak:
şeklinde bir kod yazarsak ekrana (x,y) pozisyonunda (w,h) boyutlarında bir kare çizmiş olursun,en basit şekli bu; sanırım yanlış bişey yok.
texture koordinatlarını çıkartmak sana kalsın..
kolay gelsin..
opengl yi bilmem ama bu sitede http://www.koders.com bir sitenin adı geçmişti güzel bir site programcılar için süper bir arama motoru
bilmiyorum işine yarar belki çıkan sonuçlar
Kayıt: Jun 10, 2004 Mesajlar: 290 Nereden: İstanbul // Üsküdar
Tarih: Fri Oct 14, 2005 3:20 pm Mesaj konusu:
öncelikle f -> float, i -> int, d -> double demektir. yani çağırdığın glVertex?? fonksiyonundaki son harf i ise alacağı değerler integer olacaktır d ise double f ise float. buraya kadar herşey tamamsa glVertex3i'yi neden çalıştıramadığın hakkındaki fikrimi beyan edeyim. Öncelikle eğer glVertex3f'e verdiğin değerlerle aynısını veriyorsan glVertex3i'ye bir warning gelmeli zaten derleme sırasında ya da direk bir error cannot convert from double to GLint tarzından. şimdi integerlar tam sayılardır 1 3 4 5 gibi integerlar hiçbir zaman virgüllü sayı değerleri alamazlar 3,4 5,6 gibi bu sebeptendir. son olarak 0.5f gibi bir sayıyı direk integerda kullanamazsın sonundaki f bunun bir float olduğunu gösterir yani C++'ın float'u double'dan ayırması için kullanılan bişi.
Gelelim şu resim bastırma olayına. Örnek kod vereyim istersen inceleyip çözmeye çalış çözemezsen seve seve anlatırım yeter ki sor...
glOrtho(0, 400, 400, 0, -1, 1);
//ortografik mod yakın = -1 ve uzak = 1
//bu sayede bire bir bir pencere koordinat
//koordinat sistemin olur ancak y ekseni opengl
//koordinat sistemi gereğince tam ters bir
//şekilde çalışır mesela gdi'da 320 200 bir
//ekranda 0 0 koordinatlarında bulunan bir
/obje opengl'de ortografik mod -1 ve 1 ken 320 200 pozisyonlarındadır
//yalnız dikkat gdi objenin sol üst köşesini 0 0 kabul eder fakat opengl
//objenin sol alt köşesini 0 0 kabul eder bu durumda 320 200 deki bir
//obje ekran dışına çıkacaktır o yüzden y'den objenin yüksekliği kadar
//çıkartman gerekir bu durumda 320 200 bir ekranda gdi'ın 0 0'ında
//ogl'de bu koordinatlar 320 200-objHeight olacaktır
işte bu kadar umarım işini görür bu arada kaplama bind etmeyi falan öğrenmişsindir kaplamayı bind et o id'yerine senin kaplama id'n gelecek.
Hadi kolay gelsin
ya arkadaşlar bu vertx nedir ne işe yarar bir yazınya site sahibi bir dersler konusu yapsın bizde öğrenelim sizin yazdıklarınızı okuyunca kafam şişiyor yaa
Bu forumda yeni konular açamazsınız Bu forumdaki mesajlara cevap veremezsiniz Bu forumdaki mesajlarınızı değiştiremezsiniz Bu forumdaki mesajlarınızı silemezsiniz Bu forumdaki anketlerde oy kullanamazsınız