1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-23 04:35:28 +08:00

更新“混合”原文部分段落排版+链接

This commit is contained in:
1i9h7_b1u3
2025-01-19 17:58:00 +08:00
parent 0499b92877
commit dbadc7c94e

View File

@@ -22,13 +22,13 @@ OpenGL中<def>混合</def>(Blending)通常是实现物体<def>透明度</def>
有些图片并不需要半透明只需要根据纹理颜色值显示一部分或者不显示一部分没有中间情况。比如说草如果想不太费劲地创建草这种东西你需要将一个草的纹理贴在一个2D四边形(Quad)上然后将这个四边形放到场景中。然而草的形状和2D四边形的形状并不完全相同所以你只想显示草纹理的某些部分而忽略剩下的部分。 有些图片并不需要半透明只需要根据纹理颜色值显示一部分或者不显示一部分没有中间情况。比如说草如果想不太费劲地创建草这种东西你需要将一个草的纹理贴在一个2D四边形(Quad)上然后将这个四边形放到场景中。然而草的形状和2D四边形的形状并不完全相同所以你只想显示草纹理的某些部分而忽略剩下的部分。
下面这个纹理正是这样的它要么是完全不透明的alpha值为1.0要么是完全透明的alpha值为0.0),没有中间情况。你可以看到,只要不是草的部分,这个图片显示的都是网站的背景颜色而不是它本身的颜色。 下面[这个](../img/04/03/grass.png)纹理正是这样的它要么是完全不透明的alpha值为1.0要么是完全透明的alpha值为0.0),没有中间情况。你可以看到,只要不是草的部分,这个图片显示的都是网站的背景颜色而不是它本身的颜色。
![](../img/04/03/grass.png) ![](../img/04/03/grass.png)
所以当添加像草这样的植被到场景中时,我们不希望看到草的方形图像,而是只显示草的部分,并能看透图像其余的部分。我们想要<def>丢弃</def>(Discard)显示纹理中透明部分的片段,不将这些片段存储到颜色缓冲中。在此之前,我们还要学习如何加载一个透明的纹理。 所以当添加像草这样的植被到场景中时,我们不希望看到草的方形图像,而是只显示草的部分,并能看透图像其余的部分。我们想要<def>丢弃</def>(Discard)显示纹理中透明部分的片段,不将这些片段存储到颜色缓冲中
要想加载有alpha值的纹理我们并不需要改很多东西`stb_image`在纹理有alpha通道的时候会自动加载但我们仍要在纹理生成过程中告诉OpenGL我们的纹理现在使用alpha通道了 在此之前,我们还要学习如何加载一个透明的纹理。要想加载有alpha值的纹理我们并不需要改很多东西`stb_image`在纹理有alpha通道的时候会自动加载但我们仍要在纹理生成过程中告诉OpenGL我们的纹理现在使用alpha通道了
```c++ ```c++
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
@@ -189,6 +189,8 @@ OpenGL甚至给了我们更多的灵活性允许我们改变方程中源和
- GL_FUNC_ADD默认选项将两个分量相加\(\bar{C}_{result} = \color{green}{Src} + \color{red}{Dst}\)。 - GL_FUNC_ADD默认选项将两个分量相加\(\bar{C}_{result} = \color{green}{Src} + \color{red}{Dst}\)。
- GL_FUNC_SUBTRACT将两个分量相减 \(\bar{C}_{result} = \color{green}{Src} - \color{red}{Dst}\)。 - GL_FUNC_SUBTRACT将两个分量相减 \(\bar{C}_{result} = \color{green}{Src} - \color{red}{Dst}\)。
- GL_FUNC_REVERSE_SUBTRACT将两个分量相减但顺序相反\(\bar{C}_{result} = \color{red}{Dst} - \color{green}{Src}\)。 - GL_FUNC_REVERSE_SUBTRACT将两个分量相减但顺序相反\(\bar{C}_{result} = \color{red}{Dst} - \color{green}{Src}\)。
- GL_MIN取两个分量中的最小值\(\bar{C}_{result} = {min}(\color{red}{Dst}, \color{green}{Src})\)。
- GL_MAX取两个分量中的最大值\(\bar{C}_{result} = {max}(\color{red}{Dst}, \color{green}{Src})\)。
通常我们都可以省略调用<fun>glBlendEquation</fun>,因为<var>GL_FUNC_ADD</var>对大部分的操作来说都是我们希望的混合方程,但如果你真的想打破主流,其它的方程也可能符合你的要求。 通常我们都可以省略调用<fun>glBlendEquation</fun>,因为<var>GL_FUNC_ADD</var>对大部分的操作来说都是我们希望的混合方程,但如果你真的想打破主流,其它的方程也可能符合你的要求。