1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-22 20:25:28 +08:00

校对 docs/04 Advanced OpenGL/05 Framebuffers.md,补全练习部分等翻译

This commit is contained in:
SuperAo
2024-04-25 14:10:28 +08:00
committed by Gary Wang
parent cc22ddf200
commit ead36d5174

View File

@@ -4,11 +4,11 @@
---|---
作者 | JoeyDeVries
翻译 | Krasjet
校对 | 暂未校对
校对 | [AoZhang](https://github.com/SuperAoao)
到目前为止,我们已经使用了很多屏幕缓冲了:用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做<def>帧缓冲</def>(Framebuffer),它被储存在内存中。OpenGL允许我们定义我们自己的帧缓冲也就是说我们能够定义我们自己的颜色缓冲甚至是深度缓冲和模板缓冲。
到目前为止,我们已经使用了很多屏幕缓冲了:用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做<def>帧缓冲</def>(Framebuffer),它被储存在GPU内存中的某处。OpenGL允许我们定义我们自己的帧缓冲也就是说我们能够定义我们自己的颜色缓冲甚至是深度缓冲和模板缓冲。
我们目前所做的所有操作都是在<def>默认帧缓冲</def>的渲染缓冲上进行的。默认的帧缓冲是在你创建窗口的时候生成和配置的GLFW帮我们做了这些有了我们自己的帧缓冲,我们就能够有更多方式来渲染了
我们目前所做的所有操作都是在<def>默认帧缓冲</def>的渲染缓冲上进行的。默认的帧缓冲是在你创建窗口的时候生成和配置的GLFW帮我们做了这些通过创建我们自己的帧缓冲,我们可以获得额外的渲染目标(target)
你可能不能很快理解帧缓冲的应用,但渲染你的场景到不同的帧缓冲能够让我们在场景中加入类似镜子的东西,或者做出很酷的后期处理效果。首先我们会讨论它是如何工作的,之后我们将来实现这些炫酷的后期处理效果。
@@ -34,7 +34,7 @@ glBindFramebuffer(GL_FRAMEBUFFER, fbo);
- 附加至少一个缓冲(颜色、深度或模板缓冲)。
- 至少有一个颜色附件(Attachment)。
- 所有的附件都必须是完整的(保留了内存)。
- 每个缓冲都应该有相同的样本数。
- 每个缓冲都应该有相同的样本数(sample)
如果你不知道什么是样本,不要担心,我们将在[之后的](11 Anti Aliasing.md)教程中讲到。
@@ -438,3 +438,8 @@ $$
!!! note "译注"
注意核在对屏幕纹理的边缘进行采样的时候由于还会对中心像素周围的8个像素进行采样其实会取到纹理之外的像素。由于环绕方式默认是<var>GL_REPEAT</var>,所以在没有设置的情况下取到的是屏幕另一边的像素,而另一边的像素本不应该对中心像素产生影响,这就可能会在屏幕边缘产生很奇怪的条纹。为了消除这一问题,我们可以将屏幕纹理的环绕方式都设置为<var>GL_CLAMP_TO_EDGE</var>。这样子在取到纹理外的像素时,就能够重复边缘的像素来更精确地估计最终的值了。
## 练习
- 你能使用framebuffers创建一个后视镜吗?为此,你必须绘制两次场景:一次将相机旋转180度另一次将相机正常旋转。试着在屏幕顶部创建一个小的四边形来应用镜像纹理就像[这样](https://learnopengl.com/img/advanced/framebuffers_mirror.png);[解决方案](https://learnopengl.com/code_viewer_gh.php?code=src/4.advanced_opengl/5.2.framebuffers_exercise1/framebuffers_exercise1.cpp)。
- 摆弄内核值并创建您自己感兴趣的后处理效果。尝试在互联网上搜索其他有趣的内核。