我的模型资产没有纹理,我厌倦了将它们渲染为没有光照的黑色。这是因为如果纹理id 0被绑定,我问采样器它告诉我它的黑色。后来导致0 *照明使整个物体变黑而没有照明。理想情况下,我希望它有颜色,有光泽和有光泽(如果我们不将它乘以0,就会发生这种情况)
我已经考虑过使用uniform
标记并为每个对象切换它,但如果我们稍后需要部分纹理化资源,我希望有一个更简单的更高性能标记。
我也有绑定白色纹理推白色像素并将其设置为包裹,但这看起来像“Chi Ting”。
请注意。有效纹理可能会返回黑色,因此我们不能忽略黑色纹理读取。好吧,我们可以,但它看起来不会很好。目前我们没有使用任何缓冲区对象,只使用了已弃用的glBegin()
glEnd()
方法和显示列表。
任何其他想法将不胜感激。
答案 0 :(得分:6)
使用空白纹理。它将与使用制服一样快,您不必处理额外的情况。
如果您真的担心速度,请将纹理合并为一个,为无纹理部分留下小的白色区域。改变texCoords比改变纹理或制服要快得多。
答案 1 :(得分:2)
在我自己尝试学习openGL时,我按照你的建议选择了布尔制服。
使用纹理或具有固定颜色是每个模型对象的属性是有道理的;因此,通过制服在每个对象的着色器上设置此属性似乎是合乎逻辑的,不涉及“作弊”!
如果它让你感觉更好,你可以将纹理(如果有的话)作为对象的属性,并根据其存在或不存在来设置制服,而不是通过具有纹理属性和纹理/来复制信息。没有纹理的旗帜。