如何显示带有 opengl 纹理的灰度图像

2024-01-03

我正在尝试创建一个要显示的纹理。我有 wxh 数组,其中每个像素是 1 个字节。我看过我可以通过 OpenGL glTexImage2D 函数使用灰度图像吗? https://stackoverflow.com/questions/680125/can-i-use-a-grayscale-image-with-the-opengl-glteximage2d-function但我不确定目前如何实施。看起来 GL_LUMINANCE 已被弃用,我需要独立处理单个通道。我不知道我应该如何尝试这个

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image_width, image_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_data);

我尝试将 GL_RGBA 更改为其他格式,例如 GL_Rhttps://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexImage2D.xhtml https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexImage2D.xhtml。我仍然无法显示图像。有没有人有什么建议?


如果你有一个带有 1 个颜色通道的源纹理,那么你可以使用以下格式GL_RED和基本内部格式GL_RED:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, image_width, image_height,
             0, GL_RED, GL_UNSIGNED_BYTE, image_data);

设置纹理参数GL_TEXTURE_SWIZZLE_G and GL_TEXTURE_SWIZZLE_B (see glTexParameteri https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexParameter.xhtml)也从红色通道读取绿色和蓝色:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED);

注意,可能GL_UNPACK_ALIGNMENT https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glPixelStore.xhtml当图像加载到纹理对象时,必须设置为 1:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, ...);

默认情况下,该参数为 4。这意味着图像的每一行均假定对齐为 4 倍数的大小。如果图像数据紧密排列,则必须更改对齐方式。


如果您使用着色器程序,那么可以通过以下方式实现相同的效果搅拌 https://www.khronos.org/opengl/wiki/Data_Type_(GLSL)#Swizzling. e.g.:

vec3 color = texture(u_texture, uv).rrr;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何显示带有 opengl 纹理的灰度图像 的相关文章

随机推荐

  • 使用 Underscore JS 对 JSON 数组进行分组和聚合

    我有一个 json 数组对象 我想根据 FlexCategoryName 列对数据进行分组 并对矩阵列执行聚合 例如 成本 平均值 点击 总和等 下面是 JSON 数组对象 Array 100 0 Object 1 Object 2 Obj
  • 我将如何计算数组中每个字母数字的数量? (美国PL)

    我不知道如何获取矩阵并计算每行的字母数字值的数量 我只会采用具有我正在计算的值的矩阵 例如 如果我得到 ABA455 7L9O36G DZLFPEI 第一行我会得到类似 A 2 B 1 4 1 5 2 的内容 并且每一行都会独立计数 如果您
  • 带片段的 ViewPager - onPause()、onResume()?

    使用时ViewPager带着碎片 我们的onPause onResume在选项卡之间移动时不会调用方法 有没有什么方法可以让我们在片段中弄清楚我们何时变得可见或隐藏 不幸的是我有逻辑onResume onPause 就像注册位置服务一样 切
  • 在深度嵌套的字典中查找键

    我有很多嵌套字典 我试图找到嵌套在某处的某个键 例如这个钥匙叫做 水果 我如何找到这个键的值 H vard 的递归解决方案可能会没问题 除非嵌套级别太高 然后你会得到一个RuntimeError maximum recursion dept
  • 我可以使用一个控制器更新 AngularJS 中的两个视图吗?

    是否可以将两个视图绑定到一个控制器 以便无论数据在何处 视图1 视图2或模型中 发生更改 两个视图都会更新 它应该像这个例子一样工作 消除混乱
  • Python函数的参数长度? [复制]

    这个问题在这里已经有答案了 可能的重复 如何找出Python中方法的数量 https stackoverflow com questions 990016 how to find out the arity of a method in p
  • RabbitMQ:如何在标头交换中使用复杂表达式?

    下面是死信队列中消息的标头 我正在使用 RabbitMQ TypeId com example queue TesteDTO correlationId dfbc9457 8de6 9b77 b7ad b259d1e2ede4 sequen
  • Google SignInButton 的 onClick 无法使用数据绑定

    当我尝试设置onClick我的 Google 中的方法SignInButton android onClick gt viewModel onGoogleLoginClick 我总是收到这个错误 发现数据绑定错误 数据绑定错误 msg 找不
  • 如何从 NSDate 中找到一周的开始?

    我正在实现一个日历视图 我希望它从包含特定日期的一周开始开始 例如 如果目标日期是 2016 年 2 月 29 日星期一 并且当前日历设置为从星期日开始 我希望我的视图从 2 月 28 日星期日开始 这看起来应该很简单 let calend
  • ASP.NET Web API 中的多个 PUT 方法

    我有一个控制器Groups通过以下行动 public GroupModel Get int ID public GroupModel Post CreateGroupModel model public void Put PublicUpd
  • 如何处理 asp.net 3.0 应用程序中 CustomAutorize 属性中的错误

    我正在开发一个 asp net MVC 3 0 应用程序 我正在使用我自己的 CustomRoleProvider 和 CustomErrorHandler 通过覆盖默认属性 一切都运转良好 但是 问题出在异常处理上 在测试应用程序时 测试
  • 未经授权访问 Google 日历 API 发布请求

    我正在尝试在 Meteor 中使用 Google 日历 REST API 我可以使用任何 GET 方法 没有任何问题 但是当我尝试在日历中创建事件时 出现未经授权的访问错误 我根据以下要点得到了我的代码code https gist git
  • 应用程序无法与 VS 2008 SP1 DLL 一起运行,以前的版本适用于 RTM 版本

    自从我们从 Visual Studio 6 切换到 Visual Studio 2008 以来 我们一直在私有并行配置中使用 MFC90 dll 和 msvc pr 90 dll 以及清单文件 这样就不用担心版本问题或将它们安装到系统中 在
  • “裸”git 存储库:如何让 Apache 始终“看到”最新提交?

    我们在服务器上有一个 裸 git 存储库 用于 Web 门户项目 多名程序员 设计师等 执行数十项工作push and pull从 到它 现在我们想要在服务器本身上测试该项目 并始终通过 Apache Web 服务器测试最后一次提交 该服务
  • 让 UISearchBar 像音乐应用程序一样关闭

    请注意如何searchBar放大镜和占位符文本都会在解雇时移动 有什么方法可以在不移动文本和图标的情况下关闭此搜索栏吗 请参阅音乐应用程序的动画 了解我想要实现的动画 我有一个UISeachBar单击导航栏中的搜索按钮时会显示该内容 IBA
  • 如何启动 64 位 PowerShell 进程,无论是从 32 位进程还是 64 位进程启动?

    我需要能够启动 64 位版本的 PowerShell exe 我通过检查 system intptr size 的值是否为 8 来验证我是否处于 64 位版本 要启动 64 位版本的 PowerShell 从 32 位进程中 使用路径 c
  • 什么是区块链和以太坊?它用在哪里?

    我刚刚有机会在基于区块链的以太坊平台上工作 但我不清楚它在哪些场景中使用 在现实生活中使用它 有人可以帮助我了解基于区块链的平台及其现实生活中的用途吗 欢迎来到区块链世界 不要灰心丧气 区块链领域相对较新 很难找到好的教程 我一个月前也开始
  • C++ 阶乘程序中的递归

    你好 我有这段代码是根据其他一些递归和阶乘程序编写的 但我的问题是我真的很困惑它如何存储值并保留它然后最后返回它 int factorialfinder int x if x 1 return 1 else return x factori
  • 网格中的 Tkinter 按钮对齐

    我试图在框架内的网格上安装两个按钮 无论根框架的大小如何 它们都会占据整行 因此 基本上一个按钮占据该行的一半 而另一个按钮占据另一半 这是我的代码 self button frame tk Frame self self button f
  • 如何显示带有 opengl 纹理的灰度图像

    我正在尝试创建一个要显示的纹理 我有 wxh 数组 其中每个像素是 1 个字节 我看过我可以通过 OpenGL glTexImage2D 函数使用灰度图像吗 https stackoverflow com questions 680125