Y 分钟速成 raylib
源代码下载: 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 协议进行许可。
Learn X in Y minutes
Take a whirlwind tour of your next favorite language.
3 声望
2 粉丝
推荐阅读
Y 分钟速成 Git
源代码下载: gitGit 是一个分布式版本控制及源代码管理工具。Git 可以为你的项目保存若干快照,以此来对整个项目进行版本管理。版本什么是版本控制版本控制系统就是根据时间来记录一个或多个文件的更改情况的系...
小X学技术阅读 1.2k
C 程序眼中的 Unicode
去年写了一篇文章「在 C 程序中处理 UTF-8 字符串」,介绍了如何使用 GLib 提供的 UTF-8 字符串处理函数来实现基本的 UTF-8 文本处理。不过,GLib 是一个功能比较全面的 C 程序库,C 字符串处理仅仅是它的一个很...
garfileo赞 3阅读 5.8k评论 5
滚蛋吧,正则表达式!
你是不是也有这样的操作,比如你需要使用「电子邮箱正则表达式」,首先想到的就是直接百度上搜索一个,然后采用 CV 大法神奇地接入到你的代码中?
良许赞 3阅读 1.6k
程序员适合创业吗?
大家好,我是良许。从去年 12 月开始,我已经在视频号、抖音等主流视频平台上连续更新视频到现在,并得到了不错的评价。每个视频都花了很多时间精力用心制作,欢迎大家关注哦~考虑到有些小伙伴没有看过我的视频,...
良许赞 3阅读 1.3k
计算机如何表示整数
在计算机中,任何的数据都是用二进制: 0 和 1 来表示。整数也不例外。生活中的 10,在 8 个字节的整数中表示为 00001010。但是这样子只能表示正数和零。怎么表示负数呢?于是有了符号位的概念。在 8 个字节的整...
kang赞 2阅读 3.2k评论 7
C语言获取服务器mac地址
它的信息保存在结构体struct ifconf中,有可能不止一个。获取到的信息保存在ifc_buf中。第二个逻辑就是根据网卡的名字去获取mac地址,主要用下面的函数完成:
禹鼎侯阅读 3.3k
比cat更好用的命令!
但 cat 命令两个很重大的缺陷:1. 不能语法高亮输出;2. 文本太长的话无法翻页输出。正是这两个不足,使得 cat 只能用来查看行数不多的小文件。
良许赞 2阅读 717
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。