OpenGL ES 2.0 通过共享 C++ 代码在 ios 和 android 上进行抗锯齿或平滑处理

2024-04-18

我对 OpenGL 和 ES2.0 还很陌生。我共享了c++ opengl es2代码,我用它在ios和android上绘制(使用ndk CMake)...它大部分都可以工作,但现在我需要抗锯齿并且它有点令人困惑,我看到的解决方案是依赖于平台和android端的比较混乱并且有局限性。我一直在寻找解决方案,但需要更清晰的说明。

什么应该对两者都起作用:显然,Kronos 渲染缓冲区 https://www.khronos.org/opengl/wiki/Renderbuffer_Object描述说

渲染缓冲区对象本身还支持多重采样 (MSAA)。

但es 2.0似乎不支持这个。 iOS有自己的方法glRenderbufferStorageMultisampleAPPLE在 es 2.0 上支持它,但 android 没有它。 android 也不能 Blit the FrameBuffers,而 ios 有自己的方法(再次)glResolveMultisampleFramebufferAPPLE要做到这一点。

如果这是特定于平台的: iOS 可以做setDrawableMultisample:GLKViewDrawableMultisample4X这似乎有效。但是android有局限性,有EGLConfigChooser's chooseConfig要做到这一点,但我读过并不是所有的 Android 设备都支持像这样的抗锯齿功能(我也无法在模拟器上测试它),所以我必须在本机 C++ 代码中再次执行此操作。

Other:我一直在阅读,有一些方法,例如以圆形方式多次绘制所有内容(更精确)或将整个视图放大到 2 倍并绘制,然后缩小比例以获得更平滑的线条...我的另一种方法我不确定它是否有效,但绘制到纹理或图像,以某种方式进行抗锯齿或支持它(需要更好地理解这一点)

我现在需要什么:我的要求是只用颜色绘制顶点(我通过这个做我的事情)使用glDrawArrays方法。绘制的所有内容都应该是平滑的或抗锯齿的。我应该如何处理这个问题?我需要更好的参考资料或教程,在那里我可以正确阅读任何适用于两者的方法。我不介意阅读和学习,但我有点被太多的选择所困扰,但对它们的背景却知之甚少。编辑:我正在绘制 2D(z=0 始终),不存在深度问题。


OpenGL ES 2.0 针对低端平台,因此不require抗锯齿。然而,由于许多硬件超出了 ES 2.0 的要求,因此经常会实现扩展。

假设您需要在不支持它的平台上执行此操作,尽管这是一个不公平的要求(如果流浪汉想要视觉完美,他们应该购买出色的硬件),但有一些事情可以解决可能有用取决于渲染场景和开发预算:

  1. 在着色器中手动计算片段覆盖率,设置alpha,使用GL_ALPHA_SATURATE进行混合;在我看来,这是目前最好看的 AA 技术,尽管只有不透明的表面(奇怪的是,尽管没有平滑的多边形,但 ES 2.0 仍支持这种技术?)
  2. 时间超级采样 https://bartwronski.com/2014/03/15/temporal-supersampling-and-antialiasing/。将最近渲染的几个帧合并在一起,并有轻微的偏移。如果展示的东西发生了很大的变化,这可能不是更好的选择。
  3. 使用透明线过度绘制。对于任何表面,绘制具有透明度的线框。边缘会变得更光滑一些,但表面也会变大一些。
  4. 将顶点钳位到着色器中的像素中心。这会稍微降低垂直/水平边缘附近的移动感觉,但在某些情况下可能会产生不太平滑的感觉。
  5. 选择更能抵抗锯齿的视觉风格。当像素对齐的四边形效果同样好时,我会避免使用圆圈。当由于像素几何形状而存在色彩锯齿的风险时,我会更仔细地选择背景和前景色。从某种意义上说,这是设计级别上的 AA,而不是渲染级别上的,并且不应低估,因为它通常便宜且便携。

如果您实现上述任何一项,我会对您的结果和场景的更多细节非常感兴趣。

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

OpenGL ES 2.0 通过共享 C++ 代码在 ios 和 android 上进行抗锯齿或平滑处理 的相关文章

随机推荐

  • 同时维护多个emacs配置

    我想在同一台电脑上的同一用户帐户上同时维护多个 emacs 配置 例如 emacs prelude emacs starter kit 和我自己的自定义 emacs 配置 为此 我设置了 emacs1 d emacs2 d emacs3 d
  • Qt Signal/Slots 发送完整结构

    我正在尝试通过两个线程之间的信号 槽发送一个结构 我的信号 槽已正确连接 并且我已经能够发送包含部分数据的 QString 但现在我需要发送整个数据 而结构似乎是最明智的 但是 当我尝试时 信号未发送 接收 问题似乎仅与发送 接收结构 前后
  • 在android中通过cardview创建视图

    I want to create this layout 这是一个卡片视图 灰色视图 和图像视图 蓝色视图 我使用这个代码
  • 使用 Facebook 登录 注销后出现问题

    我正在使用 facebook sdk 和 facebook connect 使用 asp net 和 c 将 Facebook 集成到我的网站中 用户可以使用该代码成功登录 我面临的问题是 每当用户通过 fb 登录时 如果用户从 faceb
  • 是否可以更改AVPlayer的背景颜色?如果是,怎么办?

    我希望将默认背景颜色从黑色更改为我想要的颜色 可能是与视频形成对比的颜色 大多数时候是黑色 我已将这段代码添加到我的viewWillAppear 功能 let playerLayer AVPlayerLayer player player
  • 向上或向下滚动时的 JavaScript 事件

    是否可以编写 JavaScript 来在手动向上或向下滚动 DIV 层的滚动条时执行操作 如果是这样 请给我一个提示 以实现一个简单的警报框 表示您向上滚动并向下滚动 您可以简单地使用onscrolljava脚本的事件 OnScroll 事
  • 在heroku上部署django网站出错

    我正在heroku 中部署我的django 网站 并在django 的setting py 文件中使用DATABASE 我正在遵循以下所有步骤赫罗库帮助 https devcenter heroku com articles getting
  • Android - 禁用 HDMI

    我的一个 Android 项目需要时不时地在 2 个 HDMI 输入之间切换 可能是一分钟一次 一根 HDMI 输入来自 Android 设备的 HDMI 输出 一根来自外部不可控源 我发现了一个 HDMI 开关 当信号可用时 它可以自动在
  • 前向声明类型 - 这背后的原因是什么

    Forward declare a type point to be a struct typedef struct point point Declare the struct with integer members x y struc
  • 从动态内容提供者加载 html5 音频并进行身份验证

    假设我们这里有一个内容提供者端点myuri org api auth sources id 它返回由 id 标识的音乐文件 路线 api auth 需要身份验证 在本例中 这是通过在请求标头中传递 JWT 来完成的 如下所示Authenti
  • Symfony2 根据提交的数据形成验证组

    我有一些复杂的表单 带有多个子表单 并且我希望能够根据主表单中选择的单选按钮单独验证每个子表单 我想通过验证组来实现这一目标 注 我没有data class模型 我使用数组 这是我的简化表格 class MyType extends Abs
  • Prolog - 从列表中删除具有相同第一个值的对

    我有这样的对象列表 list obj x y obj x z obj a b obj b c 我想删除那些共享相同第一个值的元素 这样我就可以使用修改后的列表 在这种情况下 最终列表将如下所示 list obj a b obj b c 有人
  • 为什么比较器声明等于?

    比较器接口有自己的equals 方法 任何班级都会得到equals 默认情况下通过 Object 类 需要具备什么equals 接口内的方法 Comparator细化合同Object equals 它必须满足以下规定的约束Object eq
  • 从 PHP 读取 Git 提交消息

    我正在寻找一种使用 PHP 读取 Git 提交消息的方法 我怀疑我需要使用 Git hook 但我以前从未使用过它们 所以我需要一个push朝着正确的方向 具体来说 我想实现以下流程 每次提交后都会自动执行 PHP 脚本 该脚本捕获 Git
  • WebRTC 与 python

    我想用 python twisted 制作一个流服务器 它接收 WebRTC 视频流 然后对其应用一些 OpenCV 算法 但是我找不到 WebRTC 的 python 模块 如何使用 python twisted 发送和接收 WebRTC
  • 在elasticsearch中截断索引

    等效操作是什么elasticsearch为了做 TRUNCATE mytable 我要截断的索引称为 myindex 换句话说 在操作之后 我希望索引 myindex 中有零个文档 您需要删除索引 然后重新创建它 虽然这需要您再次设置映射
  • Android中如何根据POJO类的类项在CustomListView中实现搜索?

    我有一个自定义列表视图 我必须显示来自网络服务器的数据 我需要根据 EditText 的输入实现搜索 ListView 中的每一行包含图像 标题和消息 图像根据 Web 服务器的响应进行更改 看一下代码 class CustomListVi
  • WPF 中未显示按钮的背景图像

    我有一个程序 其中有很多按钮 每个按钮的背景设置为
  • 检测 PHP 中的 Ajax

    我正在尝试将 ajax 发布到同一个 php 页面 Ajax loginForm submit function e e preventDefault var postData this serialize post login php p
  • OpenGL ES 2.0 通过共享 C++ 代码在 ios 和 android 上进行抗锯齿或平滑处理

    我对 OpenGL 和 ES2 0 还很陌生 我共享了c opengl es2代码 我用它在ios和android上绘制 使用ndk CMake 它大部分都可以工作 但现在我需要抗锯齿并且它有点令人困惑 我看到的解决方案是依赖于平台和and