使用OpenGL實現ASCII Art濾鏡

2021-10-25 05:29:30 字數 837 閱讀 2023

效果圖:

之前使用qt實現過乙個cpu版本的ascii art濾鏡,流程大致如下:

根據字型選擇確定單元方格大小。

將每個可用字元繪製到單元方格大小的空白上,計算每個可用字元的平均灰度值。

根據第二步計算出來的每個可用字元的平均灰度值,生成乙個0~255灰度值到字元的對映表。

按單元方格大小對輸入進行劃分,灰度化後求每個方格的平均灰度值。

查詢灰度值到字元的對映表,對輸入的每個方格使用字元進行填充。

在shader中,將紋理劃分成乙個個的單元方格,將單元方格左上角的顏色作為本方格的顏色,對顏色進行灰度化後得到灰度值。

根據上一步得到的灰度值,計算灰度值對應字元在查詢表紋理中的起點座標。然後在根據當前畫素在單元方格中的偏移量得到查詢表紋理中我們要取的畫素的座標,取出其顏色進行顯示。

fragment shader**如下:

#version 450 core

out vec4 fragcolor;

in vec2 texcoord;

uniform float charwidth;

uniform float charheight;

uniform sampler2d imagetexture;

uniform sampler2d asciitexture;

void main()

;

opengl版本的不足之處在於無法將ascii化的以字元形式輸出到終端,似乎是把ascii art的精髓給丟掉了:-

iOS中使用OpenGL 實現增高功能

demo示例 opengl原理 這樣拆分之後雖然可以正常渲染,但是帶來的問題是我的四個頂點都是死的,也就是四個頂點必須是畫布的四個頂點,改變頂點的座標後只能導致整張畫布的變動,而不是某乙個區域的變動,拉伸的話也是整張的拉伸,所以想要實現區域性處理的話這種分割方式不可行。這樣一來就可以保證中間的矩形的...

openGL 紋理使用

最近找了點資料學習了下opengl 紋理的使用 先有個 整體把握,然後再去看大部頭中的細節講解,感覺這樣的學習方式好些 總結下紋理使用總體流程 1 啟用紋理 glenable gl texture 2d 2 載入紋理 3 紋理 的顯示 載入紋理 1 讀取紋理影象高寬和畫素資料到記憶體中,老版本 op...

openGL 紋理使用

總結下紋理使用總體流程 1 啟用紋理 glenable gl texture 2d 2 載入紋理 3 紋理 的顯示 載入紋理 1 讀取紋理影象高寬和畫素資料到記憶體中,老版本opengl需要考慮寬度和高度不是的整數次方 2 分配乙個新的紋理編號 glgentextures 1,texture id ...