【拓展】图的渲染工具-Mermaid

文章介绍了Mermaid,一个基于JavaScript的图表渲染工具,它支持Markdown语法,能绘制流程图、甘特图等多种图表。通过简单的文本描述,Mermaid可以动态生成图表,提高IT人员的绘图效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【拓展】图的渲染工具-Mermaid

Mermaid简介

Mermaid 是一个基于 JavaScript 的图表和图表工具,可呈现受 Markdown 启发的文本定义以动态创建和修改图表。
如果你熟悉 Markdown,那么学习 Mermaid 的语法应该没有问题,你甚至可以把它当成Markdown的扩展语法来对待。
仅用简单的语句表达实现图的渲染

1 graph LR
2 a–>b
3 a–>c
4 b–>d
5 b-.->c
6 c–>d
7 d–>a

渲染效果:

a
b
c
d

Mermaid官方网站还提供了官方在线绘图渲染器,点击即可跳转进入。

Mermaid能绘制哪些图

我们现在接触的图表类型不多,所以会认为Mermaid不会有很大作用,事实上,Mermaid有极其强大的功能:

  • 流程图 (Flowchart):用于展示流程、步骤和决策流程。
  • 时序图 (Sequence Diagram):展示事件发生的顺序和时间轴上的活动。
  • 类图 (Class Diagram):用于展示对象之间的关系和结构。
  • 状态图 (State Diagram):展示对象在不同状态下的行为转换。
  • 实体关系图 (Entity Relationship Diagram):用于展示实体之间的关系模型。
  • 用户旅程 (User Journey):描述用户与产品或服务互动的整个过程。
  • 甘特图 (Gantt):用于展示项目进度、时间安排和任务分配。
  • 饼图 (Pie Chart):展示数据的相对比例,常用于比较类别间的数量关系。
  • 四象限图 (Quadrant Chart):用于将数据或概念按照两个维度进行分类和比较。
  • 需求图 (Requirement Diagram):用于展示需求之间的关系和依赖。
  • Git 图表 (Gitgraph Diagram):用于展示 Git 代码仓库中的提交历史和分支结构。
  • C4 图表 (C4 Diagram):一种软件架构图表,用于描述软件系统的结构。
  • 思维导图 (Mindmaps):帮助组织和展示思维导向的图表。
  • 时间线 (Timeline):以时间为轴展示事件或数据的顺序和时序。
  • Zenuml:用于创建 UML 序列图和状态图的在线工具。
  • Sankey 图表:用于展示复杂系统中能量、物质或者信息的流动关系。
  • XY 图表 (XYChart):以笛卡尔坐标系方式展示数据的散点分布和关联关系。

可以说,Mermaid为IT人员提供了极其强大、回应需求的工具,减少了IT人员在画图上的耗时,大大提升效率。

绘图示例

就咱们目前用到的、作业需求的类型展示:

流程图Flowchart

譬如之前做的实验2的程序流程图:
image
又比如用Mermaid画出《计算机科学概论》教材175页表8-3中的航线图:
image

Mermaid中:
airline

饼图Pie

1 pie
2 title Pets adopted by volunteers
3 “Dogs” : 386
4 “Cats” : 85
5 “Rats” : 15

79% 17% 3% Pets adopted by volunteers Dogs Cats Rats

甘特图Gantt

就本周(第九周)云班课作业“CPU调度”来说:
CPU调度
要求画出Gantt图。如果说使用draw.io手绘流程图还行的话,那么在甘特图等方面,使用draw.io就显得捉襟见肘了。如果使用Mermaid,我们可以免去手绘的烦恼:
image
只要逻辑清晰,思路明确,我们就可以用就简单的语句表示出进程,而Mermaid Live Editor会自动渲染出我们想要的效果。

Mermaid语法学习相关资料

  • 官方语法解释:https://mermaid.js.org/intro/#diagram-types
    全英文网站,大家可以借助工具学习

  • Bilibili上AaaGss 的typora绘图合集视频也不错

流程图

稀土掘金平台 天朝八阿哥 的笔记

甘特图

稀土掘金平台 天朝八阿哥 的笔记

<think>好的,我现在需要帮助用户了解如何使用GLEW加载OpenGL扩展。用户之前询问了使用Win32 API进行离屏渲染,其中提到了GLEW可以简化扩展加载。现在用户可能想深入理解如何实际操作GLEW。 首先,我要确认用户的需求。他们可能已经知道Win32下加载扩展的方法,但发现手动使用wglGetProcAddress比较麻烦,所以想用GLEW来简化流程。需要介绍GLEW的基本用法,包括初始化步骤、如何替代手动获取函数指针,以及可能遇到的问题。 接下来,我需要回忆GLEW的使用步骤。通常包括包含头文件、链接库、初始化GLEW,之后就可以直接使用OpenGL函数了。需要提醒用户注意初始化顺序,必须在创建OpenGL上下文之后调用glewInit(),否则会失败。此外,不同平台(如Windows)可能需要预定义GLEW_STATIC或者在链接时处理库文件。 用户可能遇到的问题包括函数指针无效、初始化失败或者链接错误。需要给出解决方案,比如检查GLEW初始化是否成功,确保正确的头文件和库文件被包含,以及处理可能的OpenGL版本兼容性问题。此外,用户可能想知道如何在项目配置中添加GLEW的依赖,这部分需要简要说明编译和链接步骤。 还需要比较GLEW和其他库如GLAD的区别,帮助用户根据项目需求选择合适工具。可能用户对两者不太清楚,需要简单说明优缺点,比如GLAD的在线生成器更灵活,而GLEW可能更成熟但更新较慢。 最后,要确保回答结构清晰,分步骤说明,并提供代码示例,方便用户直接应用。同时注意用户可能遇到的常见错误,并提供排查方法,比如使用glGetError检查状态,或者使用GLEW提供的错误信息。</think>以下是使用 **GLEW** 加载 OpenGL 扩展的完整指南: --- ### 一、GLEW 的核心作用 **GLEW (OpenGL Extension Wrangler Library)** 是专门用于简化 OpenGL 扩展加载的工具- 自动检测当前显卡支持的扩展 - 提供统一接口访问扩展函数 - 解决跨平台扩展加载差异 --- ### 二、使用步骤详解(Windows 示例) #### 1. 环境配置 - **头文件**:下载 GLEW 后,将 `include/GL` 目录加入项目包含路径 - **库文件**: - 静态库:`glew32s.lib`(需预定义宏 `GLEW_STATIC`) - 动态库:`glew32.lib` + `glew32.dll` ```cpp // 必须在使用 GLEW 前定义(静态库需要) #define GLEW_STATIC #include <GL/glew.h> ``` #### 2. 初始化流程 ```cpp // 创建窗口和OpenGL上下文后... HWND hWnd = CreateWindow(...); HDC hDC = GetDC(hWnd); HGLRC hGLRC = wglCreateContext(hDC); wglMakeCurrent(hDC, hGLRC); // ⭐关键:必须先有有效上下文 // 初始化GLEW GLenum err = glewInit(); if (err != GLEW_OK) { std::cerr << "GLEW初始化失败: " << glewGetErrorString(err) << std::endl; exit(1); } // 检查扩展支持 if (GLEW_ARB_framebuffer_object) { // 已支持FBO扩展 } ``` #### 3. 扩展使用示例(FBO) ```cpp // 直接使用扩展函数,无需手动获取函数指针 GLuint fbo; glGenFramebuffers(1, &fbo); // GLEW 已自动映射函数 ``` --- ### 三、关键注意事项 #### 1. 初始化顺序 ```mermaid graph LR A[创建窗口] --> B[创建OpenGL上下文] B --> C[设置当前上下文] C --> D[调用glewInit] ``` #### 2. 常见错误排查 | 错误现象 | 解决方案 | |--------------------------|----------------------------------------| | `glewInit` 返回 `GLEW_ERROR_NO_GL_VERSION` | 确认上下文已正确创建并设为当前 | | 函数指针为 `NULL` | 检查显卡是否支持该扩展 | | 链接错误 `LNK2019` | 确认库文件路径正确,静态库需定义 `GLEW_STATIC` | #### 3. 高级功能 ```cpp // 强制启用扩展(即使驱动未报告支持) glewExperimental = GL_TRUE; // 处理某些驱动兼容性问题 glewInit(); // 检查OpenGL版本 if (!GLEW_VERSION_3_3) { std::cerr << "需要OpenGL 3.3以上支持" << std::endl; } ``` --- ### 四、与手动加载对比 | 方式 | 代码量 | 维护成本 | 灵活性 | 典型使用场景 | |-----------|-------|---------|-------|---------------------| | 手动加载 | 多 | 高 | 高 | 需要精确控制的小型项目 | | **GLEW** | 少 | 低 | 中 | 中大型通用项目 | | GLAD | 中 | 中 | 高 | 需要定制扩展组合 | --- ### 五、最佳实践建议 1. **项目配置**:推荐使用 vcpkg / CMake 管理依赖 ```cmake find_package(GLEW REQUIRED) target_link_libraries(MyApp PRIVATE GLEW::GLEW) ``` 2. **版本控制**:结合 `glGetString(GL_VERSION)` 验证实际支持版本 3. **错误处理**:始终检查 `glewInit()` 返回值 如果需要具体平台的配置细节(如 Linux/Mac)或更深入的扩展使用示例,可以进一步说明需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值