gpt4 book ai didi

iphone - iOS 上 OpenGL ES2.0 中的多纹理点 Sprite ?

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:33 25 4
gpt4 key购买 nike

我正在尝试使用 OpenGL ES 2.0 为 iPhone 应用程序制作多纹理点 Sprite 。我在网上找不到任何这方面的例子,而且它似乎没有用。当对点 Sprite 使用 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 模式下很好地进行多重纹理处理,但我希望使用点 Sprite 来加快处理速度。

如果可能,指向工作代码示例的链接将非常有帮助。谢谢!

编辑:

下面是我将纹理传递到我的着色器的方式。当我处于 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;

我看到了相同的纹理。这看起来很奇怪。我的猜测是你不能在一个点 Sprite 上做多重纹理并且不知何故有两个事件纹理或两次调用 gl_PointCoord 会导致问题。但我希望我错了。因此,如果有人有一个在 OpenGL ES 2.0 中使用点 Sprite 的多纹理的简单示例,我将很乐意查看该代码!

编辑 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;
}

最佳答案

您的主程序中有错别字。

传递给 glActiveTexture 的正确参数是 GL_TEXTURE0, GL_TEXTURE1, ...

请注意,GL_TEXTURE0、GL_TEXTURE1 没有值 0,1 等。

由于您向 glActiveTexture 传递了一个无效值,该函数将失败,因此事件纹理将始终为默认值(可能为 0),您的所有更改都将在 0 位置进行纹理处理。

关于iphone - iOS 上 OpenGL ES2.0 中的多纹理点 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5767988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com