我最近在繪畫應用程序中實現了縮放功能時出現了一些問題。請讓我開始給你一些背景資料。在OpenGL中放大/縮小和繪畫
首先,我開始修改Apple的glPaint演示程序。我認爲這是一個很好的來源,因爲它告訴你如何設置EAGLView,等等......
現在,我接下來想要做的是實現縮放功能。在做了一些研究之後,我嘗試了兩種不同的方法。
1)使用glOrthof
2)改變我EAGLView的幀大小。
雖然這兩種方式讓我完全放大/縮小,我遇到不同的問題,而在放大時,它實際上涉及到繪畫。
當我使用(1),我要呈現這樣的觀點:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(left, right, bottom, top, -1.0f, 1.0f); //those values have been previously calculated
glDisable(GL_BLEND);
//I'm using Apple's Texture2D class here to render an image
[_textures[kTexture_MyImage] drawInRect:[self bounds]];
glEnable(GL_BLEND);
[self swapBuffers];
現在,讓我們假設我放大一點,然後我畫,然後我想再次縮小。爲了得到這個工作,我需要確保「kTexture_MyImage」總是包含最新的變化。爲了做到這一點,我需要在更改完成後捕獲屏幕內容並將它們與原始圖像合併。這裏的問題是,當我放大時,我的屏幕只顯示圖像的一部分(放大),我還沒有找到正確的方法來處理這個問題。
我試圖計算屏幕的哪個部分被放大,然後進行捕獲。之後,我會將此部分調整爲原始大小,並使用另一種方法將其粘貼到原始圖像的正確位置。
現在,我可以更詳細地瞭解我是如何實現這一目標的,但它非常複雜,我想,必須有一個更簡單的方法。已經有幾個應用程序,完全可以做,我試圖實現,所以它一定是可能的。
就方法(2)而言,我可以避免大部分上述情況,因爲我只更改了EAGLView窗口的大小。但是,在繪畫時,筆畫遠離他們預期的位置。我可能需要在繪畫時考慮縮放級別,並以不同的方式重新計算CGPoint。但是,如果你在過去做過類似的事情,或者可以給我一個提示,我如何實現放大到我的繪畫應用程序,我真的很感激它。
在此先感謝。