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多种编程语言的绑定
教程
示例程序
下面这个程序绘制了一个旋转的立方体(其实是摄像机在围绕立方体旋转):
#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编写动画程序啦。