2014-04-15 23 views
0

我有一個程序加載在背景紋理,然後加載在模型中可能有紋理分配(加載工作正常)的一些材料。OpenGL多紋理,其中一個工程,其他出現棕色

渲染時,它首先結合的背景紋理,並使用它自己的渲染調用等

然後它呈現的模型(涉及綁定時,被渲染特定的材料模型紋理渲染的背景等等上)。

問題:背景顯示正常,但模型沒有紋理。它是均勻的淺棕色。

我是否需要使用多個紋理單元?

更多信息:我正在將此程序從使用固定功能管道轉換爲使用着色器。目前背景是以舊的方式渲染的,但我使用着色器渲染模型。我感到困惑的原因是,如果我使用固定管道渲染模型,紋理顯示良好,但只要我使用着色器程序,就會呈現均勻的棕色。

加載着色器後,我正在設置glUniform1i(texture_sampler_uniform_location, 0);

回答

1

加載着色器小號

後,我認爲這是你的問題就在這裏。統一值是每個着色器獨立的,所以你必須爲每個着色器程序指定它們。你提出問題提示的方式,你只需要設置統一值一次,期待它在所有着色器之間共享。

也是均勻的棕色表示沒有適用的紋理座標。頂點和片段着色器代碼的外觀如何,以及如何提供紋理座標?

+0

「統一的棕色顏色表示,有沒有合適的紋理座標應用」 謝謝,至少清理的原因。只有一個着色器程序使用制服,所以這不是問題。 我現在已經確定了它,但我不確定如何或在哪裏做了它。刪除了所有glActiveTexture調用和其他一些duff代碼。 我認爲我最初與透明紋理混淆,導致不必要的更改打破了代碼。然後意識到我所要做的就是將alpha值設置爲1.0,但是到那時它已經被「假定的修復」 - >棕色紋理破壞了。抱歉! –

0

如果你想使用多個紋理,那麼你也需要使用glActiveTexture(GLenum texture)

基本上,你已經像你一樣初始化你的着色器,儘管你需要每個紋理處理。

glUniform1i(texture1_sampler_uniform_location, 0); 
glUniform1i(texture2_sampler_uniform_location, 1); 

然後當你想渲染和使用紋理時,你需要做以下的事情。

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, texture1_handle); 

glActiveTexture(GL_TEXTURE1); 
glBindTexture(GL_TEXTURE_2D, texture2_handle); 
+0

我認爲OP只是想切換紋理。爲此,你不需要使用多個紋理單元(如果那樣的話你很快就會用完紋理單元)。 – datenwolf

+0

@datenwolf我似乎已經讀過它,OP不能使用多個紋理,這意味着需要使用'glActiveTexture'。 – Vallentin

+0

OP寫道'問題:背景顯示正常,但模型沒有紋理。它是均勻的淺棕色。「 - 這不是多紋理問題,而是紋理切換問題。 – datenwolf