1砍濒、觸摸點插值
使用GL_LINES方式繪制在曲線場景通常有生硬過渡問題,所以一般不用這種實現(xiàn)姓赤。
筆畫的光滑程度取決于觸摸點的數(shù)量刊苍,用戶快速劃去手指時既们,無論iOS或是Android,通常隔16毫秒反饋給我們一個觸摸點正什。更糟糕的是啥纸,Android的觸摸事件回調(diào)相當不穩(wěn)定,時快時慢的婴氮。顯然斯棒,快速滑動的場景由于點數(shù)少,繪制出來的筆畫是相當簡陋的主经。解決辦法是進行插值得到更多點荣暮,比如A C2 Four-Point Subdivision Scheme with Fourth Order Accuracy and its Extensions。
2罩驻、觸摸點坐標轉(zhuǎn)換與歸一化
(一)歸一化
是否在采集觸摸點的過程中進行歸一化穗酥,是個容易引起爭論的問題。為了減少CPU的計算量惠遏,在頂點著色器做轉(zhuǎn)換更合理砾跃,而且投影矩陣本身就能處理這一問題。
(二)坐標轉(zhuǎn)換
比如從UIView坐標系轉(zhuǎn)成OpenGL窗口坐標系节吮,這一步用CPU或GPU處理抽高,則不那么關(guān)鍵,我主觀感覺減法比矩陣乘法消耗少些透绩∏搪睿考慮到GLSL很可能用硬件實現(xiàn),也許GLSL實現(xiàn)矩陣乘法消耗更少帚豪。
3碳竟、動態(tài)改變一條曲線的特征
因OpenGL ES 2.0及Android不同廠家的限制,實現(xiàn)此功能則沒iOS那么方便地使用紋理進行數(shù)據(jù)的讀寫志鞍。使用數(shù)組方案需要花時間處理數(shù)組索引瞭亮,比如GLSL實現(xiàn)整數(shù)取模以及索引越界。另一個問題是固棚,紋理設(shè)置了線性過濾统翩,那么數(shù)組的實現(xiàn)方案就得在頂點著色器中自己實現(xiàn)線性插值。最直接的線性插值當然是f(x) = ax + (1 - a)y
此洲。但是厂汗,每個GPU廠家的OpenGL驅(qū)動具體實現(xiàn)是否如此,只能通過實驗去驗證呜师。假設(shè)娶桦,我們需要非線性插值的結(jié)果,那可以通過引入三角函數(shù)或指數(shù)等計算。
4衷畦、多次繪制降低性能消耗
在一些平行直線場合栗涂,glScissor
可減少些性能消耗,還在驗證祈争。