当前位置: 首页 > 知识库问答 >
问题:

在Android OpenGL ES上使用alpha值堆叠纹理的技术

田鸿彩
2023-03-14

我正在开发2D图形程序,它使用OpenGL为Android 2.2及更高版本。

通常,当一个半透明的纹理堆积起来时,它会变得像留下的图像一样。我想先堆积一个纹理,让它像图像一样透明。用画布堆叠图像并使其成为纹理的方式效率低下。OpenGL API有什么办法吗?

共有1个答案

苗信鸥
2023-03-14

这只是一个想法,但可能值得尝试:您可以先绘制前景元素而不混合,然后使用“GlBlendFuncDeparate”绘制背景。前景部分应该像描述的那样绘制你的元素,然后在混合功能中,你仍然可以控制你需要多少透明度来混合它和背景。坏消息是如果背景有更多的元素要绘制。

通常,您应该使用一个绑定纹理的帧缓冲区对象来绘制前景元素。然后在您的场景中使用绑定纹理:

(你必须找到方法来取代Android的这些功能)

    glGenFramebuffers(1, &framebuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, resolution, resolution, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
    glBindRenderbuffer(GL_RENDERBUFFER, 0);

这将创建一个画布,你可以画任何东西到它作为你的主要场景,你可以重复使用绑定的纹理。请注意,“分辨率”可能需要是2的幂。此外,您需要设置矩阵和视口之前绘制。

 类似资料:
  • 我能够使用javascript和three.js库创建一个球体。然而,我有一个图像,我想覆盖在球体的顶部,每当我这样做,球体变成一个黑色的球体,没有图像投射在上面。下面是我如何实现它:var渲染器=new THREE. WebGL渲染器();renderer.set大小(window.inner宽度,window.inner高度);document.body.append(renderer.dom

  • 我有一个OpenGL纹理,我想在运行中更改纹理中像素的RGBA值。我想在CPU端做修改。我想创建一个函数,将纹理中选定坐标中的像素更改为选定的RGBA值。 我尝试了以下方法: 其中,和是修改像素的坐标,是红色、绿色、蓝色和阿尔法的整数数组。但是,我不确定我是否使用了正确的参数,因为当我使用此参数时,纹理不会改变。我想创建一个函数,使用将指定坐标中纹理中的像素颜色更改为指定颜色。

  • 更新1 如您所见,在FrameBuffer上绘制的LibGDX纹理,与直接在SpriteBatcher上绘制的纹理相比,在SpriteBatcher上绘制的纹理要比原始纹理暗一些。 左侧为原图,比手机1080x1920屏幕小50%。 右侧部分是先在FrameBuffer上绘制的TextureRegion,然后在SpriteBatch上绘制,如下代码所示: 如你所见,它比直接从纹理绘制的图像暗一点。

  • 柱形图和面积图可以设置成堆叠的形式,堆叠后同一个分类下的数据不再是水平依次排列而是依次从上到下堆叠在一起。 堆叠有两种形式,普通的堆叠和按百分比堆叠;普通堆叠是按照数值大小依次堆叠,百分比堆叠是按照数值所占百分比进行堆叠。 下面是堆叠图和百分比堆叠图例子: 图 5-1 堆叠图 图 5-2 百分比堆叠图 通过指定柱形图或面积图的 stacking 属性即可是图形堆叠,示例代码如下: plotOpit

  • 问题内容: 如何显示来自数据框的堆叠式Barh图表的值?如何将标签放置在每个栏上其相应区域的上方,并修改字体,使其以灰度图形的形式很好地显示? 它与此问题有关,但是它具有一个值列表,而不是从熊猫数据框中提取的两个列表。如果这是一个单列表,我想我可以从数据框中的单个记录中提取值,但可以有两个列表,我不确定如何将其应用于条形图中的每个条形。 我的数据框: 我的代码: 问题答案: 您可以通过注释条与参考

  • 我有一个简单的平原(正方形),上面有灯光和材料,我想在上面放一个地球纹理。但是什么都没有出现。我检查过,认为它正确加载了RGB数据,所以我的猜测是这一行有问题(数据是*char,图像是BMP24) 这是一个例子。bmp加载功能: 以下是主要和显示功能: 我玩过代码,有时(当我使用int而不是char*时)我会得到一个红色的材料覆盖所有内容,但不知道到底是什么导致了它 更新:必须更改几行才能正常工作