【发布时间】:2011-08-11 16:45:47
【问题描述】:
我正在尝试使用 OpenGL ES 2.0 为 iphone 应用程序制作多纹理点精灵。我在网上找不到任何这样的例子,而且它似乎不起作用。对点精灵使用 GL_POINTS 模式时,gl_PointCoord 不能用于多个纹理是否存在一些内置限制?
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 模式,则我永远不会看到第二个纹理。也就是参考上面的shader代码,不管我是不是
gl_FragColor = texPixel;
或
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;
}
【问题讨论】:
-
不是因为它一定会有所帮助,而是因为它可能 - 是否有机会发布您的完整顶点和片段着色器?
-
好的,用vert和frag着色器更新
标签: iphone objective-c opengl-es-2.0 point-sprites