gpt4 book ai didi

android - 如何在 OpenGL ES 2.0 Android 中绘制基本圆

转载 作者:可可西里 更新时间:2023-11-01 19:09:03 29 4
gpt4 key购买 nike

我是新来的 OpenGL ES 2,我已经阅读了很多关于如何在 Android 上的 OpenGL ES 2 中绘制圆圈的主题。基于Drawing Shapesthis code found on gamedev.net ,我会画三角形和正方形,但我还是不会画圆。我现在有三种画圆的方法:

  1. 在圆中生成顶点并使用 glDrawArray( GL_LINES, ... )。根据您生成的顶点数量,这将产生漂亮而清晰的结果。
  2. 使用预先生成的圆形纹理(具有 alpha 透明度)并将其映射到四边形上。这将产生非常平滑的图形并允许“粗”圆,但它不会那么灵活:即使使用 mipmapping,您也会希望纹理与渲染四边形的大小大致相同。
  3. 使用 fragment 着色器。

但是我该如何实现它们呢?

最佳答案

我绝对不推荐通过几何渲染一个圆。它有两个主要缺点:

  1. 它很慢。如果您想获得可接受的精度,则需要大量顶点,并且需要在着色器中处理这些顶点中的任何一个。对于真正的圆,您需要的顶点数与圆的像素数一样多。
  2. 它不是很灵活。拥有不同的圈子、设计和整理它们是很难掌握的。

还有另一种方法,我个人在每个图形 API 中都使用它。渲染至少一个三角形或一个正方形/四边形,并使用 fragment 着色器仅使不需要的(基于方程式)像素可见。这很容易理解。它灵活且快速。它需要混合,但这并不难开始工作。

步骤:

用数据初始化你的缓冲区。如果您使用的是正方形几何体,则需要一个用于顶点的顶点缓冲区,一个用于索引的索引缓冲区,以及一个用于纹理坐标的 textureCoord 缓冲区。对于正方形,我建议使用 -1.0 作为最低纹理坐标,1.0 作为最高纹理坐标,因为这样您就可以使用单位圆方程。

在你的 fragment 着色器中,使用这样的东西:

if ((textureCoord.x * textureCoord.x) + (textureCoord.y * textureCoord.y) <= 1.0)
{
// Render colored and desired transparency
}
else
{
// Render with 0.0 in alpha channel
}

虽然 (textureCoord.x * textureCoord.x) + (textureCoord.y * textureCoord.y) <= 1.0 是不等式,因为你需要一个圆,你必须渲染该范围内的每个像素,而不仅仅是边界.您可以更改它,以便它为您提供所需的输出。

就是这样。实现起来不是很复杂,所以我在这里不提供任何基本的渲染代码。您需要的一切都发生在 fragment 着色器中。

关于android - 如何在 OpenGL ES 2.0 Android 中绘制基本圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18140117/

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