我正在使用OpenGL進行基於2D的遊戲,該遊戲已經開發用於640x480像素的分辨率。因此,設置我的OpenGL雙緩衝這樣的:OpenGL 2D doublebuffer縮放比例
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 640, 480, 0, 0, 1);
glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
這個作品真的很好,我可以畫我所有的精靈和使用硬件背景滾屏加速GL紋理。現在,我還想支持其他窗口大小,即用戶應該能夠以800x600,1024x768等等運行遊戲。因此,所有圖形都應該按照新的分辨率縮放。當然,我可以通過在將紋理繪製爲四邊形時將縮放因子應用於所有頂點來實現此目的。但我不認爲我能夠以這種方式實現像素完美的定位......但像素完美的定位對於2D遊戲當然非常重要!
因此,我想問一下,如果有一個靜態的640×480雙緩衝擁有它只是之前被繪製到屏幕上,即是這樣的比例來工作的可能性:
1)我的雙緩衝會無論實際輸出窗口大小如何,始終爲640x480像素。
2)一旦我調用glfwSwapBuffers(),應將640x480雙緩衝區縮放到可以小於或大於640x480的實際窗口大小。
這是可能以某種方式?我認爲這對我的遊戲來說是最簡單的解決方案,因爲在像素完美定位時手動縮放所有頂點可能會給我帶來一些問題,不是嗎?
謝謝!
謝謝,使用framebuffer繪製紋理,然後使用縮放的四邊形繪製該紋理,這正是我所需要的。硬編碼glOrtho2D()中的像素尺寸的想法直接來自MSDN,請參閱:http://msdn.microsoft.com/en-us/library/windows/desktop/dd374282(v=vs.85).aspx – Andreas
@ Andreas:實際上這些「正確性提示」來自「官方OpenGL編程指南」(又名紅皮書),但已經過時了一段時間了。無論如何,這些建議只適用於你需要像素完美對齊。但是,對於你想要做的事情,你不需要像素完美對齊(像素屏幕空間過濾,後期處理或繪圖用戶界面等需要像素完美對齊)。 – datenwolf