本文介绍C++图形函数库EGE、raylib和EasyX,及可以使用它们的开发工具小龙Dev-C++、小熊猫C++。
★ 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,编译运行效果:
其源码如下:
/*********************************************************************
程序名: 绘制模拟指针式时钟并输出数字时间
版权: GPL v3
作者: [email protected]
日期: 2021-01-02 09:11
说明: 使用EGE图形函数库绘制圆和线。
*********************************************************************/
#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++不仅支持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!