2011-10-18 16 views
5

Verilen bir dosyadan bir dizi bayt RGB yüklediğimi varsayalım.Zorunlu OpenGL dokuları çevrilmeli mi?

OpenGL'nin dokularını "tersine" saklamayı sevdiğini okudum ve görüntülerini saklayan demo programlarını ters çevrilmiş olarak gördüm.

Programımda, yüklü RGB dizi baytını byte ile veya satır satırında mı tersine çevirmeliyim?

cevap

6

Bitmap (.bmp) biçimi, satırları baş aşağı sakladığı için budur. Kiminle geldiğinden emin değilim ama dosya formatı. Peki, evet, kendi .bmp yükleyicinizi kullanırsanız bunu yapmalısınız. Bununla birlikte, daha önce yazmış olanı, sizin için "yukarı-aşağıya" görüntüleyebilirsiniz. Yine, sadece bir .bmp şey. OpenGL, ters çevrilmeyen resimlerde varsayılan olarak çalışır.

İşte biraz hüner: Eğer .bmp yükleyici değiştirmek istemiyorsanız, sizin için görüntüyü çevirmek için OpenGL söyleyebilir:

Ben "varsayılan olarak" ile kastedilen nedir
glMatrixMode(GL_TEXTURE); 
glLoadIdentity(); 
glScalef(1.0f, -1.0f, 1.0f); 
glMatrixMode(GL_MODELVIEW); 

. İsterseniz OpenGL'yi ters çevirebilirsiniz. Ancak, bu yalnızca yalnızca yükleme .bmp dosyalarında çalışır. Diğer dosya formatları satırlarını düzgün bir şekilde saklar. Bu nedenle, ilk yaklaşımı tercih ederim - gerçek bir .bmp yükleyici kullanın.

Daha açıkçası: dosyaları .bmp yüklemek EĞER sen MUST çevirme görüntü ya elle (çoğu .bmp yükleyiciler yapmak) OpenGL göndermeden önce, VEYA için ters çevrilmemiş resim göndermek OpenGL ve yukarıdaki kodu render kodunuzdan önce ekleyin.

+0

Doğru, aslında tüm çevrilmiş görüntüler BMP'leriydi. Ama OpenGL doku koordinatlarını nasıl alır? (0,0) son satırdaki ilk pikselde, ben doğru mu, ve (1,1) ilk satırdaki son piksel mi? Doğru olması için diziyi çevirmem gerekmiyor mu? –

+0

Eh, o bağlıdır! Eğer ham BMP verilerini alır ve OpenGL'ye gönderirseniz, evet, (0,0) aniden ilk satırdaki ilk piksel olur. Eğer tekrar (0,0) ilk satırdaki son piksel haline gelirse, diziyi OpenGL'ye göndermeden önce çevirmeniz gerekir. Bir alternatif, yukarıdaki Doku matrisi ölçeklendirme kodudur. –

+0

@catfish_deluxe_call_me_cd Hayır! (0,0) ilk satırdaki ilk pikseldir. Bu sadece OpenGL'de görüntünün satırları alttan üste doğru sıralanır, ancak orijin hala görüntü verilerinin ilk satırının ilk piksindedir ** siz ** OpenGL'ye gönderirsiniz. –