原创 內存分配器的一些資料和技巧

有時候系統自帶的內存分配器性能較低,原因是分配器本身按照通用目的設置,而程序通常有些特定的分配模式,不能對這些分配模式進行特定優化,此時程序可能就有必要開發自定義的分配器來針對這些模式進行優化。 內存分配和釋放 假設一開始我們有一

原创 glPolygonOffset中的公式的一些思考

glPolygonOffset可以用於對光柵化後的fragment深度進行偏移,在後續depth test時將使用偏移後的深度。這個函數很常見的一個應用是在shadow mapping中緩解shadow acne。 OpenGL

原创 OpenGL自定義剪裁

假定我們有點P0P_0P0​和P1P_1P1​,以及平面XXX(以齊次座標表示),那麼如果我們要求交點PPP,我們可以將P0P1P_0P_1P0​P1​上任意一點PPP代入平面XXX的方程,即 P=(1−t)P0+tP1, 0≤t

原创 Perspective Correct Interpolation

線性插值的問題 OpenGL在進行光柵化時,對於每個fragment shader的input attribute作插值,這個插值默認情況下perspective correct的。插值默認是screen space進行的,如果使

原创 雙線性過濾近似高斯模糊

如果使用兩遍算法,再結合雙線性過濾,那麼對於kernel大小爲5x5的高斯模糊而言,我們可以用6個texture調用來計算像素的值。但是在《Real-Time Rendering》上還提到一種方法,即採用一遍算法,最多使用9個te

原创 優化uGUI中的SetParent的調用開銷

概述 當前項目是一個類似scratch那種積木式的編程工具,編輯器用Unity的uGUI實現,但是對於大型的的工程(600多個block,每個block大概有5、6個GameObject),原有的實現在加載工程時很慢,profiler

原创 Windows PATH變量不起作用

今天突然發現設置在PATH中的路徑不起作用了,直接查看PATH中的值也沒發現什麼特別的錯誤。找了大半天,最後終於發現只要PATH中設置了其他的環境變量,並且該環境變量已經不存在了,那麼PATH就不工作了。 比如,我有時會先設置一個環境變量

原创 Perspective Matrix的另一種推導

OpenGL投影矩陣的常見推導在OpenGL Projection Matrix中已經詳細地給出了,這裏我再給出一種使用線性代數方法的推導。這裏的推導參考了《Computer Graphics - Principle and Practi

原创 vim-ctrlspace

最近發現一個很好用的插件vim-ctrlspace,可以用來代替minibufexplorer來做buffer管理,並且提供更強大的功能。不過似乎windows上ctrlspace搜索文件的效率不高(即使開啓了ruby binding,帶

原创 vscode vim key mapping

vim中由於冒號:命令十分常用,所以一種做法是將冒號:和;分號進行交換,這樣在輸入命令時可以不用按shift鍵了,減少了負擔。 vscode的vim插件默認還是使用:作爲命令行的輸入,在User Settings中,使用如下的配置重新映射

原创 讓Unity Camera Space UI根據viewport rect進行縮放

默認情況下,如果camera space UI的縮放模式設置爲Scale with screen size,那麼無論你怎麼修改camera space UI對應的camera的viewport,UI也不會像場景中3D物體一樣根據viewp

原创 mac osx上代碼高亮

平時會用onenote來記筆記,難免會想要摘錄一下代碼,所以會想要對代碼進行一下高亮。windows上一直使用highlight來高亮代碼,挺好用的,提供了不少風格選擇和高亮樣式。osx可以用brew安裝,不過是命令行版本的,於是弄了一個

原创 找回GoodReader中丟失的書籤

GoodReader是一款iOS上功能比較強大的PDF工具,不過我在使用當中發現一個書籤會丟失的問題。因爲有時候在PC上看PDF比較方便,所以會將PDF從iOS複製到PC,之後做完註釋後再複製回iPad。但是之後在GoodReader中再

原创 敏感詞過濾

最近需要實現對聊天裏的敏感詞過濾,要求比較簡單,只需要對字庫中存在的關鍵字進行匹配,所以不需要非常複雜的實現,但是需要能夠快速地對一個關鍵字集合進行匹配。 搜了一下相關的資料,比較簡單的一個算法是使用Aho-Corasick算法,以下簡稱

原创 c++ & Memory consistency model

c++11中一個最重要的特性就是加入了多線程的支持,並定義了c++的memory model。memory model定義了一個處理器上對內存的操作如何被其他處理觀察到, The memory model, or memory con