raylib绘图库--瞿华 2022.7.1 知乎 1、raylib绘图库简介 知乎 2、raylib 2d动画/游戏教程(1)动画基本原理 知乎 3、raylib 2d动画/游戏教程(2)坐标系与颜色系统 知乎 4、raylib 2d动画/游戏教程(3)图像文件与图层 知乎 5、raylib 2d动画/游戏教程(4)raylib-drawing库 知乎 6、raylib 2d动画/游戏教程(5)键盘与鼠标输入 知乎 7、raylib 2d动画/游戏教程(6)游戏手柄输入 知乎 8、raylib 2d动画/游戏教程(7)音乐和音效 知乎 9、raylib绘制中文内容 知乎 10、使用raygui绘制控件 知乎 11、raylib 3d绘图基础教程(1)坐标系和摄像机 知乎 12、raylib 3d绘图基础教程(2)网格(Mesh) 知乎 13、raylib 3d绘图基础教程(3)几何变换 知乎 14、raylib 3d绘图基础教程(4)3d模型的载入与绘制 raylib 3d绘图基础教程(4)3d模型的载入与绘制 在实际的游戏编程中,让程序直接载入已有的3d模型会比较方便。本文介绍raylib的模型载入功能。 1 关于模型格式的讨论 在raylib中,可以直接导入obj、glTF、stl和fbx等格式的3d模型。 需要注意的是,raylib以及不同的建模软件对这几种格式支持的兼容程度不尽相同。笔者个人的经验是,raylib对blender导出的obj格式模型兼容性是最好的。如果某个模型不能被raylib正确载入,可以试下先导入blender,再用blender导出成obj格式模型,提供给raylib读取。 2 示例 假如我们已经有了一个blender导出的obj模式模型文件raylib_blender.obj,下面的程序(假设raylib_blender.obj和编译后的示例程序在同一文件夹里)会载入并显示这个模型:#include #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){ 10.0f, 10.0f, 10.0f };//相机所在位置{x,y,z} camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };//相机朝向位置{x,y,z} camera.up = (Vector3){ 0.0f, 0.0f, 1.0f };//相机正上方朝向矢量 camera.fovy = 40;//相机视野宽度 camera.projection = CAMERA_PERSPECTIVE;//采用透视投影 SetCameraMode(camera, CAMERA_FREE);//使用漫游摄像机 //创建几何体,滚动鼠标。程序少崩的模型https://github.com/tinyobjloader/tinyobjloader Model model = LoadModel("raylib_blender.obj");//失败则正中显示小苯环。轮胎catmark_torus_creases0.obj //设置动画帧率(刷新率,fps)为30帧/秒 SetTargetFPS(30); //------ //主游戏循环 while (!WindowShouldClose())//关闭窗口或者按ESC键时返回true { UpdateCamera(&camera); BeginDrawing(); ClearBackground(VIOLET); //以摄像机视角绘制3d内容 BeginMode3D(camera); DrawModel(model,(Vector3){0,0,0},1.0,WHITE); EndMode3D(); EndDrawing(); } //释放网格 UnloadModel(model); //关闭窗口 CloseWindow(); return 0; }