Geometry 通过极坐标确定球体顶点,并对其进行渲染

Geometry 通过极坐标确定球体顶点,并对其进行渲染,geometry,rendering,opengl-es-2.0,polar-coordinates,Geometry,Rendering,Opengl Es 2.0,Polar Coordinates,我正在Android设备上使用OpenGL ES 2.0 我正在试着让一个球体开始运行和绘图。Currentley,我几乎有一个球体,但很明显这是非常非常错误的 在我的应用程序中,我持有一个Vector3的列表,我将其转换为ByteBuffer,并传递给OpenGL。 我知道我的代码没问题,因为我画了一个立方体和四面体。 我改变的两个部分是: 确定顶点 绘制顶点 下面是有问题的代码片段。我做错了什么? 确定极坐标: private void ConstructPositionVertices()

我正在Android设备上使用OpenGL ES 2.0

我正在试着让一个球体开始运行和绘图。Currentley,我几乎有一个球体,但很明显这是非常非常错误的

在我的应用程序中,我持有一个Vector3的列表,我将其转换为ByteBuffer,并传递给OpenGL。 我知道我的代码没问题,因为我画了一个立方体和四面体。 我改变的两个部分是: 确定顶点 绘制顶点

下面是有问题的代码片段。我做错了什么? 确定极坐标:

private void ConstructPositionVertices()
{
    for (float latitutde = 0.0f; latitutde < (float)(Math.PI * 2.0f); latitutde += 0.1f)
    {
        for (float longitude = 0.0f; longitude < (float)(2.0f * Math.PI); longitude += 0.1f)
        {
            mPositionVertices.add(ConvertFromSphericalToCartesian(1.0f, latitutde, longitude));
        }
    }
}
画圆:

inGL.glDrawArrays(GL10.GL_TRIANGLES, 0, numVertices);
很明显,我遗漏了一些代码,但我肯定我的错误就在这些窃贼的某个地方。 我对这些点做的只是将它们传递给OpenGL,然后调用三角形,三角形应该可以为我连接这些点。。对吧?

编辑: 一张照片可能很好


必须使用φ计算z<代码>浮点z=inLength*(float)Math.cos(inPhi)


此外,生成的点不是三角形,因此最好使用GL_LINE_STRIP

必须使用phi计算z<代码>浮点z=inLength*(float)Math.cos(inPhi)


此外,生成的点不是三角形,因此最好使用GL_LINE_STRIP

在极球上使用三角形STRIP与成对绘制点一样简单,例如:

const float GL_PI = 3.141592f;

GLfloat x, y, z, alpha, beta; // Storage for coordinates and angles        
GLfloat radius = 60.0f;
const int gradation = 20;

for (alpha = 0.0; alpha < GL_PI; alpha += GL_PI/gradation)
{        
    glBegin(GL_TRIANGLE_STRIP);
    for (beta = 0.0; beta < 2.01*GL_PI; beta += GL_PI/gradation)            
    {            
        x = radius*cos(beta)*sin(alpha);
        y = radius*sin(beta)*sin(alpha);
        z = radius*cos(alpha);
        glVertex3f(x, y, z);
        x = radius*cos(beta)*sin(alpha + GL_PI/gradation);
        y = radius*sin(beta)*sin(alpha + GL_PI/gradation);
        z = radius*cos(alpha + GL_PI/gradation);            
        glVertex3f(x, y, z);            
    }        
    glEnd();
}
const float GL_PI=3.141592f;
glx,y,z,alpha,beta;//坐标和角度的存储
GLfloat半径=60.0f;
常数int梯度=20;
对于(alpha=0.0;alpha

输入的第一个点如下公式所示,第二个点按alpha角的单步移动(从下一个平行线开始)。

在极球上使用三角形条与成对绘制点一样简单,例如:

const float GL_PI = 3.141592f;

GLfloat x, y, z, alpha, beta; // Storage for coordinates and angles        
GLfloat radius = 60.0f;
const int gradation = 20;

for (alpha = 0.0; alpha < GL_PI; alpha += GL_PI/gradation)
{        
    glBegin(GL_TRIANGLE_STRIP);
    for (beta = 0.0; beta < 2.01*GL_PI; beta += GL_PI/gradation)            
    {            
        x = radius*cos(beta)*sin(alpha);
        y = radius*sin(beta)*sin(alpha);
        z = radius*cos(alpha);
        glVertex3f(x, y, z);
        x = radius*cos(beta)*sin(alpha + GL_PI/gradation);
        y = radius*sin(beta)*sin(alpha + GL_PI/gradation);
        z = radius*cos(alpha + GL_PI/gradation);            
        glVertex3f(x, y, z);            
    }        
    glEnd();
}
const float GL_PI=3.141592f;
glx,y,z,alpha,beta;//坐标和角度的存储
GLfloat半径=60.0f;
常数int梯度=20;
对于(alpha=0.0;alpha

输入的第一个点如下公式所示,第二个点按alpha角的单步移动(从下一平行线开始)。

Yupp,我的Z错了。使用线条条绘图,它显示为一个球体,谢谢!现在我只需要找出如何将这些顶点索引为三角形:xYupp,我的Z错了。使用线条条绘图,它显示为一个球体,谢谢!现在我只需要弄清楚如何将这些顶点索引为三角形:x