美文网首页
cocos2dx::drawNode分析

cocos2dx::drawNode分析

作者: 核桃啊 | 来源:发表于2016-04-25 23:34 被阅读715次

    drawnode整个结构如下:

    和cocos风格一样,二段式构建方法,create->init,create函数new初始化对象时,初始化如下:

    初始化vao、vbo,定点相关buffer和脏标记,还有混合模式

    看看混合模式的定义:

    定义了几种混合模式,一般用透明效果参数设置是 (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 即上面定义的 ALPHA_NON_PREMULTIPLIED,待会会实验和ALPHA_PREMULTIPLIED的区别(一般是用的预乘混合方式,不预乘的称为straight,主要是在两种颜色缩小可能会出现的不正确的现象)

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

    设置混合模式,设置shader,下面是使用的shader

    3个属性,顶点、纹理坐标和颜色,顶点颜色和纹理坐标两个易变量。

    step(edge, x):如果x<edge返回0否则返回1   length()计算向量长度

    对于gl_fragcolor的输出不懂(已解决,纹理坐标长度大于1的step返回0,所以颜色为黑色,纹理坐标小于1的step返回1,所以颜色为采样值),但是点的4个角为什么是透明的,还是不清楚)(原来是返回0的时候会把透明度也设为0!!!而根据混合模式,会把颜色混合为dst的颜色!!!!!!!
    )

    先分析后面,设置顶点buffer大小

    根据平台是否支持开启vao,有些pc不支持,有些android支持得不好,android默认关闭

    然后再使用vbo分别绑定顶点坐标,纹理坐标和颜色的值

    2、下面开始测试

    1> drawDot

    画点,提供位置、半径和颜色

    初始化定点数据,并把数据存在两个三角形结构体中,三角形结构体即3个顶点的结构体,并增加buffer的大小

    由此也可知,点是由两个三角形绘制完成,不明白4个圆角如何不显示的(解决)

    将此node添加到场景中后,遍历后会调用draw

    使用的自定义绘制,并设置回调方法为onDraw

    首先得到shader,使用shader,然后设置内置的uniform

    shader在创建的时候会把全部uiform的地址保存在一个数组中,以方便以后的使用,如下:并且会根据是否有某些uiform来设置flag标记,这里需要注意,因为cocos封装了compileshader,使得所有需要的uniform都自动加入shader代码中,但是如果代码中没有使用的uniform,会被自动忽略掉,所以标记会是某些uniform没有。

    根据uniform的类型给uniform赋值,这里有个疑问,在具体shader中,虽然看到了mvpMatrxi矩阵,但是并没有看到其定义,难道是程序预先在哪里定义了,还是uniform不需要定义?(解决,glprogram中封装了compileshader,使shader字符串加入了一些uniform的定义,如下)

    回到onDraw

    然后设置混合,最后就是绑定vbo或者绑定vao,然后绘制即可!

    3、drawSegment

    相比drawDot,用了8个顶点,组合了6个3角形,不明白为什么要这样做,两个三角形不就行了吗

    注意:drawNode支持批绘制,将所有顶点数据都放在buffer中!然后一次绘制,比如

    3个图形只调用一次drawcall 实现批绘制

    相关文章

      网友评论

          本文标题:cocos2dx::drawNode分析

          本文链接:https://www.haomeiwen.com/subject/aelqrttx.html