DBinary的回答
仔细看了一下确实是2024年的问题
仔细想了一下,确实2D渲染这块还真是断层相当严重的一个领域。
不是说没有,只是目前的2D渲染库,简单的过于简单了,像SDL,easyx对2D的几何渲染支持都太简陋了,一些常用几何矢量渲染还需要你自己搓,而skia之类的又太庞大了,而且资料还不好找。
综合下来raylib应该算是在轻量级和易用性上做的比较好的,比较适合刚接触这块的初学者上手。
当然你也可以用我的PainterEngine,下载就能编译,没有其它依赖,基本上手就能用,当然也不会有什么屏闪之类的问题,而且有问题你可以直接问我,可以获得一手免费技术支持,只是我目前事儿也比较多,文档一直在搓。
下面是一个示范代码
#include "PainterEngine.h"
int main()
{
PX_Object* pObject;
px_surface* prendertarget;
px_texture tex;
PainterEngine_Initialize(600, 400);
pObject = PX_Object_PanelCreate(mp, root, 0, 0, 600, 400);
//取得画布表面
prendertarget = PX_Object_PanelGetSurface(pObject);
//画布刷白
PX_SurfaceClearAll(prendertarget, PX_COLOR_WHITE);
//绘制一个矩形
PX_GeoDrawRect(prendertarget, 100, 100, 500, 300, PX_COLOR(255, 255, 0, 0));
//绘制一个圆
PX_GeoDrawCircle(prendertarget, 300, 200, 60,20, PX_COLOR(255, 0, 255, 0));
//绘制斜线段
PX_GeoDrawLine(prendertarget, 0, 0, 600, 400, 5, PX_COLOR(255, 0, 0, 255));
//绘制图片
PX_LoadTextureFromFile(mp, &tex, "assets/fox.png");
PX_TextureRender(prendertarget, &tex, 600, 400, PX_ALIGN_RIGHTBOTTOM, 0);
PX_TextureFree(&tex);
return 0;
}
当然,其它的几何渲染也有
PainterEngine几何绘制函数
这些函数提供了在给定表面上进行各种绘图操作的功能,包括绘制直线、路径、圆形、矩形、贝塞尔曲线等不同形状和样式的图形。每个函数都接受不同的参数来定义绘制的特性,如线宽、颜色、半径等。这些函数可用于创建各种图形和效果,适用于不同的图形编程应用场景。
px_void PX_GeoDrawLine(px_surface *psurface, px_int x0, px_int y0, px_int x1, px_int y1, px_int lineWidth, px_color color);
描述: 在绘图表面上绘制直线。
参数:
px_surface *psurface:绘图表面。
px_int x0:直线起点的X坐标。
px_int y0:直线起点的Y坐标。
px_int x1:直线终点的X坐标。
px_int y1:直线终点的Y坐标。
px_int lineWidth:直线的宽度。
px_color color:直线的颜色。
px_void PX_GeoDrawPenSamplesLine(px_surface *psurface, px_point _samples[], px_int samplescount, px_float radius, px_color color, px_float v, px_float filter_factor);
描述: 在绘图表面上绘制高质量带消抖参数线段。
参数:
px_surface *psurface:绘图表面。
px_point _samples[]:采样点数组。
px_int samplescount:采样点的数量。
px_float radius:线段的半径。
px_color color:线段的颜色。
px_float v:线段的速度。
px_float filter_factor:过滤因子。
px_void PX_GeoDrawPath(px_surface *psurface, px_point path[], px_int pathCount, px_float linewidth, px_color color);
描述: 在绘图表面上绘制路径。
参数:
px_surface *psurface:绘图表面。
px_point path[]:路径点数组。
px_int pathCount:路径点的数量。
px_float linewidth:路径的线宽。
px_color color:路径的颜色。
px_void PX_GeoDrawPenLine(px_surface *psurface, px_float x0, px_float y0, px_float x1, px_float y1, px_float lineWidth, px_color color);
描述: 在绘图表面上绘制高质量线段。
参数:
px_surface *psurface:绘图表面。
px_float x0:线段起点的X坐标。
px_float y0:线段起点的Y坐标。
px_float x1:线段终点的X坐标。
px_float y1:线段终点的Y坐标。
px_float lineWidth:线段的宽度。
px_color color:线段的颜色。
px_void PX_GeoDrawDashLine(px_surface *psurface, px_int x0, px_int y0, px_int x1, px_int y1, px_int lineWidth, px_float dash_width, px_color color);
描述: 在绘图表面上绘制虚线。
参数:
px_surface *psurface:绘图表面。
px_int x0:虚线起点的X坐标。
px_int y0:虚线起点的Y坐标。
px_int x1:虚线终点的X坐标。
px_int y1:虚线终点的Y坐标。
px_int lineWidth:虚线的宽度。
px_float dash_width:虚线的虚线段宽度。
px_color color:虚线的颜色。
px_void PX_GeoDrawPenDots(px_surface *psurface, px_point _samples[], px_int samplescount, px_float radius, px_color color);
描述: 在绘图表面上依照采样点绘制线段(高质量)。
参数:
px_surface *psurface:绘图表面。
px_point _samples[]:采样点数组。
px_int samplescount:采样点的数量。
px_float radius:点的半径。
px_color color:点的颜色。
px_void PX_GeoDrawBorder(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom, px_int lineWidth, px_color color);
描述: 在绘图表面上绘制矩形边框。
参数:
px_surface *psurface:绘图表面。
px_int left:矩形左上角的X坐标。
px_int top:矩形左上角的Y坐标。
px_int right:矩形右下角的X坐标。
px_int bottom:矩形右下角的Y坐标。
px_int lineWidth:边框线的宽度。
px_color color:边框线的颜色。
px_void PX_GeoDrawRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom, px_color color);
描述: 在绘图表面上绘制填充矩形。
参数:
px_surface *psurface:绘图表面。
px_int left:矩形左上角的X坐标。
px_int top:矩形左上角的Y坐标。
px_int right:矩形右下角的X坐标。
px_int bottom:矩形右下角的Y坐标。
px_color color:填充颜色。
px_void PX_GeoDrawSolidCircle(px_surface *psurface, px_int x, px_int y, px_int Radius, px_color color);
描述: 在绘图表面上绘制填充圆。
参数:
px_surface *psurface:绘图表面。
px_int x:圆心的X坐标。
px_int y:圆心的Y坐标。
px_int Radius:圆的半径。
px_color color:填充颜色。
px_void PX_GeoDrawSolidCircleFast(px_surface *psurface, px_int x, px_int y, px_int Radius, px_color color);
描述: 在绘图表面上快速绘制填充圆。
参数:
px_surface *psurface:绘图表面。
px_int x:圆心的X坐标。
px_int y:圆心的Y坐标。
px_int Radius:圆的半径。
px_color color:填充颜色。
px_void PX_GeoDrawPenCircle(px_surface *psurface, px_float x, px_float y, px_float Radius, px_color color);
描述: 在绘图表面上绘制高质量圆。
参数:
px_surface *psurface:绘图表面。
px_float x:圆心的X坐标。
px_float y:圆心的Y坐标。
px_float Radius:圆的半径。
px_color color:圆的颜色。
px_void PX_GeoDrawPenCircleDecay(px_surface *psurface, px_float x, px_float y, px_float Radius, px_color color, px_float Decay);
描述: 在绘图表面上绘制带有衰减的高质量圆。
参数:
px_surface *psurface:绘图表面。
px_float x:圆心的X坐标。
px_float y:圆心的Y坐标。
px_float Radius:圆的半径。
px_color color:圆的颜色。
px_float Decay:衰减因子。
px_void PX_GeoDrawPenRing(px_surface *psurface, px_float x, px_float y, px_float Radius, px_float linewidth_inside, px_color color);
描述: 在绘图表面上绘制带有内边框的圆环。
参数:
px_surface *psurface:绘图表面。
px_float x:圆环中心的X坐标。
px_float y:圆环中心的Y坐标。
px_float Radius:圆环的半径。
px_float linewidth_inside:内边框线的宽度。
px_color color:圆环的颜色。
px_void PX_GeoDrawPenCircleEraser(px_surface *psurface, px_float x, px_float y, px_float Radius, px_bool white_background);
描述: 在绘图表面上绘制用于擦除的圆。
参数:
px_surface *psurface:绘图表面。
px_float x:圆心的X坐标。
px_float y:圆心的Y坐标。
px_float Radius:圆的半径。
px_bool white_background:是否使用白色背景。
px_void PX_GeoDrawSpray(px_surface *psurface, px_float x, px_float y, px_float Radius, px_color color);
描述: 在绘图表面上绘制喷雾效果。
参数:
px_surface *psurface:绘图表面。
px_float x:喷雾的中心X坐标。
px_float y:喷雾的中心Y坐标。
px_float Radius:喷雾的半径。
px_color color:喷雾的颜色。
px_void PX_GeoDrawBall(px_surface *psurface, px_float x, px_float y, px_float Radius, px_color color);
描述: 在绘图表面上绘制一个球。
参数:
px_surface *psurface:绘图表面。
px_float x:球的中心X坐标。
px_float y:球的中心Y坐标。
px_float Radius:球的半径。
px_color color:球的颜色。
px_void PX_GeoDrawPath2D(px_surface *psurface, px_point2D path[], px_int pathCount, px_float linewidth, px_color color);
描述: 在绘图表面上绘制2D路径。
参数:
px_surface *psurface:绘图表面。
px_point2D path[]:路径点的数组。
px_int pathCount:路径点的数量。
px_float linewidth:路径线的宽度。
px_color color:路径线的颜色。
px_void PX_GeoDrawCircle(px_surface *psurface, px_int x, px_int y, px_int Radius, px_int lineWidth, px_color color);
描述: 在绘图表面上绘制圆。
参数:
px_surface *psurface:绘图表面。
px_int x:圆心的X坐标。
px_int y:圆心的Y坐标。
px_int Radius:圆的半径。
px_int lineWidth:圆的线宽度。
px_color color:圆的颜色。
px_void PX_GeoDrawRing(px_surface *psurface, px_int x, px_int y, px_float Radius, px_float lineWidth, px_color color, px_int start_angle, px_int end_angle);
描述: 在绘图表面上绘制圆环。
参数:
px_surface *psurface:绘图表面。
px_int x:圆环中心的X坐标。
px_int y:圆环中心的Y坐标。
px_float Radius:圆环的半径。
px_float lineWidth:圆环的线宽度。
px_color color:圆环的颜色。
px_int start_angle:起始角度。
px_int end_angle:结束角度。
px_void PX_GeoDrawSector(px_surface *psurface, px_int x, px_int y, px_float Radius_outside, px_float Radius_inside, px_color color, px_int start_angle, px_int end_angle);
描述: 在绘图表面上绘制扇形。
参数:
px_surface *psurface:绘图表面。
px_int x:扇形中心的X坐标。
px_int y:扇形中心的Y坐标。
px_float Radius_outside:外圆半径。
px_float Radius_inside:内圆半径。
px_color color:扇形的颜色。
px_int start_angle:起始角度。
px_int end_angle:结束角度。
px_void PX_GeoDrawSolidRoundRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom, px_float roundRaduis, px_color color);
描述: 在绘图表面上绘制填充的圆角矩形。
参数:
px_surface *psurface:绘图表面。
px_int left:圆角矩形左上角的X坐标。
px_int top:圆角矩形左上角的Y坐标。
px_int right:圆角矩形右下角的X坐标。
px_int bottom:圆角矩形右下角的Y坐标。
px_float roundRaduis:圆角半径。
px_color color:填
充颜色。
px_void PX_GeoDrawRoundRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom, px_float roundRaduis, px_float linewidth, px_color color);
描述: 在绘图表面上绘制带有圆角的矩形。
参数:
px_surface *psurface:绘图表面。
px_int left:圆角矩形左上角的X坐标。
px_int top:圆角矩形左上角的Y坐标。
px_int right:圆角矩形右下角的X坐标。
px_int bottom:圆角矩形右下角的Y坐标。
px_float roundRaduis:圆角半径。
px_float linewidth:矩形线宽度。
px_color color:线的颜色。
px_void PX_GeoDrawBezierCurvePoint(px_surface *rendersurface,px_point pt[],px_int pt_count,px_float t,px_float radius,px_color clr);
描述: 在绘图表面上绘制贝塞尔曲线上的点。
参数:
px_surface *rendersurface:绘图表面。
px_point pt[]:控制点数组。
px_int pt_count:控制点数量。
px_float t:参数t,决定贝塞尔曲线上的点位置。
px_float radius:点的半径。
px_color clr:点的颜色。
px_point PX_GeoGetBezierCurvePoint(px_point pt[], px_int pt_count, px_float t);
描述: 计算贝塞尔曲线上的点。
参数:
px_point pt[]:控制点数组。
px_int pt_count:控制点数量。
px_float t:参数t,决定贝塞尔曲线上的点位置。
px_void PX_GeoDrawBresenhamLine(px_surface *psurface, px_int x0, px_int y0, px_int x1, px_int y1, px_color clr);
描述: 在绘图表面上绘制Bresenham直线。
参数:
px_surface *psurface:绘图表面。
px_int x0:直线起点的X坐标。
px_int y0:直线起点的Y坐标。
px_int x1:直线终点的X坐标。
px_int y1:直线终点的Y坐标。
px_color clr:直线的颜色。
px_void PX_GeoDrawTriangle(px_surface *psurface,px_point2D p0,px_point2D p1,px_point2D p2,px_color color);
描述: 在绘图表面上绘制三角形。
参数:
px_surface *psurface:绘图表面。
px_point2D p0:三角形的第一个点。
px_point2D p1:三角形的第二个点。
px_point2D p2:三角形的第三个点。
px_color color:三角形的颜色。
px_void PX_GeoDrawArrow(px_surface *psurface,px_point2D p0,px_point2D p1,px_float size,px_color color);
描述: 在绘图表面上绘制箭头。
参数:
px_surface *psurface:绘图表面。
px_point2D p0:箭头起点。
px_point2D p1:箭头终点。
px_float size:箭头的大小。
px_color color:箭头的颜色。
px_void PX_GeoBSpline3(px_point2D controlPoints[4], px_point2D _samples[], px_int samplescount);
描述: 使用B样条曲线绘制样本。
参数:
px_point2D controlPoints[4]:控制点数组,长度为4。
px_point2D _samples[]:输出的样本点数组。
px_int samplescount:样本点的数量。
以上是绘制不同形状和效果的函数的说明。您可以根据需要选择并使用这些函数来绘制各种图形。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...