如何显示带有 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 纹理的灰度图像 的相关文章

  • 如何从字符串中提取子字符串直到遇到第二个空格?

    我有一个像这样的字符串 o1 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 如何仅提取 o1 1232 5467 要提取的字符数并不总是相同 因此 我只想提取直到遇到
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调

随机推荐

  • 使用 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