2013-10-13 7 views
3

С помощью этой функции можно создать сферу в OpenGL ES 1.0 для Android:OpenGL текстуры на сфере

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

Вам необходимо установить УФ (текстурные шнуры) для каждой точки сферы, которая соответствует текстуре, которую вы предоставляете. Вот ссылка на некоторую информацию об УФ-картографии.

UV Mapping a Sphere

1

Просто скачайте и используйте код, и вы можете изменить изображение с изображением вы хотите

https://docs.google.com/file/d/0By5c3cOVKbFpVTFpUlFlV2pGVWM/edit?pli=1 
Смежные вопросы