如何更改 OpenGL 纹理中的单个纹素

2023-11-24

我想更改给定位置的 OpenGL 纹理中的一些纹理元素。谁能帮我解决这个问题吗?

这就是我想要的功能

void ChangeTexelColor(int x, int y, GLuint id, int texW, int texH, GLenum format)
{
   //What is here ?     
}

这将用于维护我的游戏的小地图(如果有人对维护动态地图纹理有更好的想法)。顺便说一句,这必须快点完成。谢谢。


OpenGL有glTexSubImage2D功能,这正是您的目的。

这是一个改变一个纹理元素颜色的函数:

void changeTexelColor(GLuint id, GLint x, GLint y, uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
    uint8_t data[4];
    data[0] = r;
    data[1] = g;
    data[2] = b;
    data[3] = a;
    glBindTexture(GL_TEXTURE_2D, id);
    glTexSubImage2D(GL_TEXTURE_2D,
                    0,
                    x,
                    y,
                    1,
                    1,
                    GL_RGBA,
                    GL_UNSIGNED_BYTE,
                    data);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改 OpenGL 纹理中的单个纹素 的相关文章

  • 在 OpenGL 中实例化数百万个对象:提高每秒帧数

    我的最终目标是以 60 fps 渲染 100 万个不同尺寸和颜色的球体 我也希望能够在屏幕上移动相机 我已经修改了代码我正在学习的教程的这一页 http learnopengl com Advanced OpenGL Instancing尝
  • 渲染到一个颜色通道而不影响其他通道

    使用 OpenGL 任何版本 如何通过一次仅影响一个颜色通道来渲染到帧缓冲区对象 例如 我的帧缓冲区对象具有 GL BGRA 布局 现在我想执行一些渲染命令 这些命令应该只改变红色通道 因此 如果片段用颜色 204 0 0 0 渲染并且像素
  • Windows 上的 OpenGL SDK

    我正在尝试编写一个 OpenGL 应用程序 因此我安装了 Windows 7 SDK 然而 它似乎是OpenGL 1 1 define GL VERSION 1 1 1 如何找到我安装的 OpenGL 版本 dll 以及在哪里可以找到较新的
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • 之前对 GL.Color3 的调用使我的纹理使用了错误的颜色

    制作 2D OpenGL 游戏 渲染帧时 我需要首先绘制一些计算的四边形几何体 然后绘制一些纹理精灵 当我的渲染方法主体仅绘制精灵时 一切正常 但是 当我尝试在精灵之前绘制几何四边形时 精灵的纹理会更改为之前使用的最后一个 GL Color
  • 进行亚像素平移时,2D 纹理会扭曲

    我想知道一个理论推理为什么这是可能的 几何体的平移与纹理映射有何关系 我只能在进行子像素平移时注意到这种效果 如果通过整个像素平移 纹理看起来很好 我正在使用正交投影 GL CLAMP TO EDGE GL NEAREST 片段着色器是hi
  • nVidia 和 ATI 之间的 OpenGL 渲染差异

    最近 我将 ATI 驱动程序 我使用的是 HD7970 更新为最新版本 但我的 OpenGL 项目的一些对象停止工作 更重要的是 他们适用于 nVidia 最新驱动程序 在 960m 上测试 ATI 和 nVidia 渲染管道之间有什么我应
  • 如何在 OpenGL 中绘制镜像某些东西的镜子?

    根据我的理解 要在 OpenGL 中进行镜像 您基本上需要绘制场景 然后将所有内容翻转并再次绘制 只是使其通过镜子可见 从而在镜子中创建完美翻转的图像 但我看到的问题是 执行此操作时 唯一可以看到其他镜子的镜子是在前一个镜子之后渲染的镜子
  • 如何使用OpenGL数组纹理?

    我正在尝试在OpenGL中使用精灵表 通过数组纹理实现它这就是我加载纹理的方式 QImage image image load C QtProjects project images spritesheet png png const un
  • 允许使用 SurfaceTexture 在 GLSurfaceView 渲染器中进行多通道渲染

    我正在显示视频GLSurfaceView使用需要连续应用多个着色器的自定义渲染器 目前 它可以成功地使用一个着色器 但我不确定如何扩展渲染管道以连续应用多个着色器 我知道有一些关于应用多个着色器的示例 使用FrameBuffers and
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • Libgdx SpriteBatch.draw() 指定 4 个顶点

    我正在使用 libGdx 创建一个 2d 游戏 并尝试使用这个特殊的方法来绘制一个简单的 2d 纹理 分别指定 4 个顶点 draw Texture texture float spriteVertices int offset int l
  • 光照不适用于 gluSphere

    这是一个简单的问题 我有点羞于寻求帮助 我正在对 gluSphere 进行简单调用来渲染球体 但是 即使我很确定我正确添加了法线和照明 它也无法正确照亮 但是 如果我添加纹理 模型会正常点亮 但它似乎总是平滑的 并且我无法将其更改为平面 这
  • 如何读取屏幕上的像素?

    我正在尝试为网页游戏制作一个简单的机器人 所以我希望能够读取屏幕上像素的颜色 我已经在 Windows 上使用 GetPixel 完成了此操作 但我似乎无法在 OS X 上弄清楚它 我一直在网上查找并遇到了 glReadPixel 当我在X
  • 使用 OpenGL 或 D3D 绘制椭圆的有效方法

    有一种快速画圆的方法 void DrawCircle float cx float cy float r int num segments float theta 2 3 1415926 float num segments float c
  • 如何将 OpenGL 数学 (GLM) 添加到 Xcode 4?

    我不知道如何将框架添加到我的项目中 我尝试像任何其他框架一样添加它 方法是单击 链接二进制文件与库 下的加号按钮 然后单击 其他 然后选择 GLM 文件夹 但是当我去包含它时 自动完成功能可以工作 但无法构建 因为它说找不到该文件 图书馆网
  • 如何获取片段的当前颜色?

    我正在尝试了解 GLSL 中的着色器 并且找到了一些有用的资源和教程 但我一直在寻找一些应该是基本且微不足道的东西 我的片段着色器如何检索当前片段 你通过说设置最终颜色gl FragColor whatever 但显然这是一个仅输出值 如何
  • OpenGL 中的像素间隙从何而来?

    我遇到的问题是 渲染场景中有一些像素 似乎丢失 看不见 因此与我的透明颜色相同 颜色 有趣的是 只有当 MSAA 关闭时才会发生这种情况 我的第一个想法是 这可能与以下事实有关 所有三角形都是重叠的 并且被投影矩阵以某种方式扭曲 但这些伪像
  • Opengl 简单片段着色器在纹理上覆盖半透明三角形条

    我有一个带纹理的三角形条 形成一个四边形 当您单击它时 我希望周围的区域用半透明的四边形标记 这样您仍然可以看到下面的纹理 我的四边形显示正确 但它们根本不透明 并且完全覆盖了下面的任何内容 我有一个非常简单的片段着色器 我认为可以使用它g
  • OpenGL 和多个 GPU - 一般可能性

    我想知道 是否可以在多个 GPU 上同时运行多窗口 OpenGL 应用程序 更具体地说 假设我创建了一个应用程序 其中有两个窗口 每个窗口彼此共享 GL 上下文 现在 如果我将其中一个窗口从显示器 1 在 GPU 1 上运行 移动到显示器

随机推荐