2012-06-22 26 views
1

我所尋找的是下面的...我有一個方形的圖像上轉了一圈,alpha爲0在角落渲染兩個紋理與混合和alpha測試

http://dl.dropbox.com/u/1401029/circle.png

,也是一個陰影,alpha爲0其他地方

http://dl.dropbox.com/u/1401029/image.png

嗯,我想有作爲最終結果,這兩種的混合渲染,再加上沒有被人塔的陰影在圈子外面被定罪

我怎麼能做到這一點? :)

編輯:這是到目前爲止我的代碼(T 2圈,T1陰影)

gl.glTexEnvf(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_MODULATE); 
gl.glEnable(GL2.GL_ALPHA_TEST); 
gl.glAlphaFunc(GL2.GL_GREATER, 0.1f); 
    t2.enable(gl);  
    t2.bind(gl); 

    t2.setTexParameteri(gl, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); 
    t2.setTexParameteri(gl, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); 

    a = 2.0f; 
    gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); 

    gl.glBegin(GL2.GL_QUADS); 
     gl.glTexCoord2f(0, 0); 
     gl.glVertex3f(-a, -a, 0); 

     gl.glTexCoord2f(0, 1); 
     gl.glVertex3f(-a, a, 0); 

     gl.glTexCoord2f(1, 1); 
     gl.glVertex3f(a, a, 0); 

     gl.glTexCoord2f(1, 0); 
     gl.glVertex3f(a, -a, 0); 
    gl.glEnd(); 

    t2.disable(gl); 
gl.glDisable(GL2.GL_ALPHA_TEST); 

gl.glDisable(GL2.GL_DEPTH_TEST); 

    gl.glEnable(GL2.GL_BLEND); 
    gl.glBlendFunc (GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA); 

    t1.enable(gl); 
    t1.bind(gl); 

    t1.setTexParameteri(gl, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); 
    t1.setTexParameteri(gl, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); 

    gl.glBegin(GL2.GL_QUADS); 
     gl.glTexCoord2f(0, 0); 
     gl.glVertex3f(-a, -a, 0); 

     gl.glTexCoord2f(0, 1); 
     gl.glVertex3f(-a, a, 0); 

     gl.glTexCoord2f(1, 1); 
     gl.glVertex3f(a, a, 0); 

     gl.glTexCoord2f(1, 0); 
     gl.glVertex3f(a, -a, 0); 
    gl.glEnd(); 

    t1.disable(gl); 
    gl.glDisable(GL2.GL_BLEND); 
gl.glEnable(GL2.GL_DEPTH_TEST); 

但它迄今沒有工作,影子得到圓上完全呈現,在這裏我錯了?

回答

1

非常簡單,您需要使用多紋理並調製第二個紋理,如so。這就像光照貼圖,所以混合功能(前的像素獲取與幀緩衝區的內容混合)是

output.rgb = Texture1.rgb * Texture2.rgb * 2; 
output.a = Texture1.a * Texture2.a; 

在肖恩哈格里夫斯words

「想想這個操作最簡單的方法是,第一紋理定義了對象,然後可以通過第二紋理被調整的基本色:

  • 當第二紋理包含50%灰度,顏色不變
  • 凡是較暗的大於50%時,顏色變暗
  • 凡是亮度超過50%時,顏色變得更亮
  • 如果第二質地不單色,彩色相應着色」

這會使圓形紋理成爲第二個紋理的「蒙版」(反之亦然)。

希望這會有所幫助!