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