#2d-3d #opengl #2d-graphics #3d #2d #gamedev #cgl

cgl-rs

CGL是一个多用途库,主要用于娱乐编程/演示场景/原型设计/小型游戏/实验

8个版本

0.1.7 2023年8月3日
0.1.6 2023年8月3日
0.1.3 2023年7月31日

#110图形API

42 每月下载量

MIT 许可证

8.5MB
4K SLoC

包含(静态库,2MB)lib/windows/freetype.lib,(静态库,1MB)lib/linux/libfreetype.a,(静态库,2MB)lib/windows/glad.lib,(静态库,1MB)lib/linux/libglad.a,(静态库,725KB)lib/windows/cgl.lib,(静态库,700KB)lib/windows/glfw3.lib 和更多

Lines of code Maintenance Support me on Patreon


索引


CGL

CGL(C图形库)是一个多用途库,主要用于娱乐编程/演示场景/原型设计/小型游戏/实验。它提供了许多图形功能。最好的一点是,所有这些功能都包含在单个头文件cgl.h中。此外,CGL完全用C编写,但也与C++兼容。

注意:不要认为头文件只会增加编译时间,因为只需要通过使用#define CGL_IMPLEMENTATION来启用1个文件的实现。参见示例


目标平台

  • Windows
  • Linux
  • MacOS(未测试)
  • WebAssembly(Beta)
  • Android(即将推出)

CGL提供什么?

  • cgl-rs

  • cgl-py

  • 窗口库(可选)

    • 您可以通过使用#define CGL_EXCLUDE_WINDOW_API完全禁用它
    • 这个窗口库主要是对GLFW的封装,并增加了一些额外功能。例如,如果您使用某些库(如nuklear)进行GUI开发,它将干扰所有glfw回调,因此您可以使用CGL通过调用CGL_window_resecure_callbacks来恢复CGL回调。
  • 实用功能

    • 读取/写入文件
    • 随机浮点数/整数/布尔值/vec2/vec3/颜色生成
    • CRC32/CRC64
    • ROT13加密
    • 通用哈希函数参考这里
    • 彩色printf(红色、绿色、蓝色、灰色/黄色)
    • 点/三角形交点检查
    • 3D变换API(矩阵计算等)
    • TODO:[MD5 / SHA 256 / SHA 128 / AES]
  • 噪声API

    • libc的rand的多个快速替代方案
    • 过程式一致噪声算法
      • Perlin噪声(改进版本)
      • OpenSimplex2
      • 值噪声
      • Worley噪声(或细胞噪声)
    • 分形如FBm、Rigid、Billow、PingPong
    • 八度音程/Lacunarity/加权强度/增益参数
  • 三角剖分

    • Bower Watson算法用于Delaunay三角剖分器
  • 人工智能

    • 神经网络
    • 反向传播
    • 序列化/反序列化网络
    • 多元线性回归
  • 图算法

    • A*路径查找(通用)
    • N维空间划分和定位(四叉树的n维版本)
  • 数据结构

    • 列表(动态数组)+栈(一起实现)
    • 哈希表 -> 这个哈希表是通用的。键可以是字符串或n位缓冲区。值可以是任何东西:int、string、float、自定义类型等...
      • 哈希表迭代器 -> 使用简单的API迭代哈希表参考这里
  • 日志记录器

    • 可以通过#define CGL_DISABLE_LOGGER启用/禁用。
    • 同时记录到多个日志文件
    • 以彩色输出记录到控制台,不同日志级别分开
    • 带自动时间戳的日志记录器
  • 跨平台网络(可选)

    • 您可以通过#define CGL_EXCLUDE_NETWORKING禁用所有网络功能。
    • 低级套接字
    • SSL套接字(可选)(需要OpenSSL)
    • HTTP/HTTPS请求(beta)
  • 通用马尔可夫链(可选)示例

    • 可以与任何类型的数据(文本/图像等)一起工作
    • 用3-4行代码进行训练/生成
    • 实现文本生成的训练器(基于n-gram)
    • 用于自定义场景的自定义训练器API
  • 跨平台多线程

    • 线程
    • 互斥锁
    • 条件变量(TODO)
    • 注意:在Windows上使用Win32 Threads实现,在Linux上使用pthread实现。(在Linux上,您需要链接pthread来构建)
  • 布隆

    • 只需一行代码即可将布隆应用于任何纹理
    • 基于Unity的布隆实现
    • 自定义阈值
    • 自定义下采样/上采样遍历
    • 完全在Compute Shaders中实现
  • 2D碰撞检测

    • 检测2D多边形之间的碰撞
    • 为多边形生成分离轴
    • 获取重叠距离
    • GJK(Gilbert–Johnson–Keerthi距离算法)
    • EPA(扩展多边形算法)
    • SAT(分离轴定理)
  • Marching Square

    • 完全可定制的Marcher
    • 支持线性插值
    • 为CGL生成2D网格(三角形)
  • 卡通后处理器

    • 轮廓效果
    • 卡通着色效果
    • 阴影效果
    • 在单个后处理调用中完成(无需逐对象计算)
    • 完全在Compute Shader中实现
    • 可定制
  • CGL射线投射

    • 快速2D射线投射
    • 自定义墙壁
    • 烘焙到三角形网格
    • 公开射线投射函数
  • CGL节点编辑器

    • 速度非常快,因为它由CGL Widgets提供动力
    • 自定义节点、引脚、链接
    • 最小化且功能强大
    • 渲染您自己的节点和链接类型API
    • 缩放放大/缩小
    • 全局偏移
  • CGL音频API

    • 跨平台(OpenAL后端)
    • 简单的API
    • WAV文件加载/采样器
  • CSV API

    • CSV解析器
    • CSV序列化器
    • CSV文档数据结构
  • CGL Widgets(可选)

    • 您可以通过以下方式禁用它:#define CGL_EXCLUDE_WIDGETS
    • 类似于p5.js的API
    • 文本小部件(渲染高质量清晰的文本,无需加载或烘焙任何字体)
    • 批渲染后端(即使对于大量小部件也非常快)
    • 绘制(填充或描边)
    • 绘图
      • 散点图
      • 柱状图(垂直/水平)
      • 饼图
      • 绘制函数
    • 基于字体的文本小部件(使用小部件API加载自定义字体以进行高质量的文本渲染)
    • 支持使用小部件API渲染3D网格
    • 支持将纹理添加到小部件API(高效)
    • 高级贝塞尔曲线(线条或点状)小部件
    • 添加单个顶点
    • 调整描边颜色/粗细
    • 自定义批渲染最大顶点容量(适用于内存较低的系统)
  • 数学库

    • 高级矩阵库(这是与图形矩阵库分开的)
      • 用于矩阵数学的线性代数
    • vec2/vec3/vec4
    • mat3/mat4(用于图形)
    • add/sub/mul/div/scale/length/normalize/lerp/min/max/equal for vec2/vec3/vec4
    • rotate_x/rotate_y/rotate_z for vec3
    • scale/translate/rotate_x/rotate_y/rotate_z/add/sub/mul for mat4
    • perspective for mat4
    • transpose for mat4/(mat3 TODO)
    • 使用Goldman方法创建旋转矩阵
    • look_at矩阵
    • 四元数数学
    • 转换向量
    • 注意:大多数数学函数都是通过宏实现的,因此将完全倾斜并且非常快,无需进行任何不必要的函数调用
  • 可选的(可选)高级OpenGL API

    • 您可以通过以下方式完全禁用它:#define CGL_EXCLUDE_GRAPHICS_API
    • 纹理(2D / 2D数组 / 立方体贴图)
    • 帧缓冲区
    • SSBO(着色器存储缓冲区对象)
    • UBO(统一缓冲区对象)
    • 着色器
      • 顶点 & 片段(不包含几何着色器,因为它不太常用)
      • 计算着色器API
  • CGL网格API

    • CGL为处理网格提供高级API
    • 有2种类型的网格
      • CPU网格 -> 存储用于网格操作的数据,例如
        • 生成三角形
        • 生成四边形
        • 加载OBJ(beta)
        • 生成立方体
        • 生成平面
        • 生成圆柱体
        • 生成球体
        • 从任何参数曲面函数生成网格参考这里
        • 计算法线
        • 对网格进行操作
          • 添加2个网格
          • 偏移顶点
          • 等等。
      • GPU网格 -> 指向存储在GPU侧的数据的指针(内部处理顶点缓冲区、索引缓冲区、顶点数组)并可用于
        • 渲染
        • 渲染实例化
        • 渲染线框
        • 渲染线框实例化
  • CGL相机

    • CGL提供适当的相机抽象
    • 透视 & 正交
    • 内部处理所有矩阵计算(只需输入位置和旋转)
    • 自动计算向上、向右、向前向量
  • 文本渲染(可选)(需要FreeType2

    • 您可以使用#define CGL_EXCLUDE_TEXT_RENDER完全禁用它
    • .ttf文件中加载字体
    • 烘焙字符位图
    • 从字符串烘焙纹理
  • 尾迹渲染器

    • 快速3D尾迹渲染器
    • 烘焙到网格
    • 自定义着色器支持
    • 完全可定制
  • 天空渲染器(可选)

    • 您可以使用#define CGL_EXCLUDE_SKY_RENDERER完全禁用它
    • 支持天空盒(立方体网格)和天空球/圆顶(球体网格)
    • 支持立方体贴图天空纹理
    • 支持实时过程生成天空(+过程云)
    • 只需3-5行代码即可渲染出美丽的天空
  • Phong渲染器(可选)

    • 您可以通过#define CGL_EXCLUDE_PHONG_RENDERER禁用它
    • 它具有
      • Phone管道 -> 这是包含着色器数据和全局引擎数据的管道。可用的选项包括
        • 启用/禁用Blinn校正
        • 启用/禁用深度测试
        • 启用/禁用伽玛校正
        • 设置环境光照
        • 添加/删除光源
      • Phong光源 -> 它可以是3种类型之一
        • 方向性 -> 它接受(方向,颜色,强度)
        • 点 -> 它接受(位置,颜色,强度,常数,线性,二次方)
        • 聚光灯(待定)
      • Phong材质
        • 取消纹理/颜色
        • 镜面纹理/颜色
        • 光泽度
        • 法线贴图(待定)
  • 瓦片图渲染器(可选)

    • 您可以使用#define CGL_EXCLUDE_TILEMAP_RENDERER禁用它
    • 使用单行代码渲染NxN瓦片图
    • 每个瓦片都可以有以下状态
      • 清除(透明或不启用)
      • 纯色
      • 纹理 -> 纹理可以通过以下方式提供
        • 2D纹理数组 -> 您需要为每个瓦片提供深度
        • 瓦片集或纹理图集 -> 您必须提供用于瓦片的区域边界(归一化0.0-1.0)
    • 注意:此瓦片渲染器仅渲染4个顶点,并且只有一个绘制调用(不是实例调用,因此相当快)

正在开发中的内容

  • PBR渲染器(可选)
  • IBL(可选)

展示片

查看: 这里

**更多信息请参见示例


依赖项