我想爲使用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;
}
不是因爲它一定會有幫助,而是因爲它可能 - 發佈完整頂點和片段着色器的任何機會? – Tommy 2011-04-27 09:34:48
ok,更新了vert和frag着色器 – 2011-04-27 09:54:32