上QQ阅读APP看书,第一时间看更新
11.3 渲染接口详解
DrawNode提供的渲染接口与DrawingPrimitives基本一致,它们支持绘制点、线段、多边形等图元,由于DrawingPrimitives即将被废弃,所以这里只介绍DrawNode提供的绘制接口。
11.3.1 绘制点
/** 传入Vec2坐标、点的尺寸和颜色参数,绘制一个点 */ void drawPoint(const Vec2& point, const float pointSize, const Color4F &color); /** 传入Vec2坐标数组、数组长度以及颜色参数,绘制一系列点 */ void drawPoints(const Vec2 *position, unsigned int numberOfPoints, const Color4F &color); /** 传入Vec2坐标数组、数组长度、点的尺寸以及颜色参数,绘制一系列点 */ void drawPoints(const Vec2 *position, unsigned int numberOfPoints, const float pointSize, const Color4F &color);
11.3.2 绘制线段、矩形、多边形与圆形
/** 传入两个坐标、一个颜色参数,绘制一条线段 */ void drawLine(const Vec2 &origin, const Vec2 &destination, const Color4F &color); /** 传入两个坐标、一个颜色参数,绘制一个矩形 */ void drawRect(const Vec2 &origin, const Vec2 &destination, const Color4F &color); /** 传入Vec2坐标数组、数组长度、是否闭合以及颜色参数,绘制一个多边形 closePolygon参数为true时多边形闭合,false多边形不闭合 */ void drawPoly(const Vec2 *poli, unsigned int numberOfPoints, bool closePolygon, const Color4F &color); /** 根据圆心、半径、角度(一般为0)、分段(越高越精细)、drawLineToCenter选项、x 和y轴的缩放比例、颜色等参数绘制一个圆,drawLineToCenter参数为true时会从圆心到每 个分段绘制一条线段 */ void drawCircle( const Vec2& center, float radius, float angle, unsigned int segments, bool drawLineToCenter, float scaleX, float scaleY, const Color4F &color); /** 根据圆心、半径、角度(一般为0)、分段(越高越精细)、drawLineToCenter选项、颜 色等参数绘制一个圆 */ void drawCircle(const Vec2 ¢er, float radius, float angle, unsigned int segments, bool drawLineToCenter, const Color4F &color);
11.3.3 绘制贝塞尔曲线
/** 传入起点坐标、控制点坐标、终点坐标、分段以及颜色,绘制一条贝塞尔曲线 */ void drawQuadBezier(const Vec2 &origin, const Vec2 &control, const Vec2 &destination, unsigned int segments, const Color4F &color); /** 传入起点坐标、两个控制点坐标、终点坐标、分段以及颜色,绘制一条贝塞尔曲线 */ void drawCubicBezier(const Vec2 &origin, const Vec2 &control1, const Vec2 &control2, const Vec2 &destination, unsigned int segments, const Color4F &color);
11.3.4 绘制CardinalSpline
/** 传入一系列点、张力、分段以及颜色来绘制一条基数样条曲线 */ void drawCardinalSpline(PointArray *config, float tension, unsigned int segments, const Color4F &color);
使用drawCardinalSpline绘制一条线段,如图11-2演示了当设置了不同的张力参数时,线段的表现。以下4张图片设置的张力依次为0.1、0.5、1.0和2.0。
图11-2 不同张力下的CardinalSpline
11.3.5 绘制凯特摩曲线
/** 传入一系列点、分段以及颜色,绘制一条凯特摩曲线 */ void drawCatmullRom(PointArray *points, unsigned int segments, const Color4F &color);
如图11-3使用了与图11-2一样的线段参数,演示了凯特摩曲线的绘制。
图11-3 凯特摩曲线
11.3.6 绘制实心图元
/** 传入一个坐标、半径以及颜色,绘制一个圆点 */ void drawDot(const Vec2 &pos, float radius, const Color4F &color); /** 传入4个坐标和颜色,绘制一个四边形 */ void drawRect(const Vec2 &p1, const Vec2 &p2, const Vec2 &p3, const Vec2& p4, const Color4F &color); /** 传入起始和结束坐标以及颜色,绘制一个实心矩形 */ void drawSolidRect(const Vec2 &origin, const Vec2 &destination, const Color4F &color); /** 传入一系列点和颜色,绘制一个实心多边形 */ void drawSolidPoly(const Vec2 *poli, unsigned int numberOfPoints, const Color4F &color); /** 传入圆心、半径、角度、分段、x和y轴的缩放值以及颜色参数,绘制一个实心圆 */ void drawSolidCircle(const Vec2& center, float radius, float angle, unsigned int segments, float scaleX, float scaleY, const Color4F &color); /** 传入圆心、半径、角度、分段以及颜色参数,绘制一个实心圆 */ void drawSolidCircle(const Vec2& center, float radius, float angle, unsigned int segments, const Color4F& color); /** 传入起点、终点、半径以及颜色,绘制一个弓形片段 */ void drawSegment(const Vec2 &from, const Vec2 &to, float radius, const Color4F &color); /** 传入一系列点、填充颜色、边框宽度、边框颜色,绘制一个带边框的实心多边形 */ void drawPolygon(const Vec2 *verts, int count, const Color4F &fillColor, float borderWidth, const Color4F &borderColor); /** 传入3个坐标以及一个颜色,绘制一个三角形*/ void drawTriangle(const Vec2 &p1, const Vec2 &p2, const Vec2 &p3, const Color4F &color);