Opengl 如何为球体的一部分生成几何图形

Opengl 如何为球体的一部分生成几何图形,opengl,3d,geometry,Opengl,3d,Geometry,生成渲染球体所需的点的算法很少,但我找不到一个好的算法,也找不到一个全球体算法来为球体的一部分生成点 假设我有最小/最大纬度,最小/最大经度和球体半径。如何生成网格以渲染球体的这一部分 我制作了半球&半球网格的一部分。我稍微编辑了songho Ahn的源代码,您可以通过以下链接进行参考: 类球体的主要方法是构建顶点* 您可以通过编辑此方法获得所需的结果 我把半球做成这样: void HemiSphere::buildVerticesSmooth() { ... float sectorStep

生成渲染球体所需的点的算法很少,但我找不到一个好的算法,也找不到一个全球体算法来为球体的一部分生成点


假设我有最小/最大纬度,最小/最大经度和球体半径。如何生成网格以渲染球体的这一部分

我制作了半球&半球网格的一部分。我稍微编辑了songho Ahn的源代码,您可以通过以下链接进行参考:

类球体的主要方法是构建顶点*

您可以通过编辑此方法获得所需的结果

我把半球做成这样:

void HemiSphere::buildVerticesSmooth()
{
...

float sectorStep = 2 *PI / sectorCount;
float stackStep = (PI / 2) / stackCount;
float sectorAngle, stackAngle;

for(int i = 0; i <= stackCount; ++i)
{
    stackAngle = -PI / 2 + i * stackStep;                   // starting from -pi/2 to 0
    xy = radius * cosf(stackAngle);             // r * cos(u)
    z = radius *( 1 + sinf(stackAngle) );              // r * sin(u)
...
我还制作了半半球体,它切割地板,使底部的地板均匀。为此,保持x y坐标不变,只需将z坐标编辑为0即可

void HemiSphere::buildVerticesSmooth()
{

....

float sectorStep = 2 *PI / sectorCount;
float stackStep = (PI / 2) / stackCount;
float sectorAngle, stackAngle;
float d = sqrt(radius*radius - flat_radius*flat_radius)/radius;

for(int i = 0; i <= stackCount; ++i)
{
    stackAngle = -PI / 2 + i * stackStep;                   // starting from -pi/2 to 0
    xy = radius * cosf(stackAngle);             // r * cos(u)
    z = radius *( d + sinf(stackAngle) );              // r * sin(u)
    if (z<0.0) z = 0.0;

....
希望这有帮助