javascript - 检查片段着色器中是否加载了 webgl 纹理

标签 javascript textures webgl

我正在编写一个带有纹理的 webgl 程序。

只要图像未加载,texture2D 函数就会返回 vec4(0.0, 0.0, 0.0, 1.0)。所以所有物体都是黑色的。

所以我想检查我的sampler2D是否可用。

我已经尝试过:

<script id="shader-fs" type="x-shader/x-fragment">
precision mediump float;

varying vec2 vTextureCoord;

uniform sampler2D uSampler;

void main(void) {
    vec4 color = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
    if(color.r == 0.0 && color.g == 0.0 && color.b == 0.0)
       color = vec4(1.0, 1.0, 1.0, 1.0);

    gl_FragColor = color;
}
</script>

但这当然没有意义,因为纹理可能是黑色的。

有人可以帮我吗?如何检查我的纹理图像是否已加载到片段着色器中?

最佳答案

你无法在 WebGL 中真正检查这一点。

解决方案:

  1. 在纹理加载之前不要渲染

  2. 使用1x1像素纹理开始,用图像填充它 一旦加载完成。 See this answer

  3. 向着色器传递更多信息,例如 uniform booltextureLoaded。 我总是选择#2,因为这意味着应用程序会立即运行,并且纹理在下载时会被填充。

关于javascript - 检查片段着色器中是否加载了 webgl 纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35151452/

相关文章:

javascript - 使用bind修改Angular Controller 内的 "this"

javascript - 何时使用 apollo-link-state 以及何时使用 apollo-cache-inmemory

javascript - JS中的碰撞检测

javascript - 删除监听器时出现问题

c++ - 如何禁用此代码中的纹理?

android - 位图太大,无法上传到纹理中

java - 片段着色器中的状态相关渲染

opengl-es - 将透明纹理与深度混合

three.js - 我怎样才能渲染一个带有照明和阴影的 Three.js 场景(见附件)?

opengl-es - WebGL - 丢弃由顶点着色器标记的片段