【问题标题】:How to texture an image onto a sphere without distortion如何在不失真的情况下将图像纹理化到球体上
【发布时间】:2010-09-28 09:09:25
【问题描述】:

我已经绘制了一个球体,我可以使用 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();
        }
    }
 }

【问题讨论】:

  • 你能把你的顶点纹理坐标定义和顶点位置一起添加吗?我认为问题可能出在那儿。
  • 能否分享一下 SphereTexture 类,我也想设计一样的。请帮忙!!

标签: java android opengl-es


【解决方案1】:

您可以通过对线两侧的颜色与另一侧的颜色逐像素进行异或来做到这一点。

Nageswara Rao V

【讨论】:

  • 对不起,我对此非常陌生。能否请您详细说明一下。
  • 不确定你的意思。问题是关于纹理的扭曲,它看起来与纹理坐标有关,而不是一些颜色问题。
猜你喜欢
  • 1970-01-01
  • 2010-09-17
  • 2020-11-05
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 2018-11-07
  • 2013-10-21
  • 2012-04-29
相关资源
最近更新 更多