3

使用这个函数,我可以在 Android 的 OpenGL ES 1.0 中创建一个球体:

public Ball(GL10 gl, float radius) 
{
    ByteBuffer bb = ByteBuffer.allocateDirect(40000);
    bb.order(ByteOrder.nativeOrder());

    sphereVertex = bb.asFloatBuffer();
    points = build();
}

private int build() 
{
    double dTheta = STEP * Math.PI / 180;
    double dPhi = dTheta;

    int points = 0;

    for(double phi = -(Math.PI/2); phi <= Math.PI/2; phi+=dPhi)
    {
        for(double theta = 0.0; theta <= (Math.PI * 2); theta+=dTheta)
        {
            sphereVertex.put((float) (raduis * Math.sin(phi) * Math.cos(theta)));
            sphereVertex.put((float) (raduis * Math.sin(phi) * Math.sin(theta)));
            sphereVertex.put((float) (raduis * Math.cos(phi)));

            points++;
        }
    }

    sphereVertex.position(0);
    return points;
}

public void draw() 
{
    texture.bind();

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, sphereVertex);

    gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, points);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}

我现在的问题是我想为球体使用这个纹理,但是只创建了一个黑球(当然因为右上角是黑色的)。我使用这个纹理坐标是因为我想使用整个纹理:

0|0    0|1    1|1    1|0

我该怎么做才能正确使用纹理?

4

2 回答 2

2

您需要为球体上与您提供的纹理匹配的每个点设置 UV(纹理线)。这是有关 UV 映射的一些信息的链接。

UV 映射球体

于 2013-10-18T01:51:44.137 回答
2

只需下载并使用代码,您就可以将图像更改为您想要的图像

https://docs.google.com/file/d/0By5c3cOVKbFpVTFpUlFlV2pGVWM/edit?pli=1
于 2014-10-13T10:50:31.707 回答