我正在使用OpenGL,我想反轉圖像。於是我就在這裏,問了一個問題,最後我有下面的代碼:OpenGL垂直翻轉:-360 + -360 = 0?
glMatrixMode(GL_PROJECTION);
glScalef(-1,1,1);
glTranslatef(-width(),0,0);
從我從此明白,每一個像素的位置被顛倒,這樣是對圖像的右側像素現在處於相同的絕對位置,但是是圖像的左側,所以我必須將整個事物移回像它的寬度一樣多的像素:360(這是「畫布」的大小,因此在函數的片段中,函數正在使用width()
)!所以要撤消這個過程,我會再次反轉圖像,然後將它移回到它來自的位置:
glMatrixMode(GL_PROJECTION);
glScalef(-1,1,1);
glTranslatef(width(),0,0);
不,黑屏。我必須做兩次完全相同的事情來撤消翻轉:我每次翻轉圖像時都必須移動-360。爲什麼?
如果您的圖像位於0 <= x <= w'中,則翻轉('glScalef(-1,1,1)')翻轉每個像素的x座標的符號,因此您的圖像現在在'-w <= x <= 0'中,由'-w'翻譯將其移回到視口中。如果在第二次翻轉後用'w'翻譯,則將其從視口中移出,而不是移到視口中。 –