源代码下载: learnraylib-cn.c
raylib 是一个跨平台、易用的图形库,围绕OpenGL 1.1、2.1、3.3和OpenGL ES 2.0构建。
尽管它是用C语言编写的,却有超过50种不同语言的绑定。本教程将应用C语言。
更确切地说,是C99。
#include <raylib.h>
int main(void)
{
const int screenWidth = 800;
const int screenHeight = 450;
// 在初始化raylib之前,能够设置标记位
SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT);
// raylib并不要求咱们存储任何实例构造
// 目前raylib一次只能解决一个窗口
InitWindow(screenWidth, screenHeight, "MyWindow");
// 设置咱们的游戏以每秒60帧的速度运行
SetTargetFPS(60);
// 设置一个敞开窗口的键。
//能够是0,示意没有键
SetExitKey(KEY_DELETE);
// raylib定义了两种类型的相机。Camera3D和Camera2D
// Camera是Camera3D的一个类型化定义
Camera camera = {
.position = {0.0f, 0.0f, 0.0f},
.target = {0.0f, 0.0f, 1.0f},
.up = {0.0f, 1.0f, 0.0f},
.fovy = 70.0f,
.type = CAMERA_PERSPECTIVE
};
// raylib反对加载各种不同的文件格式的模型、动画、图像和声音。
Model myModel = LoadModel("my_model.obj");
Font someFont = LoadFont("some_font.ttf");
// 创立一个100x100的渲染纹理
RenderTexture renderTexture = LoadRenderTexture(100, 100);
// WindowShouldClose办法检查用户是否正在敞开窗口。
// 可能用的是快捷方式、窗口管制或之前设置的敞开窗口键
while (!WindowShouldClose())
{
// BeginDrawing办法要在任何绘图操作之前被调用。
BeginDrawing();
{
// 为背景设定某种色彩
ClearBackground(BLACK);
if (IsKeyDown(KEY_SPACE))
DrawCircle(400, 400, 30, GREEN);
// 简略地绘制文本
DrawText("Congrats! You created your first window!",
190, // x
200, // y
20, // 字体大小
LIGHTGRAY
);
// 大多数函数都有几个版本
// 通常后缀为Ex, Pro, V
// 或者是Rec、Wires(仅实用于3D)、Lines(仅实用于2D)。
DrawTextEx(someFont,
"Text in another font",
(Vector2) {10, 10},
20, // 字体大小
2, // 间距
LIGHTGRAY);
// 绘制3D时须要,有2D的等价办法
BeginMode3D(camera);
{
DrawCube((Vector3) {0.0f, 0.0f, 3.0f},
1.0f, 1.0f, 1.0f, RED);
// 绘图时的红色色调将放弃原来的色彩
DrawModel(myModel, (Vector3) {0.0f, 0.0f, 3.0f},
1.0f, // 缩放
WHITE);
}
// 完结3D模式,这样就能够再次一般绘图
EndMode3D();
// 开始在渲染纹理上绘图
BeginTextureMode(renderTexture);
{
// 它的行为与方才调用的`BeginDrawing()`办法雷同
ClearBackground(RAYWHITE);
BeginMode3D(camera);
{
DrawGrid(10, // Slices
1.0f // 间距
);
}
EndMode3D();
}
EndTextureMode();
// 渲染有Texture2D字段的纹理
DrawTexture(renderTexture.texture, 40, 378, BLUE);
}
EndDrawing();
}
// 卸载已载入的对象
UnloadFont(someFont);
UnloadModel(myModel);
// 敞开窗口和OpenGL上下文
CloseWindow();
return 0;
}
延长浏览
raylib有一些不错的例子
如果你不喜爱C语言你也能够看看raylib的其余语言绑定
有倡议?或者发现什么谬误?在Github上开一个issue,或者发动pull request!
原著Nikolas Wipper,并由0个好心人批改。
© 2022 Nikolas Wipper
Translated by: lzw-723
本作品采纳 CC BY-SA 3.0 协定进行许可。