opengl - 在 GLSL 中如何判断事件纹理是否为纹理 id 0?

标签 opengl glsl textures lighting

我的模型资源没有纹理,我厌倦了在没有照明的情况下将它们渲染为黑色。这是因为如果纹理 id 0 被绑定(bind)并且我询问采样器它告诉我它是黑色的。后来导致 0 * 照明,使整个对象在没有照明的情况下变黑。理想情况下,我希望它有颜色、 Material 和光照(如果我们不将其乘以 0,就会发生这种情况)

我考虑过使用 uniform 标志并针对每个对象切换它,但如果我们稍后需要部分纹理的资源,我希望有一种更简单、更高性能的方法。

我也曾绑定(bind)过白色纹理,例如插入白色像素并将其设置为换行,但这看起来像“Chi Ting”。

注意。有效的纹理可能会返回黑色,因此我们不能忽略黑色纹理读取。好吧,我们可以,但看起来不太好。目前我们没有使用任何缓冲区对象,仅使用已弃用的带有显示列表的 glBegin() glEnd() 方法。

任何其他想法将不胜感激。

最佳答案

使用空的白色纹理。它会像使用制服一样快,而且您不必处理额外的情况。

如果您真的担心速度,请将纹理合并为一个,为无纹理的部分留下一小块白色区域。更改 texCoords 比更改纹理或制服快得多。

关于opengl - 在 GLSL 中如何判断事件纹理是否为纹理 id 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174289/

相关文章:

opengl - 当我应用投影 OpenGL 时输出失真

c++ - 圆柱体上的纹理映射

c - 为什么freetype渲染出来的文字总是有些杂音?

java - 现代 GLSL 基础知识

opengl - 哪个版本的 GLSL 支持片段着色器中的索引?

c - OpenGL glAttachShader 不工作

c++ - OpenGL:是否支持在一个上下文中渲染到 FBO,然后在另一个上下文中使用 FBO 的纹理?

clone - 三个 js - 克隆着色器并更改统一值

android - 加载TextureAtlas后,有一段时间帧率较低

java - GL11 纹理渲染错误