2012-08-10 119 views
2

我想很快爲iOS創建一個簡單的繪圖應用程序,但是我無法完成繪圖工作 - 以便保存每個圖層上的內容並還原圖層。它看起來像所有圖層保存相同的像素。如何在iOS上使用OpenGL ES實現多層次繪圖?

這個想法是有三層,並使用OpenGL ES來繪製每一層。在這方面沒有任何經驗,我只是平鋪了三個UIViews,併爲每個UIView(本教程的一個修改版的PaintingView)添加了一個OpenGL繪圖畫布。當用戶交換繪圖層時,我只是禁用其他圖層上的用戶交互。

通過這種方法,我經歷了許多我認爲源於我的方法的怪癖。所以現在,我認爲我應該在同一個PaintingView中製作三個全屏緩衝區,並在它們之間切換OpenGL。

我在做些什麼?有沒有人有辦法可行?

任何關於主題的內容都可能有所幫助。謝謝。

+0

爲什麼你需要三層? – 2012-08-13 19:45:04

+0

爲什麼不看看coreGraphic框架?它由蘋果有據可查,應該做你想做的。 – geminiCoder 2012-08-15 11:16:45

+0

我與@ geminiCoder - 我認爲OGL將比使用核心動畫層+核心圖形 – nielsbot 2012-08-20 02:43:44

回答

2

您可以製作兩個不同的幀緩衝區:一個用於繪製屏幕,​​另一個用於繪製紋理。 然後,你可以製作3種不同的紋理,它們將是你的圖層。吸引他們。 最後,你可以畫出你擁有的第一幀緩衝區的紋理並出現在屏幕上。

您的抽獎週期會水木清華這樣的:

  • 綁定RenderToTextureFramebuffer
  • 重視texture1到RenderToTextureFramebuffer
  • 吸引你層想要的東西1
  • 附加紋理2至RenderToTextureFramebuffer
  • 畫什麼你想在第2層
  • 將texture3附加到RenderToTextureFramebuffer
  • 吸引你3層
  • 綁定RenderToScreenFramebuffer
  • 綁定texture1
  • 平局texture1(你的層1)
  • 綁定紋理2
  • 繪製紋理2(你的二層)
  • 綁定texture3
  • 想要什麼
  • 繪製紋理3(您的圖層3)
  • 在屏幕上呈現最終圖片
+0

更多的工作我遵循上述過程。我得到的問題是,我必須通過調用glClear(GL_COLOR_BUFFER_BIT),然後繪製到屏幕,在每一幀不斷重繪圖層到屏幕。這會導致閃爍效果。我做錯了什麼或者這是可以預料的? – Amendale 2014-09-05 04:08:04

+0

Amendale,在繪製之前重新繪製每一幀的畫面並調用glClear(GL_COLOR_BUFFER_BIT)即可,並且不應導致閃爍。可能是你的緩衝區有問題。可能你應該開始另一個問題,並在那裏發佈你的代碼,這樣人們可以更好地理解你的問題。 – Seify 2014-09-05 07:47:54

0

具有畫家的所有功能 - 撤消/重做等 恕我直言,你需要有幾個圖形對象數組,並在每個渲染過程中遍歷它們。

+0

他可以將邏輯部分與圖形分離並保留操作歷史,並根據當前邏輯狀態重繪場景。 – brigadir 2012-08-20 15:01:39