cocos2dx::drawNode分析

drawnode整個結(jié)構(gòu)如下:

和cocos風(fēng)格一樣,二段式構(gòu)建方法,create->init撇吞,create函數(shù)new初始化對象時,初始化如下:


初始化vao礁叔、vbo牍颈,定點相關(guān)buffer和臟標(biāo)記,還有混合模式

看看混合模式的定義:


定義了幾種混合模式琅关,一般用透明效果參數(shù)設(shè)置是 (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 即上面定義的 ALPHA_NON_PREMULTIPLIED煮岁,待會會實驗和ALPHA_PREMULTIPLIED的區(qū)別(一般是用的預(yù)乘混合方式,不預(yù)乘的稱為straight涣易,主要是在兩種顏色縮小可能會出現(xiàn)的不正確的現(xiàn)象)

再看看在init中初始化了什么


設(shè)置混合模式画机,設(shè)置shader,下面是使用的shader




3個屬性新症,頂點步氏、紋理坐標(biāo)和顏色,頂點顏色和紋理坐標(biāo)兩個易變量徒爹。

step(edge, x):如果x<edge返回0否則返回1 ? length()計算向量長度

對于gl_fragcolor的輸出不懂(已解決荚醒,紋理坐標(biāo)長度大于1的step返回0,所以顏色為黑色隆嗅,紋理坐標(biāo)小于1的step返回1界阁,所以顏色為采樣值),但是點的4個角為什么是透明的胖喳,還是不清楚)(原來是返回0的時候會把透明度也設(shè)為0E萸!丽焊!而根據(jù)混合模式较剃,會把顏色混合為dst的顏色!<冀 V馗丁!Y旃浴H返妗弓颈!
)

先分析后面,設(shè)置頂點buffer大小

根據(jù)平臺是否支持開啟vao删掀,有些pc不支持翔冀,有些android支持得不好,android默認(rèn)關(guān)閉

然后再使用vbo分別綁定頂點坐標(biāo)披泪,紋理坐標(biāo)和顏色的值



2纤子、下面開始測試

1> drawDot

畫點,提供位置款票、半徑和顏色


初始化定點數(shù)據(jù)控硼,并把數(shù)據(jù)存在兩個三角形結(jié)構(gòu)體中,三角形結(jié)構(gòu)體即3個頂點的結(jié)構(gòu)體艾少,并增加buffer的大小

由此也可知卡乾,點是由兩個三角形繪制完成,不明白4個圓角如何不顯示的(解決)

將此node添加到場景中后缚够,遍歷后會調(diào)用draw


使用的自定義繪制幔妨,并設(shè)置回調(diào)方法為onDraw


首先得到shader,使用shader谍椅,然后設(shè)置內(nèi)置的uniform

shader在創(chuàng)建的時候會把全部uiform的地址保存在一個數(shù)組中误堡,以方便以后的使用,如下:并且會根據(jù)是否有某些uiform來設(shè)置flag標(biāo)記雏吭,這里需要注意锁施,因為cocos封裝了compileshader,使得所有需要的uniform都自動加入shader代碼中杖们,但是如果代碼中沒有使用的uniform沾谜,會被自動忽略掉,所以標(biāo)記會是某些uniform沒有胀莹。

根據(jù)uniform的類型給uniform賦值,這里有個疑問婚温,在具體shader中描焰,雖然看到了mvpMatrxi矩陣,但是并沒有看到其定義栅螟,難道是程序預(yù)先在哪里定義了荆秦,還是uniform不需要定義?(解決力图,glprogram中封裝了compileshader步绸,使shader字符串加入了一些uniform的定義,如下)



回到onDraw

然后設(shè)置混合吃媒,最后就是綁定vbo或者綁定vao瓤介,然后繪制即可吕喘!


3、drawSegment

相比drawDot刑桑,用了8個頂點氯质,組合了6個3角形,不明白為什么要這樣做祠斧,兩個三角形不就行了嗎



注意:drawNode支持批繪制闻察,將所有頂點數(shù)據(jù)都放在buffer中!然后一次繪制琢锋,比如


3個圖形只調(diào)用一次drawcall 實現(xiàn)批繪制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笨鸡,一起剝皮案震驚了整個濱河市奉瘤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖送滞,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缸沃,居然都是意外死亡宜咒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門赘娄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仆潮,“玉大人,你說我怎么就攤上這事遣臼⌒灾茫” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵揍堰,是天一觀的道長鹏浅。 經(jīng)常有香客問我,道長屏歹,這世上最難降的妖魔是什么隐砸? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蝙眶,結(jié)果婚禮上季希,老公的妹妹穿的比我還像新娘。我一直安慰自己幽纷,他們只是感情好式塌,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著友浸,像睡著了一般峰尝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上收恢,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天武学,我揣著相機(jī)與錄音祭往,去河邊找鬼。 笑死劳淆,一個胖子當(dāng)著我的面吹牛链沼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沛鸵,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼括勺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了曲掰?” 一聲冷哼從身側(cè)響起疾捍,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎栏妖,沒想到半個月后乱豆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吊趾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年宛裕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片论泛。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡揩尸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屁奏,到底是詐尸還是另有隱情岩榆,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布坟瓢,位于F島的核電站勇边,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏折联。R本人自食惡果不足惜粒褒,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诚镰。 院中可真熱鬧奕坟,春花似錦、人聲如沸怕享。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽函筋。三九已至,卻和暖如春奠伪,著一層夾襖步出監(jiān)牢的瞬間跌帐,已是汗流浹背首懈。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留谨敛,地道東北人究履。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像脸狸,于是被迫代替她去往敵國和親最仑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容