ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

树莓派上运行 GLSL 着色器:《The Book of Shaders》示例实战指南(glslViewer 篇)

树莓派上运行 GLSL 着色器:《The Book of Shaders》示例实战指南(glslViewer 篇)

【免费下载链接】thebookofshaders

Step-by-step guide through the abstract and complex universe of Fragment Shaders.

项目地址:https://gitcode.com/gh_mirrors/th/thebookofshaders
点击查看免费下载

导读:本文围绕《The Book of Shaders》附录「如何在树莓派上运行示例程序」展开,完整讲解在 Raspberry Pi 上从零搭建 GLSL 着色器运行环境、克隆本书仓库、以及借助glslViewer这一实时编码工具交互式运行与调试全部示例的完整流程。读完本文,你将掌握在树莓派(乃至任意 Linux 控制台环境)上运行本书.frag示例、利用-l标志边编辑边实时预览、以及通过 ssh/sftp 远程协作的整套实战方案。

glslViewer 在控制台窗口中实时渲染着色器,是《The Book of Shaders》在树莓派上的官方运行工具(演示动图出自 第 04 章)

为什么选择树莓派运行着色器示例

《The Book of Shaders》以片段着色器(Fragment Shader)为核心,全部示例都是运行在 GPU 上的 GLSL 程序。在几年前,假设每个人都拥有一台带图形处理单元(GPU)的电脑并不现实;如今虽然大多数电脑都配备了 GPU,但在工作坊或课堂教学场景中,「要求每个学员都有独显机器」依然是较高的门槛。

树莓派基金会推出的廉价迷你电脑(单台成本约 35 欧元/美元)改变了这一局面——它们大量进入了课堂。更关键的是,树莓派板载了一块 Broadcom GPU,可以直接从控制台(console)访问,无需额外的图形界面环境。这意味着你可以在纯命令行环境下编译并显示 GLSL 着色器,而这正是运行本书全部示例的理想硬件前提。

glslViewer:为本书打造的 GLSL 实时编码工具

为了能在树莓派这类低配硬件上顺畅运行本书示例,作者专门开发了一个灵活的命令行 GLSL 工具——glslViewer。它具备两个对学习过程至关重要的能力:

  1. 可以运行本书中的全部示例:每个示例的.frag文件都能直接交给 glslViewer 编译并渲染;
  2. 保存即重编译的实时反馈:当用户修改并保存 shader 代码时,程序会自动重新编译并立即重新渲染。这意味着你可以实时看到每一行改动对画面产生的影响,把「抽象」的着色器编码变成可见、可调的体验。

glslViewer 只是本书作者打造的着色器工具生态之一:浏览器端有 glslCanvas(本书所有在线示例的渲染引擎),在线编辑器有 glslEditor,而 glslViewer 负责的是控制台场景——详见 第 04 章「运行你的着色器」。该章还展示了 glslViewer 的通用命令行用法:

glslViewer yourShader.frag yourInputImage.png -w 500 -h 500 -E screenshot,yourOutputImage.png

即将.frag文件(可附带输入纹理图)编译渲染为指定尺寸的窗口,甚至可以直接导出截图,用法类似 ImageMagick。

环境准备:安装 Raspbian 与所需软件包

在树莓派上搭建运行环境,前提是已安装并完成登录Raspbian(树莓派官方基于 Debian 的 Linux 发行版)。登录系统后,依次执行以下命令:

sudo apt-get update sudo apt-get upgrade sudo apt-get install git-core glslviewer cd ~ git clone https://gitcode.com/gh_mirrors/th/thebookofshaders.git cd thebookofshaders

对命令逐条说明:

命令作用
sudo apt-get update刷新软件源索引,确保能获取到最新可用版本
sudo apt-get upgrade升级系统中已安装的软件包到最新状态
sudo apt-get install git-core glslviewer安装 Git 客户端(git-core)与glslviewer工具本体
cd ~切换到当前用户主目录,作为克隆仓库的落脚点
git clone ...拉取本书仓库的本地副本,后续所有示例文件都在thebookofshaders目录下
cd thebookofshaders进入仓库目录,准备运行示例

需要说明的是,以上安装流程以 Raspbian 为适用前提;glslviewer是否可直接通过apt安装,取决于你所使用的发行版版本与软件源配置(例如在 macOS 上,附录 02 则建议改用 Homebrew 的brew install glslviewer方式,见 附录 02「如何打印本书」)。

获取本书本地副本:克隆仓库

文档中「制作本书的本地副本」即上一步中的git clone操作。完成克隆后,仓库根目录下每个数字编号目录(如 02/、03/)都对应书中的一个章节,目录内既有章节正文README.md,也包含该章的全部示例着色器.frag文件——这些就是 glslViewer 要运行的对象。

如果你希望在无网络的环境(如长途旅行)中继续学习,还可以参考 附录 00「如何离线浏览本书」:用php -S localhost:8000启动本地服务器,即可在浏览器中离线翻阅全书。

用 glslviewer 运行示例:基本用法与-l实时预览

克隆仓库并进入thebookofshaders目录后,运行示例的方式非常直接:直接调用glslviewer并传入示例文件路径,例如:

glslviewer 03/space.frag

更进一步,配合-l标志可以把示例渲染到屏幕的一个角落(小窗显示),与此同时你可以用任意文本编辑器(如nano、pico、vi、vim、emacs)打开并修改这个.frag文件:

glslviewer 03/time.frag -l

由于 glslViewer 具备「保存即重编译」能力,你每保存一次编辑,画面就会立即更新——这构成了一个极简的 GLSL 实时编程工作台。

远程场景:这个组合对通过ssh/sftp 连接的场景同样有效。例如你用 ssh 登录树莓派后启动glslviewer -l,再通过 sftp 或其他方式远程编辑同目录下的.frag文件,保存后树莓派上渲染的窗口会即时刷新。这让树莓派可以被当作一台低成本的「着色器渲染终端」来使用。

示例着色器依赖的 uniform 输入

本书的示例着色器之所以能在 glslViewer 中「开箱即跑」,是因为整套示例遵循了一套统一的 uniform 命名约定。以 第 03 章「Uniforms」 的说明为准,glslViewer / glslCanvas 会自动向每个着色器注入以下输入:

uniform vec2 u_resolution; // 画布尺寸 (width, height) uniform vec2 u_mouse; // 鼠标位置(屏幕像素) uniform float u_time; // 自加载以来的秒数

例如 03/time.frag 只依赖u_time,用正弦函数驱动红色通道的动画:

#ifdef GL_ES precision mediump float; #endif uniform float u_time; void main() { gl_FragColor = vec4(abs(sin(u_time)),0.0,0.0,1.0); }

而 03/space.frag 则同时使用u_resolution与gl_FragCoord,把归一化坐标映射到红绿通道:

#ifdef GL_ES precision mediump float; #endif uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; void main() { vec2 st = gl_FragCoord.xy/u_resolution; gl_FragColor = vec4(st.x,st.y,0.0,1.0); }

理解这套 uniform 约定,是你在树莓派上修改、调试示例时的重要基础——改的是 GLSL 代码,喂给它的是由 glslViewer 自动提供的统一输入。

从源码看 glslViewer 在本书构建流程中的角色

glslViewer 不仅用于交互式学习,它也是本书自身的「图片生成引擎」。在仓库根目录的 Makefile 中,make clean pdf、make clean epub等命令会调用 src/parseBook.py 将各章节解析并编译成书。该脚本在扫描章节正文时,凡遇到<div class="codeAndCanvas">嵌入的示例,就会调用 glslViewer 以**无头模式(headless)**把着色器渲染成截图插入文档(见 src/parseBook.py):

glslViewer <shader>.frag [textures...] --headless -e wait,0.5 -E screenshot,<output>.png

这从侧面印证了 glslViewer 的两项关键能力:既能渲染单个窗口画面(交互模式),也能脱离显示环境批量产出渲染结果(headless 模式),因此它可以被嵌入脚本与 UNIX 管道,像 ImageMagick 一样作为「着色器命令行工具」使用——这也是 第 04 章 所强调的定位。顺带一提,openFrame.io 也正是基于 glslViewer 在树莓派上展示着色器艺术作品。

小结与延伸阅读

至此,你已经掌握了一条完整的树莓派 GLSL 学习路径:

  1. 装系统:安装 Raspbian 并登录;
  2. 装工具:sudo apt-get install git-core glslviewer;
  3. 拿示例:git clone本书仓库并进入目录;
  4. 跑起来:glslviewer <示例>.frag直接运行,加-l边编辑边预览,ssh/sftp 下同样适用;
  5. 改起来:基于u_time、u_resolution、u_mouse等 uniform 约定修改示例,保存即见效果。

与本文配套的仓库资料还可以继续深入:

  • 附录 00:如何离线浏览本书——本地服务器方案;
  • 附录 02:如何打印本书——利用 glslViewer 把示例编译成图片并生成book.pdf/book.epub;
  • 第 04 章:运行你的着色器——glslViewer、glslCanvas、glslEditor 工具生态全景;
  • 第 03 章:Uniforms——示例着色器统一输入的完整讲解。

把树莓派变成你的个人 GLSL 练习机,成本低、反馈快,非常适合课堂与工作坊场景。

【免费下载链接】thebookofshaders

Step-by-step guide through the abstract and complex universe of Fragment Shaders.

项目地址:https://gitcode.com/gh_mirrors/th/thebookofshaders
点击查看免费下载
上一篇:SDR++ 终极指南:免费跨平台SDR软件快速精通教程
下一篇:ngx-quill事件处理:掌握6大输出事件的完整使用场景

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进