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

使用glTexSubImage2D修改纹理的像素RGBA值不会更新纹理

冯星剑
2023-03-14

我有一个OpenGL纹理,我想在运行中更改纹理中像素的RGBA值。我想在CPU端做修改。我想创建一个函数,将纹理中选定坐标中的像素更改为选定的RGBA值。

我尝试了以下方法:

glTexSubImage2D(GL_TEXTURE_2D,0,x,y,1,1,GL_RGBA,GL_UNSIGNED_BYTE,data);

其中,xy是修改像素的坐标,data是红色、绿色、蓝色和阿尔法的整数数组。但是,我不确定我是否使用了正确的参数,因为当我使用此参数时,纹理不会改变。我想创建一个函数,使用glTexSubImage2D将指定坐标中纹理中的像素颜色更改为指定颜色。

共有1个答案

丁嘉庆
2023-03-14

您必须创建一个直接缓冲区,以便通过glTexSubImage2D

我建议创建一个ByteBuffer,大致如下:

ByteBuffer buffer = ByteBuffer.allocateDirect(data.length);
buffer.put(data);
buffer.flip();
glTexSubImage2D(GL_TEXTURE_2D,0,x,y,1,1,GL_RGBA,GL_UNSIGNED_BYTE,buffer);

如果data已经是一个直接缓冲区,但它是一个IntBuffer,那么指定单个颜色通道的数据类型的glTexas SubImage2D的第8个参数必须是GL_UNSIGNED_INTGL_INT

glTexSubImage2D(GL_TEXTURE_2D,0,x,y,1,1,GL_RGBA,GL_UNSIGNED_INT,data);
 类似资料:
  • 我正在制作一个mod,我得到了这个错误: 使用缺少的纹理,无法加载空:纹理/项目/训练紧身靴。png java。伊奥。FileNotFoundException:null:纹理/项目/训练紧身靴。巴布亚新几内亚 我有纹理名称设置为完全以上和文件夹项目。 这是我的代码: 我换了这部分

  • 我正在努力发送多个纹理到一个单一的着色器,并有一个奇怪的问题,在着色器中的两个采样器似乎得到相同的纹理数据。我知道还有很多其他的多纹理问题和答案(这里有一些我已经读过很多次了1,2,3),但一些bug正在逃避我,我开始失去我的弹珠。我很有信心我已经把一切都安排好了,但显然还是有一些问题。 所以,目前我有形状,材料,纹理,和着色器类。我的shape类是执行实际绘制的父类。它有一个具有着色器和纹理数组

  • 最近我发现了一个OpenGL示例,它应用纹理而没有指定纹理图像单元并且没有将相应的单元整数均匀发送到着色器中,是否可以在不使用纹理单元的情况下应用纹理??或者它只是为活动纹理单元及其着色器采样器值使用默认值。 我的代码块(纹理相关): 我的片段着色器:

  • 有人能给我解释一下,我如何在OpenGL中渲染多个不同纹理的物体吗? 我认为我接近最终结果,但目前我被困在这里,我不知道下一步需要做什么。真的需要一些帮助! 目前,这就是我所拥有的: > < li> drawSphere():根据经度和纬度的数量绘制UV球体 int numberOfVerices = 0; SetupGeometry():该方法用于绑定顶点和纹理坐标。 DrawSphere(30

  • 译注 注意,由于作者对教程做出了更新,之前本节使用的是SOIL库,但现在改为了使用stb_image.h库,关于SOIL配置的部分现在已经被修改,但我仍决定将这部分教程保留起来,放到一个历史存档中,如果有需要的话可以到这里来查看。 我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会

  • 将图片加载后创建纹理对象,纹理将直接用于绘制 createTextures(object) 纹理异步加载,批量异步加载接口 手Q版本:7.8.0 函数参数object属性: 属性名 类型 是否必填 说明 file Array 是 要加载的图片文件数组 success Function 否 接口调用成功回调 fail Function 否 接口调用失败回调 complete Function 否 接