2011-02-11 33 views
0

除了多紋理或多通道渲染,使用固定功能流水線將紋理強度提高到因子1.0以外還有其他方法嗎?openGL固定功能流水線 - 規模以上的紋理強度1.0

它可以通過多通道渲染來實現。例如因子1.5可以通過使用添加劑混合將紋理以全強度渲染一次然後使用顏色(0.5,0.5,0.5,1.0)第二次完成。

但是,是否還有一種方法可以通過一次通過並且不使用多紋理來實現此目的?

回答

0

我假設你使用的是OpenGL 3.0或OpenGL ES庫。我認爲你可以做這樣的事情,但我不確定它是如何得到支持的。

這應該是比我原來的答案更支持一點,但你堅持使用1.5作爲調製值。

// Setup... 
glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, tex1); 

// Combine: Result.rgb = Texture + Texture - 0.5 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD_SIGNED); 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); 

// Combine: Result.a = Texture 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); 

如果你能使用着色器做到這一點,你會好得多:

//Fragment shader 
uniform sampler2D texture; 
uniform float blend; 
varying vec2 texcoord; 
void main() 
{ 
    vec4 texel0 = texture2D(texture, texcoord); 
    texel0 *= blend; 
    gl_FragColor = texel; 
} 
+0

這看起來不錯!有什麼辦法通過一些頂點屬性來獲取因子(1.5)?這樣我可以爲不同的多邊形設置不同的強度工廠,而無需爲每個多邊形發出單獨的繪製調用?我在OpenGL ES 1.5上,着色器不可用 – Mat 2011-02-12 12:08:08

0

可以使用紋理環境的GL_RGB_SCALEGL_ALPHA_SCALE屬性應用2倍或4倍比例因子,但這需要您使用紋理環境模式而不是預定義的模式。要獲得1.5比例因子,您應將GL_RGB_SCALE設置爲2.0,並設置{0.75,0.75,0.75,1.0}的顏色。請注意,每個紋理單元的紋理環境仍夾緊爲[0,1],因此如果您需要此類縮放,則應在最後一個紋理單元上應用縮放比例以避免任何裁剪。