C++图形函数库EGE、raylib和EasyX及可以使用它们的开发工具介绍
★ EGE(Easy Graphics Engine)由国人开发的windows平台下的绘图库,开源。官网https://xege.org/
★ raylib是一个以简单易用为目标的跨平台游戏绘图库,全平台支持(包括Linux、android、web),除了2d外,也支持3d(基于OpenGL)动画和游戏开发。缺点是中文文档很少。官网 https://www.raylib.com/
raylib绘图库简介https://zhuanlan.zhihu.com/p/458335134
★ EasyX是针对C++的图形库,由国人开发的主要支持支持 VC6.0 ~ VC2022。官网https://easyx.cn/
C++如何利用EGE、raylib和EasyX呢,需要找到合适的开发工具。
Dev-C++(也称为Dev-Cpp)是Windows环境下的轻量级C/C++ 集成开发环境,自由开源。https://sourceforge.net/projects/orwelldevcpp/
上次更新时间为2015年4月到Dev C++5.11。已停止维护了,并且不直接支持EGE、raylib和EasyX这些图形函数库。
【Window10 中Dev-C++ 使用EasyX绘图库编程入门 https://blog.csdn.net/cnds123/article/details/125289781
Window10 中Dev-C++ 使用EGE绘图库编程介绍与示例https://blog.csdn.net/cnds123/article/details/118946181 】
现在出现了一些(目前依然在稳定运行的)分支版本,国内主要有:
小龙Dev-C++ https://devcpp.gitee.io/
小龙Dev-C++集成了图形函数库 EGE、EasyX 和 raylib,省去了用户手工配置的麻烦。
小熊猫C++(小熊猫Dev-C++) 网址 https://royqh1979.gitee.io/redpandacpp
小熊猫C++在自带gcc中整合了ege、海龟作图、raylib、freeglut、GLFW和GLEW等适合编程或者游戏开发入门者使用的库和项目模板,无需复杂的安装配置即可直接使用。
现在简要介绍小龙Dev-C++的使用
下载之后开始安装。安装过程很简单,按照对话框的操作提示执行即可,需要注意的是若已安装Dev-C++注意或先删再安装,或指定不同的安装路径。
小龙 Dev-C++使用EGE 图形函数库,请先参看https://devcpp.gitee.io/manual/support-ege.html
小龙 Dev-C++使用EasyX 图形函数库,请先参看 https://devcpp.gitee.io/manual/support-easyx.html
小龙 Dev-C++使用raylib 视频游戏编程库,请先参看https://devcpp.gitee.io/manual/support-raylib.html
这是小龙Dev-C++安装后,Examples文件夹中有一些示例,自带的示例ege-clock.cpp,编译运行效果:
其源码如下:
#include#include #include // #pragma comment(lib, "libgraphics64 libuuid libmsimg32 libgdi32") #pragma comment(lib, "libimm32 libole32 liboleaut32 libgdiplus") #pragma comment(linker, "-mwindows") //#define PI 3.1415927 void Draw(int hour, int minute, int second, int cx, int cy, int rad) { double hou, min, sec; // 时、分、秒针的弧度值 int xhou, yhou, xmin, ymin, xsec, ysec; // 时、分、秒针的末端位置 //时针、分针、秒针的弧度值 sec = second * 2 * PI / 60; min = minute * 2 * PI / 60 + sec / 60; hou = hour * 2 * PI / 12 + min / 12; //时针、分针、秒针的末端位置 xhou = cx + (int)(rad * 1 / 2.0 * sin(hou)); yhou = cy - (int)(rad * 1 / 2.0 * cos(hou)); xmin = cx + (int)(rad * 5 / 8.0 * sin(min)); ymin = cy - (int)(rad * 5 / 8.0 * cos(min)); xsec = cx + (int)(rad * 13 / 16.0 * sin(sec)); ysec = cy - (int)(rad * 13 / 16.0 * cos(sec)); //时针 setlinestyle(SOLID_LINE, 0, 8); setcolor(WHITE); line(cx, cy, xhou, yhou); //分针 setlinestyle(SOLID_LINE, 0, 6); setcolor(LIGHTGRAY); line(cx, cy, xmin, ymin); //秒针 setlinestyle(SOLID_LINE, 0, 4); setcolor(RED); line(cx, cy, xsec, ysec); } int main() { int i, len, x1, x2, y1, y2; int WIDTH = 800, HEIGHT = 600; //图形窗口的宽度和高度 int cx = WIDTH / 2, cy = HEIGHT / 2; //中心点的坐标 int rad = (WIDTH < HEIGHT ? WIDTH : HEIGHT) / 2 - 20; //表盘的半径 initgraph(WIDTH, HEIGHT); //初始化 WIDTH x HEIGHT 的绘图窗口 //绘制时钟表盘 setlinestyle(SOLID_LINE, 0, 2); //设置绘图线型的实线、宽度=2 circle(cx, cy, 2); //中心小圆 circle(cx, cy, rad); //外周大圆 for (i = 0; i < 60; i++) { //绘制外周大圆的短线 len = (i % 5 == 0 ? 20 : 5); //短线的长度 x1 = rad * sin(i * 6 * PI / 180) + cx; y1 = rad * cos(i * 6 * PI / 180) + cy; x2 = (rad - len) * sin(i * 6 * PI / 180) + cx; y2 = (rad - len) * cos(i * 6 * PI / 180) + cy; line(x1, y1, x2, y2); } setwritemode(R2_XORPEN); // 设置 XOR 绘图模式 char str[20]; SYSTEMTIME tm; //定义变量保存当前时间(SYSTEMTIME是一个表示时间的结构体类型) while (!kbhit()) { //循环直到用户按任意键退出 GetLocalTime(&tm); //获取当地的当前时间 setcolor(LIGHTGRAY); sprintf(str, "%2d:%2d:%2d", tm.wHour, tm.wMinute, tm.wSecond); outtextxy(cx - 24, cy + rad / 3, str); //输出数字时间文字 Draw(tm.wHour, tm.wMinute, tm.wSecond, cx, cy, rad); //绘制表针 Sleep(1000); // 延时 1 秒 Draw(tm.wHour, tm.wMinute, tm.wSecond, cx, cy, rad); //擦除表针 } closegraph(); //关闭图形模式 return 0; }
小熊猫C++的使用
现在简要介绍小熊猫C++的使用
小熊猫C++不仅支持windows系统,也支持Linux系统
这里仅简要介绍windows系统中使用小熊猫C++,小熊猫C++有两种使用方式:安装版和绿色版免安装版。
安装版需要安装后使用;绿色版解压后直接运行RedPandaIDE.exe即可使用。
这里推荐使用绿色版,我这里下载的是 小熊猫.C .1.1.0.win64.MinGW-w64 X86_64 GCC 11.2.绿色版.7z,解压后将其中RedPanda-CPP文件夹拷贝(复制)到你认为合适的位置,直接运行RedPandaIDE.exe即可使用,为方便使用可创建桌面快捷方式【右键单击RedPandaIDE.exe,用快捷菜单命令“发送到→创建桌面快捷方式”】
小熊猫C++文档 https://royqh1979.gitee.io/redpandacpp/docsy/docs/
下面给出一个官方示例,编译运行效果:
其源码如下:
#include#include int main(void) { // 初始化 const int screenWidth = 640; const int screenHeight = 480; //启用反锯齿 SetConfigFlags(FLAG_MSAA_4X_HINT); //初始化窗口 InitWindow(screenWidth, screenHeight, "Sample"); // 初始化摄像机 Camera3D camera = { 0 }; camera.position = (Vector3){ 40.0f, 20.0f, 0.0f }; //相机所在位置{x,y,z} camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; //相机朝向位置{x,y,z} camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; //相机正上方朝向矢量 camera.fovy = 70.0f; //相机视野宽度 camera.projection = CAMERA_PERSPECTIVE; //采用透视投影 //设置动画帧率(刷新率,fps)为30帧/秒 SetTargetFPS(30); //-------------------------------------------------------------------------------------- int angle=0; //多边形旋转角度 // 主游戏循环 while (!WindowShouldClose()) //关闭窗口或者按ESC键时返回true { double time = GetTime(); // 每次循环更新一帧 // 摄像机围绕y轴转动 double cameraTime = time*0.3; camera.position.x = (float)cos(cameraTime)*40.0f; camera.position.z = (float)sin(cameraTime)*40.0f; BeginDrawing(); ClearBackground(WHITE); //以摄像机视角绘制3d内容 BeginMode3D(camera); DrawCube(Vector3{0,0,0},10,10,10,VIOLET); DrawCubeWires(Vector3{0,0,0},10,10,10,BLACK); EndMode3D(); EndDrawing(); } //关闭窗口 CloseWindow(); return 0; }
OK!



