C++图形函数库EGE、raylib和EasyX及可以使用的开发工具小龙Dev-C++、小熊猫C++介绍

C++图形函数库EGE、raylib和EasyX及可以使用的开发工具小龙Dev-C++、小熊猫C++介绍

本文介绍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++集成了图形函数库 EGEEasyX raylib,省去了用户手工配置的麻烦。

C++图形函数库EGE、raylib和EasyX及可以使用的开发工具小龙Dev-C++、小熊猫C++介绍_第1张图片

小熊猫C++(小熊猫Dev-C++) 网址 https://royqh1979.gitee.io/redpandacpp
小熊猫C++在自带gcc中整合了ege、海龟作图、raylib、freeglut、GLFW和GLEW等适合编程或者游戏开发入门者使用的库和项目模板,无需复杂的安装配置即可直接使用。

C++图形函数库EGE、raylib和EasyX及可以使用的开发工具小龙Dev-C++、小熊猫C++介绍_第2张图片

小龙Dev-C++的使用

现在简要介绍小龙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,编译运行效果:

C++图形函数库EGE、raylib和EasyX及可以使用的开发工具小龙Dev-C++、小熊猫C++介绍_第3张图片

其源码如下:

/*********************************************************************
程序名: 绘制模拟指针式时钟并输出数字时间
版权: 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++的使用

小熊猫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/

下面给出一个官方示例,编译运行效果:

C++图形函数库EGE、raylib和EasyX及可以使用的开发工具小龙Dev-C++、小熊猫C++介绍_第4张图片

 其源码如下:

#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!

你可能感兴趣的:(C,C++学习,编程实践系列,C++图形函数库)