那他们对应的片段着色器使用时有什么不同
时间: 2024-03-09 14:44:50 浏览: 44
opengl入门 绘制三角形+片段着色器
GL_TEXTURE_2D 纹理和 GL_TEXTURE_EXTERNAL_OES 纹理在片段着色器中的使用方式是类似的,都需要使用纹理坐标来获取纹理颜色值。
例如,使用 GL_TEXTURE_2D 纹理的片段着色器代码可能如下所示:
```
#version 330 core
in vec2 TexCoord;
out vec4 FragColor;
uniform sampler2D texture1;
void main()
{
FragColor = texture(texture1, TexCoord);
}
```
而使用 GL_TEXTURE_EXTERNAL_OES 纹理的片段着色器代码则如下所示:
```
#version 330 core
#extension GL_OES_EGL_image_external : require
in vec2 TexCoord;
out vec4 FragColor;
uniform samplerExternalOES texture2;
void main()
{
FragColor = texture(texture2, TexCoord);
}
```
可以看到,除了在 uniform 变量声明上的差异外,使用 GL_TEXTURE_EXTERNAL_OES 纹理还需要使用扩展指令 `#extension GL_OES_EGL_image_external : require` 来启用对外部纹理的支持。
此外,由于 GL_TEXTURE_EXTERNAL_OES 纹理的纹理坐标范围是固定的,所以在编写片段着色器时需要对纹理坐标进行适当的缩放和偏移。具体来说,需要将纹理坐标范围从 [0,1] 映射到 [0.5/width, (width-0.5)/width] × [0.5/height, (height-0.5)/height],其中 width 和 height 分别是外部纹理的宽度和高度。这可以通过在顶点着色器中将纹理坐标进行缩放和偏移来实现。
阅读全文