學習cocos2d-x 以來一直對裡面的shader部分感興趣,今天正好花了點時間來研究一下精靈的描邊效果。
主要參考了子龍山人大神的testcpp裡面例子並結合自己的理解,實現相對比較簡單。主要是根據引擎內部自帶的shader相關**來實現的。
好了廢話不多說看**:
1。首先需要開啟ccshadercache.cpp檔案修改裡面部分**,新增我們描邊的效果。
在2。然後在 void
shadercache::loaddefaultshaders() 函式裡面加入:
p =new
glprogram();
loaddefaultshader(p,kshadertype_spritetextureoutline);
_programs.
insert
(std
::make_pair
(glprogram::shader_name_sprite_texture_outline, p ) );
3。至於glprogram
::shader_name_sprite_texture_outline值的由來,
需要在ccglprogram.h和ccglprogram.cpp檔案裡面分別加入
static
const
char* shader_name_sprite_texture_outline;和
const
char*glprogram::shader_name_sprite_texture_outline ="shaderspritetextureoutline"; **
4。接著繼續修改void
shadercache::loaddefaultshader(glprogram *p,int type) 裡面的**加入:
case:
kshadertype_spritetextureoutline:
p->
initwithbytearrays
(ccpositiontexturecolor_nomvp_vert,ccspritetextureoutline_frag);
p->
bindattriblocation
(glprogram::attribute_name_position,glprogram::
vertex_attrib_position);
p->
bindattriblocation
(glprogram::attribute_name_color,glprogram::
vertex_attrib_color);
p->
bindattriblocation
(glprogram::attribute_name_tex_coord,glprogram::
vertex_attrib_tex_coords);
break;
5。修改完ccshadercache.cpp檔案裡面的**,還要修改ccshaders.h和ccshaders.cpp裡面**,分別加入:
extern
cc_dll
const
glchar * ccspritetextureoutline_frag; 和
const
glchar * ccspritetextureoutline_frag = #include "ccshader_spritetexture_outline_frag.h"
6。最後在cocos2d-x-3.0 的 cocos/2d 目錄下加入ccshader_spritetexture_outline_frag.h檔案
(注意把此檔案和系統自己提供的相關shader片段著色器檔案放在一起)。
最關鍵的一步來了,就是片段著色器的**:(這部分參考了子龍山人的shader**)
我做了部分修改,**如下:
" \n\
#ifdef gl_es \n\
precision lowp float; \n\
#endif \n\
\n\varying vec4 v_fragmentcolor; \n\
varying vec2 v_texcoord; \n\
uniform sampler2d cc_texture0; \n\
\n\void main() \n\
\n\\n\";
注意格式參照引擎自帶相關著色器**。
好了說到這,基本也就說完了,自己趕快去試試看吧。我用的引擎版本是3.0,至於其他版本實現都是一樣的。 測試
cocos2d x建立精靈
建立精靈 方法一 有一張檔案建立 l ocal spritename cc.sprite create test.dog cc.sprite會自動將檔案載入為紋理,並用於初始化精靈 精靈還可以僅顯示的一部分 l ocal spritename cc.sprite create test.png cc...
cocos2d x中的精靈
所有的遊戲都有 sprites 精靈,你可能知道或者不知道它們是什麼。精靈就是遊戲中在場景裡進行移動的物件。你可以操縱它們。精靈可能是遊戲中最主要的角色。我知道你在想什麼 難道每乙個圖形物件都是精靈sprite嗎?當然不是!為什麼?當你操縱乙個精靈的時候,它就是乙個精靈。如果你不對它進行操作,那它就...
Cocos2d x中的精靈
精靈的繼承關係 1.減少檔案讀取次數 2.減少opengl es繪製呼叫並且加速渲染 3.減少記憶體消耗 運用集方式為什麼會減少記憶體碎片?通常使用zwoptex和texturepacker設計和生成紋理圖集檔案,以及紋理圖集座標檔案 plist 組成。使用精靈幀快取 有以下幾種 1.紋理快取 2....