【免费下载链接】thebookofshaders
Step-by-step guide through the abstract and complex universe of Fragment Shaders.
导读:本文围绕《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。它具备两个对学习过程至关重要的能力:
- 可以运行本书中的全部示例:每个示例的
.frag文件都能直接交给 glslViewer 编译并渲染; - 保存即重编译的实时反馈:当用户修改并保存 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 学习路径:
- 装系统:安装 Raspbian 并登录;
- 装工具:
sudo apt-get install git-core glslviewer; - 拿示例:
git clone本书仓库并进入目录; - 跑起来:
glslviewer <示例>.frag直接运行,加-l边编辑边预览,ssh/sftp 下同样适用; - 改起来:基于
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.
相关推荐
树莓派 GLSL 实战:《The Book of Shaders》示例运行与 glslViewer 实时着色器环境搭建指南
树莓派 GLSL 实战:《The Book of Shaders》示例运行与 glslViewer 实时着色器环境搭建指南 导读 本篇技术指南围绕《The Bo
在树莓派上运行 The Book of Shaders 示例:glslViewer 实时 GLSL 编程实战指南
在树莓派上运行 The Book of Shaders 示例:glslViewer 实时 GLSL 编程实战指南 本指南围绕 The Book of Shade
The Book of Shaders 树莓派实战:用 glslViewer 在 Raspberry Pi 上运行全部 GLSL 示例
The Book of Shaders 树莓派实战:用 glslViewer 在 Raspberry Pi 上运行全部 GLSL 示例 本文以《The Book
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考