ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

android – 如何在OpenGL ES 1.0中使用`glTexEnv`,`glColor4x`和`glBlendFunc`?

2019-09-03 04:24:30  阅读:340  来源: 互联网

标签:android alphablending opengl-es textures


我正在看SurfaceFlinger,即在Android中进行组合的代码,我无法理解一些OpenGL ES 1.0调用,因为我只编写了ES 2.0代码.

以下是我感兴趣的代码:

glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glColor4x(0x10000, 0x10000, 0x10000, 0x10000);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

应该做的是将纹理混合到缓冲区中.

为什么需要glTextEnvx和glColor4x调用? glBlendFunc不足以实现混合吗?

我知道我的问题是天真的,但我仍然不明白什么是glTexEnvx甚至在读完docs之后.

解决方法:

glTexEnv()设置纹理环境模式. GL_REPLACE告诉渲染器跳过当前颜色(例如,从glColor4()),然后告诉渲染器为每个相应的像素使用纹理的颜色.如果您使用GL_MODULATE而不是GL_REPLACE,那么当渲染器设置像素的颜色时,glColor4()调用将与纹理的颜色一起包含在内.

你的glColor4()调用不应该在你的对象上做任何事情(当使用GL_REPLACE时).

关于你的glBlendFunc()参数:

GL_ONE使用来自传入原语的当前颜色,我们称之为源. GL_ONE_MINUS_SRC_ALPHA将目标(帧缓冲区中当前存储的像素)乘以(1 – 源alpha值).

通常,当您不使用纹理时,当glColor4()包含一个alpha值,其中1等于完全不透明且0完全透明时,您可以从颜色基元获得透明效果.

标签:android,alphablending,opengl-es,textures
来源: https://codeday.me/bug/20190903/1795651.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有