Arduino用的X9313W系列数控电位器驱动

cocos2d-x提供了完整的openGL ES支持,但是gl是个非常难用的东西,所以cocos2d-x提供了对一些常用图形的封装。
具体的使用方法在tests中的DrawPrimitivesTest有过体现。

最近做开发需要在sprite中通过draw画圆,但是cocos2d-x封装的ccDrawCircle函数只能画空心圆。我们只需要稍微改造一下这个函数就能绘制一个实心圆。

改造方法很简单:

1,找到ccDrawCircle函数的实现(CCDrawingPrimitives.cpp),复制一份,并且将其中的“GLLINESTRIP”替换成“GLTRIANGLEFAN”就可以了。例如:

void ccDrawSolidCircle(const CCPoint& center, float r, float a, int segs, bool drawLineToCenter)  
    {
        int additionalSegment = 1;
        if (drawLineToCenter)
        {
            ++additionalSegment;
        }

        const float coef = 2.0f * (float) (M_PI) /segs;

        float *vertices = new float[2*(segs+2)]; //    float *vertices = (float *)malloc( sizeof(float)*2*(segs+2));
        if( ! vertices )
        {
            return;
        }

        memset( vertices,0, sizeof(float)*2*(segs+2));

        for(int i=0;i<=segs;i++)
        {
            float rads = i*coef;
            float j = r * cosf(rads + a) + center.x;
            float k = r * sinf(rads + a) + center.y;

            vertices[i*2] = j * CC_CONTENT_SCALE_FACTOR();
            vertices[i*2+1] =k * CC_CONTENT_SCALE_FACTOR();
        }
        vertices[(segs+1)*2] = center.x * CC_CONTENT_SCALE_FACTOR();
        vertices[(segs+1)*2+1] = center.y * CC_CONTENT_SCALE_FACTOR();

        // Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
        // Needed states: GL_VERTEX_ARRAY,
        // Unneeded states: GL_TEXTURE_2D, GL_TEXTURE_COORD_ARRAY, GL_COLOR_ARRAY
        glDisable(GL_TEXTURE_2D);
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
        glDisableClientState(GL_COLOR_ARRAY);

        glVertexPointer(2, GL_FLOAT, 0, vertices);
        //glDrawArrays(GL_LINE_STRIP, 0, (GLsizei) segs+additionalSegment);
        glDrawArrays(GL_TRIANGLE_FAN, 0, (GLsizei) segs+additionalSegment);

        // restore default state
        glEnableClientState(GL_COLOR_ARRAY);
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
        glEnable(GL_TEXTURE_2D);    

        delete[] vertices; //    free(vertices);
    }

然后记得在头文件里头添加上函数声明

/** draws a solid circle given the center, radius and number of segments. */
void CC_DLL ccDrawSolidCircle(const CCPoint& center, float radius, float angle, int segsments, bool drawLineToCenter);  

Friskit

继续阅读此作者的更多文章