gpt4 book ai didi

ios - OpenGL ES 2.0 球体

转载 作者:行者123 更新时间:2023-12-01 18:14:17 26 4
gpt4 key购买 nike

使用 GL_TRIANGLES 在 OpenGL ES 2.0 中绘制纹理球体的最简单方法是什么?

我特别想知道如何计算顶点。

最佳答案

有多种方法可以对球体进行三角测量。受欢迎的,不太受欢迎的,好的,不太好的。不幸的是,最广泛使用的方法不是很好。

球坐标

这可能是使用最广泛的方法。您遍历 spherical coordinate system 中的两个角度在两个嵌套循环中,并为每对角度生成点。带角度theta-pi/2 迭代至pi/2和角度 phi0 迭代至2*pi , 和球体半径 r ,每个点计算为:

x = r * cos(theta) * cos(phi)
y = r * cos(theta) * sin(phi)
z = r * sin(theta)

如有必要,计算可以提高效率,但我将跳过这方面的答案。分割的级别(精度)由角度的分割数决定。

这种方法的主要优点是实现简单,易于理解。您可以将分割想象成地球上的经纬线。

但是,它不会产生非常好的三角测量。赤道周围的三角形在所有方向上都有相似的尺寸,但靠近北极/南极的三角形变得越来越窄。在北极/南极,您有大量非常窄的三角形在一个点上相遇。好的三角测量具有所有非常相似大小的三角形,而这个没有。

八面体的递归分割

使用这种方法,您可以从常规 octahedron 开始。 ,给你 8 个三角形。然后递归地将每个三角形分割为 4 个子三角形,如下所示:
     /\
/ \
/____\
/\ /\
/ \ / \
/____\/____\

因此,每个三角形通过计算在两个现有顶点中间的 3 个附加顶点来分割,并且由这 6 个顶点形成 4 个三角形。为了计算两个输入点之间的中点,您需要计算两个向量的和,然后对结果进行归一化以使该点回到球体上。

分割的级别(精度)由递归分割中的级别数确定。它从 0 层的八面体的 8 个原始三角形开始,在 1 层产生 32 个三角形,在 2 层产生 128 个三角形,在 3 层产生 512 个三角形,等等。通常在 3 层附近会得到一个相当漂亮的球体。

这种方法导致更规则的三角测量,因此优于球坐标方法。

主要缺点是它可能看起来更复杂。积分的计算其实很简单。如果您想使用索引顶点而不是重复公共(public)顶点,它会变得更加棘手。如果你想构建漂亮的三角形 strip ,那就更痛苦了。不是很困难,但需要一些工作。

这是我最喜欢的绘制球体的方法。

其他多面体

您可以从其他多面体开始对八面体进行我描述的相同操作。由三角形组成的正多面体特别合适,这使得四面体和二十面体成为自然候选者。八面体是最吸引人的恕我直言,因为初始坐标很容易枚举。使用二十面体可能会导致更规则的三角剖分,并且可以查找顶点坐标。

分割立方体

我不确定是否有人真的在使用它。但我最近尝试了它,它很有趣。 :) 这个想法是你取一个以原点为中心的立方体,并将六个边中的每一个分割为更小的子正方形。然后,您可以通过简单地对描述顶点的每个向量进行归一化来将立方体变成一个球体。

这种方法的优点是非常简单,包括构建三角带。三角测量的质量似乎相当不错。我认为它不像递归分割八面体那样规则,但绝对比(非常)广泛使用的球坐标方法更好。

关于ios - OpenGL ES 2.0 球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24137198/

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