OpenGL ES (iPhone) 多重纹理 (2D) 代码

发布于 2024-08-20 11:26:29 字数 812 浏览 16 评论 0 原文

我有一个来自这个PNG的纹理:

另一个来自这个PNG:

alt text

它们都有相同的混合函数:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

我想先在一个多边形上看到它们。我只是找不到一个简单的 混合函数这方面的例子。将它们绘制到不同的多边形效果很完美,但我只是无法将它们“合并”成一个纹理。任何工作示例代码线将不胜感激。

第二个问题是制作镜面反射贴图的 alpha 变量。我可以看到我必须以某种方式将 alpha 与原色(从我的变量创建)进行纹理组合,但同样,没有代码的工作示例。我开始研究glTexEnvi函数,但还没有任何结果。

拜托,我求你只需要大约 16 行代码!我用 google 搜索了整个网络,但仍然卡住了。

我想要实现的引擎(帖子底部的工作Flash草图)是此处

I have a texture from this PNG:

alt text

And another from this PNG:

alt text

They both have the same blend function:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

I want to see them on one single polygon first. I just couldn't find a simple example of this. Draw them to different polygons works perfect, but I just cannot "merge" them into one texture. Any working sample codelines would be appreciated well.

Second problem is to make the specular map's alpha variable. I can see that I have to texture combine somehow it's alpha with the primary color (created from my variable), but again, have no working example of codes. I began to study glTexEnvi function, but yet I have no any result.

Please, I beg you for just about 16 lines of code! I googled the whole net, but still stuck.

The engine I want to implement (working flash sketch on the bottom of the post) is here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沫尐诺 2024-08-27 11:26:29

我不知道您需要的确切代码行,但似乎您使用 glTexEnv 走在正确的道路上...这个 关于 opengles 1.1 的书对此进行了一些讨论。我认为你想要的是纹理组合器:

glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, myTextureObject);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);

// Tell OpenGL which arithmetic operation to use: 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, <operation>);

// Set the first argument:
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, <source0>);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, <operand0>);

// Set the second argument:
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, <source1>);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, <operand1>);

我不知道这是否能实现你想要的,但你可能仍然需要 FBO 来正确完成它。

I don't know the exact lines of code that you need, but it seems that you were on the right path with glTexEnv... This book on opengles 1.1 talks about it some. I think what you want are texture combiners:

glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, myTextureObject);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);

// Tell OpenGL which arithmetic operation to use: 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, <operation>);

// Set the first argument:
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, <source0>);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, <operand0>);

// Set the second argument:
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, <source1>);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, <operand1>);

I don't know if this will accomplish what you want though, you may still need the FBOs to do it right.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文