raylib

简单并且易于使用的游戏编程库

raylib是一个以简单易用为目标的跨平台游戏绘图库,它的特点包括:

  • 免费开源(基于类似于BSD的zlib授权协议)
  • 跨平台支持:Windows, Linux, MacOS, RPI, Android, HTML5等
  • 全部用C语言实现
  • 简单易用
  • 使用OpenGL硬件加速(1.1, 2.1, 3.3, 4.3 or ES 2.0)
  • 支持多种字体(XNA SpriteFonts, BMfonts, TTF, SDF)
  • 支持多种材质格式,包括压缩材质(DXT, ETC, ASTC)
  • 全面支持3D,包括Shapes,Models,Billboards, Heightmaps等
  • 材质系统支持包括经典贴图和PBR贴图
  • 支持动画3d模型(Animated 3d models)
  • 支持多种着色器,包括模型着色器(Model shaders)和后处理着色器(Postprocessing shaders)
  • 提供数学模块,支持矢量、矩阵和四元数(Quaternion)运算
  • 支持多种音乐格式的载入和流媒体播放(WAV, OGG, MP3, FLAC, XM, MOD)
  • 提供50多种编程语言的绑定

教程

raylib和rdrawing中文使用教程

示例程序

下面这个程序绘制了一个旋转的立方体(其实是摄像机在围绕立方体旋转):

#include <raylib.h>
#include <math.h>

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;
}

对于初学者来说,只要了解了OpenGL的3维坐标系,以及摄像机投影的各项基本参数,很快就可以用raylib编写动画程序啦。

最后修改 July 6, 2023: update (ae1ce626)