open-sourcegamesportminigolfcross-platform type: concept 创建: 2026-04-10 更新: 2026-04-10

Open Golf

A cross-platform minigolf game written in C, featuring custom physics, baked lightmaps, and an in-game level editor.

基本信息

项目 内容
GitHub https://github.com/mgerdes/Open-Golf
语言 C
构建系统 CMake 3.12+
渲染/引擎 Sokol (GLCore33/GLES3) + 自定义光照系统
许可 MIT
平台 Windows, Linux, macOS, Android, iOS, Web (Emscripten)
最新更新 2022

核心技术点

物理系统

  • 自定义碰撞检测:BVH (Bounding Volume Hierarchy) 碰撞加速结构(bvh.c)
  • 碰撞响应:自研物理代码处理高尔夫球与地形的碰撞检测和响应
  • 定点数处理确保跨平台一致性

渲染架构

  • Sokol 库:跨平台 3D 图形和音频抽象层(sokol_gl.h 等)
  • 光照贴图 (Lightmap):使用 lightmapper 库生成地形光照贴图
  • UV 映射:使用 xatlas 生成光照贴图 UV
  • 动态物体光照插值:支持多个采样点之间插值生成动态物体光照贴图
  • Global Illumination:gi.c 实现简单 GI 效果

编辑器

  • 内置编辑器:游戏内置编辑器可修改球场地形并快速测试反馈
  • 脚本驱动生成:编辑器可运行脚本生成复杂模型顶点和面片
  • ImGui:所有工具使用 ImGui 实现

第三方库

  • cembed — C 资源嵌入
  • cimgui / imgui — UI 系统
  • fast_obj — OBJ 模型快速加载
  • glfw — 窗口/输入
  • glslcc — GLSL 编译器
  • miniz — ZIP 压缩
  • parson — JSON 解析
  • stb — 通用工具库(stb_image 等)
  • mattiasgustavsson/libs — 工具库集合

玩法特点

  • 迷你高尔夫:完整球场体验,支持多关卡
  • 关卡编辑器:内置编辑器允许玩家创建和修改球场地形
  • 脚本化地形生成:支持运行脚本程序化生成复杂地形
  • 多平台支持:覆盖桌面、移动端和 Web 平台

项目结构

src/
├── common/        # 共享引擎代码 (~15K LOC)
│   ├── audio.c/h   # 音频系统
│   ├── bvh.c/h     # BVH 碰撞加速结构
│   ├── data.c/h    # 数据加载
│   ├── file.c/h    # 文件系统抽象
│   ├── graphics.c/h # 图形渲染
│   ├── inputs.c/h  # 输入处理
│   └── debug_console.c/h # 调试控制台
├── golf/          # 游戏逻辑 (~3K LOC)
│   ├── game.c      # 游戏状态机 (1042 行)
│   ├── draw.c/h   # 渲染绘制
│   ├── ui.c       # UI 系统 (1318 行)
│   ├── golf.c/h   # 高尔夫球逻辑
│   └── main.c     # 入口
└── editor/        # 关卡编辑器
    ├── editor.c   # 编辑器主逻辑
    ├── gizmo.c/h  # 变换控件
    └── gi.c/h     # GI 计算

data/
├── audio/         # 音频资源
├── levels/       # 关卡数据
├── models/       # 3D 模型
├── shaders/      # GLSL 着色器
├── scripts/      # 地形生成脚本
├── textures/     # 纹理
└── static_data.static_data  # 静态数据

构建方式

# Linux
./build/build-linux.sh

# Windows
build\build-win64.bat

# 输出
out/linux/golf      # Linux
out/win64/golf.exe  # Windows

对公司 AI 游戏的参考价值

方向 启示
跨平台渲染 Sokol 库作为轻量级跨平台 3D 方案,适合小型项目
物理系统 自研 BVH 碰撞系统,适合需要精确碰撞检测的游戏
光照贴图 xatlas + lightmapper 管线可借鉴用于场景美术烘焙
编辑器开发 ImGui 内置编辑器模式,脚本驱动地形生成是高效内容创作方案
资源嵌入 cembed 将资源编译进二进制,简化发布和分发
Web 移植 Emscripten + WebGL2 支持,无缝 Web 化路径