Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不失真的情况下将图像纹理到球体上_Java_Android_Opengl Es - Fatal编程技术网

Java 如何在不失真的情况下将图像纹理到球体上

Java 如何在不失真的情况下将图像纹理到球体上,java,android,opengl-es,Java,Android,Opengl Es,我已经画了一个球体,我能够使用android应用程序的java和opengl库旋转它。这部分工作得很好。现在我正在尝试将一个球体图像纹理到球体上。图像覆盖了整个球体,但随后大陆被压缩并显示为一条直线。我必须做什么才能使图像正确地纹理到我的球体上 为了实现纹理,我使用以下代码 gl.glEnable(GL10.GL_TEXTURE_2D); texturesBuffer = IntBuffer.allocate(1); gl.glGenTextures(1, texturesBuffer);

我已经画了一个球体,我能够使用android应用程序的java和opengl库旋转它。这部分工作得很好。现在我正在尝试将一个球体图像纹理到球体上。图像覆盖了整个球体,但随后大陆被压缩并显示为一条直线。我必须做什么才能使图像正确地纹理到我的球体上

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

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

您可以通过将线条两侧的颜色与另一侧的颜色逐像素进行异或来实现这一点


纳格斯瓦拉·拉奥V

对不起,我对这一点非常陌生。请你详细说明一下,我不知道你的意思。问题是关于纹理的变形,它看起来与纹理坐标有关,而不是一些颜色问题。您可以将顶点纹理坐标定义与顶点位置一起添加吗?我想问题可能就在那里。你能分享一下SphereTexture类吗?我想设计同样的。请帮忙!!