gpt4 book ai didi

android - 在 Android、OpenGL 上实现抗锯齿 (FSAA?)

转载 作者:搜寻专家 更新时间:2023-11-01 08:12:48 26 4
gpt4 key购买 nike

我目前在 Android 上使用 OpenGL 绘制设置宽度的线条,除了 Android 上的 OpenGL 本身不支持此类线条的抗锯齿之外,它工作得很好。我做了一些研究,但是我一直在研究如何实现我自己的 AA。

FSAA

我找到的第一个可能的解决方案是全屏抗锯齿。我读过this page关于这个主题,但我正在努力了解如何实现它。

  • 首先,我不确定在这里实现 FSAA 的整个概念。文章指出“一种直接的抖动方法是修改投影矩阵,在 x 和 y 中添加小的平移”。这是否意味着我需要不断地极快地移动同一条线,或者多次绘制同一条线?
  • 其次,文章说“要根据像素计算抖动偏移量,请将抖动量除以对象坐标场景的维度,然后乘以适当的视口(viewport)维度”。物体坐标场景的维度和视口(viewport)维度有什么区别? (我使用的是 800 x 480 分辨率)

现在,根据那篇文章中给出的信息,“抖动”坐标应该相对容易计算。根据我目前的假设,这是我想出的 (Java)...

float currentX = 50;
float currentY = 75;

// I'm assuming the "jitter" amount is essentially
// the amount of anti-aliasing (e.g 2x, 4x and so on)
int jitterAmount = 2;

// don't know what these two are
int coordSceneDimensionX;
int coordSceneDimensionY;

// I assume screen size
int viewportX = 800;
int viewportY = 480;

float newX = (jitterAmount/coordSceneDimensionX)/viewportX;
float newY = (jitterAmount/coordSceneDimensionY)/viewportY;

// and then I don't know what to do with these new coordinates

这是我对 FSAA 的了解

使用纹理抗锯齿

在我为 FSAA 引用的同一文档中,还有一个页面简要讨论了使用纹理实现抗锯齿。但是,我不知道以这种方式实现 AA 的最佳方式是什么,以及它是否比 FSAA 更有效。

希望有人比我更了解抗锯齿,并且可以帮助我实现这一目标。非常感谢!

最佳答案

文章中介绍的方法早于 GPU 能够自行执行抗锯齿的时间。这种对累积缓冲区的抖动渲染并不是实时图形的最先进技术(尽管它是一种广泛实现的离线渲染抗锯齿形式)。

这些天你所做的是请求一个抗锯齿帧缓冲区。就是这样。这里的关键词是多重采样。看到这个答案: How do you activate multisampling in OpenGL ES on the iPhone? – 尽管是为 iOS 编写的,但为 Android 编写也是遵循类似的路径。 AFAIK 在 Android 上使用此扩展名 http://www.khronos.org/registry/gles/extensions/ANGLE/ANGLE_framebuffer_multisample.txt

关于android - 在 Android、OpenGL 上实现抗锯齿 (FSAA?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8069107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com