如何在没有失真的情况下将图像纹理化到球体上

时间:2010-09-28 09:09:26

标签: java android opengl-es

我绘制了一个球体,我可以使用java和opengl库为Android应用程序旋转它。这部分很完美。现在我试图将球形图像纹理化到球体上。图像覆盖整个球体,但随后大陆被压缩并显示为单行。我需要做些什么才能使图像在我的球体上正确纹理化?

为了实现纹理,我使用以下代码

gl.glEnable(GL10.GL_TEXTURE_2D);
texturesBuffer = IntBuffer.allocate(1);

gl.glGenTextures(1, texturesBuffer);

Bitmap texture = SphereTexture.getTexture(mContext,R.drawable.earth);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texturesBuffer.get(0));
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, texture, 0);

texture.recycle();

public static Bitmap getTexture(Context context, int resourceId) {

    Bitmap bitmap = null;
    try {
        bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId);
        return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),  bitmap.getHeight(), yFlipMatrix, false);
    }
    finally {
        if (bitmap != null) {
            bitmap.recycle();
        }
    }
 }

1 个答案:

答案 0 :(得分:-1)

你可以通过XOR将线条两侧的颜色与其他部分的颜色逐个像素地进行异或拍摄。

Nageswara Rao V