如何确定活动纹理在GLSL中是否为纹理ID 0?

问题描述

| 我的模型资产没有纹理,因此我厌倦了将它们渲染为黑色而没有光照。这是因为如果纹理id 0绑定并且我问采样器它告诉我它的黑色。后来导致0 *照明,使整个对象变黑而没有照明。理想情况下,我希望它具有颜色,材质和光亮(如果我们不将其乘以0就会发生) 我曾考虑过使用“ 0”标志并针对每个对象进行切换,但是我希望如果以后需要部分纹理化的资产时,可以使用一种更简单的高性能方法。 我还绑定了白色纹理,例如推动白色像素并将其设置为环绕,但这看起来像是“ Chi Ting”。 注意。有效纹理可能会返回黑色,因此我们不能仅仅忽略黑色纹理读取。好,我们可以,但是看起来不好。当前,我们不使用任何缓冲区对象,而仅使用不推荐使用的带有显示列表的
glBegin()
glEnd()
方法。 任何其他想法将不胜感激。     

解决方法

        使用空的白色纹理。它的速度将与使用制服一样快,并且您不必处理额外的情况。 如果您真的担心速度,可以将纹理合并为一个,为未纹理化的部分留出小的白色区域。更改texCoords比更改纹理或制服要快得多。     ,        在我自己学习openGL的尝试中,正如您所建议的,我穿着布尔制服。 使用纹理或使用固定的颜色是每个模型对象的属性,这是有道理的。因此,通过统一为每个对象在着色器上设置此属性似乎是合乎逻辑的,不涉及“作弊”! 如果它使您感觉更好,则可以将纹理(如果有)作为对象的属性,并根据其存在或不存在来设置制服,而不必通过具有纹理属性和带纹理/不带纹理的标志来复制信息。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...