2011-04-24 63 views
4

我想爲使用OpenGL ES 2.0的iphone應用程序製作多紋理的點精靈。我在網上找不到任何這樣的例子,它似乎沒有工作。在使用GL_POINTS模式處理點圖時,是否存在一些內置限制,其中gl_PointCoord不能用於多個紋理?iOS中的OpenGL ES2.0中的多紋理點精靈?

uniform sampler2D tex;  
uniform sampler2D blur_tex; 
vec4 texPixel = texture2D(tex, gl_PointCoord); 
vec4 blurPixel = texture2D(blur_tex, gl_PointCoord); 

我敢肯定,我在紋理傳遞正確的,因爲我可以做多紋理只是TRIANGLE_STRIP模式很好,但我希望用點精靈加快速度。

如果它可能的話,指向工作代碼示例的鏈接將非常有用。謝謝!

編輯:

這裏是我如何傳入紋理着色我。這使我可以在TRIANGLE或TRIANGLE_STRIP模式下進行多紋理。

//pass in position and tex_coord attributes... 

//normal tex 
glActiveTexture(0); 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, tex0); 
glUniform1i(SAMPLER_0_UNIFORM, 0); 

//blur tex 
glActiveTexture(1); 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, tex1); 
glUniform1i(SAMPLER_1_UNIFORM, 1); 
//draw arrays... 

但是,如果我使用POINTS模式,那麼我永遠不會看到第二個紋理。也就是說,參考上面的着色器代碼,我是否需要

gl_FragColor = texPixel;

OR

gl_FragColor = blurPixel;

我看到相同的紋理。這似乎很奇怪。我的猜測是,你不能對點精靈進行多紋理處理,並且有兩個活動紋理或兩個對gl_PointCoord的調用會導致問題。但我希望我錯了。所以如果有人在OpenGL ES 2.0中有一個簡單的多紋理的例子,我將很高興看到這些代碼!

編輯2:

頂點着色器:

attribute vec4 position; 

void main() { 
    gl_PointSize = 15.0; 
    gl_Position = position; 
} 

片段着色器:

precision mediump float; 

uniform sampler2D tex;  
uniform sampler2D blur_tex; 

void main() { 
    vec4 texPixel = texture2D(tex, gl_PointCoord); 
    vec4 blurPixel = texture2D(blur_tex, gl_PointCoord); 

    //these both do the same thing even though I am passing in two different textures?!?!?!? 

    //gl_FragColor = texPixel; 
    gl_FragColor = blurPixel; 
} 
+0

不是因爲它一定會有幫助,而是因爲它可能 - 發佈完整頂點和片段着色器的任何機會? – Tommy 2011-04-27 09:34:48

+0

ok,更新了vert和frag着色器 – 2011-04-27 09:54:32

回答

1

source 在我的情況存在用於點

可能的問題是一個混合在不存在的參數

glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
+0

是的,我有...我得到了正確大小的其中一個紋理(由頂點着色器中的gl_PointSize定義),但另一個紋理沒有出現。再次,這是與三角形(我可以傳入和混合兩個單獨的紋理),只是不與點精靈。 – 2011-04-26 07:11:22

+0

使gl_FragColor = vec4(1,0,0,1)確定它是否在正確的位置。如果你會看到紅色的四邊形,那麼在混合時會出現問題,如果你不會看到紅色的四邊形,那麼在位置或參數上有問題 – 2011-04-26 08:48:09

+0

好吧,讓我編輯我的原始問題... – 2011-04-27 09:14:02

3

您的主程序中存在拼寫錯誤。

正確的參數傳遞給glActiveTexture是GL_TEXTURE0,GL_TEXTURE1,...

注意GL_TEXTURE0,GL_TEXTURE1不具有0,1等

值既然你傳遞一個無效值到glActiveTexture,該函數將失敗,因此活動紋理將始終爲默認值(可能爲0),所有更改將在0位置進行紋理處理。

+0

哎呀!感謝您指出了這一點... – 2011-05-14 00:43:42

1

我認爲可能已經太遲而無法發佈這個。

你的代碼有兩個問題。其中一個是Satyakam指出的。另一個問題是你不應該使用glUniform1f。正確的是glUniform1i。順從是指尾或尾,意思是浮動或整數。

+0

好點,感謝捕捉錯字 – 2012-04-02 21:25:50