6

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

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

例如,我也有绑定一个白色纹理推动一个白色像素并将其设置为包裹,但这看起来像“Chi Ting”。

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

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

4

2 回答 2

7

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

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

于 2011-05-30T10:31:40.803 回答
3

在我自己学习 openGL 的尝试中,我按照您的建议使用了布尔统一。

使用纹理或具有固定颜色是每个模型对象的属性是有道理的;因此,通过统一在每个对象的着色器上设置此属性似乎是合乎逻辑的,不涉及“作弊”!

如果它让您感觉更好,您可以将纹理(如果有)作为对象的属性,并根据其存在或不存在设置制服,而不是通过具有纹理属性和纹理/非纹理标志来复制信息.

于 2011-05-30T10:13:44.683 回答