在球体上的OpenGL纹理

时间:2013-10-13 12:04:39

标签: android opengl-es

使用此功能,我可以在OpenGL ES 1.0 for Android中创建一个球体:

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);
}

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

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

如何正确使用纹理?

2 个答案:

答案 0 :(得分:2)

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

UV Mapping a Sphere

答案 1 :(得分:2)

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

https://docs.google.com/file/d/0By5c3cOVKbFpVTFpUlFlV2pGVWM/edit?pli=1