JOGL - 向对象添加纹理 - 仅黑色对象

时间:2014-05-08 15:35:01

标签: java opengl jogl

如何在Java Open GL中为对象添加纹理(特别是对于AndAR)...我的代码出了什么问题?我读了几个例子,但总是一样的,只有一个“黑色矩形”或纹理被绑定在背景上......我如何将它绑定到我的矩形?

这是我的代码:

  int[] textureIDs = new int[1];
    gl.glEnable(GL10.GL_TEXTURE_2D);

    gl.glGenTextures(1, textureIDs, 0);
    //load the textures into the graphics memory


    Bitmap bm = BitmapFactory.decodeResource(CustomActivity.context.getResources(), R.drawable.icon);

    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureIDs[0]);
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm,0);
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);




    GLUT.glutSolidBox(gl,200.0f,100.0f,10.0f);

1 个答案:

答案 0 :(得分:1)

对于texturinh有一个有用的效果,你需要纹理坐标,告诉GL纹理的哪一部分要映射到基元的哪些部分。由于您使用的是固定功能管道,因此有两种选择:

  1. 为每个顶点提供纹理坐标的几何图元,或
  2. 使用自动纹理坐标生成。
  3. GLUT对象永远不会提供任何纹理坐标。这意味着OpenGL将使用当前为每个顶点设置的纹理坐标。这将导致一次又一次地对单一特定纹理位置进行采样 - 它不必是黑色的,但是您的对象将被均匀着色。

    你可能想要选择2,然后自动纹理坐标生成,它由`glTexGen()系列函数控制。但是,可用的纹理坐标生成模式都不适合纹理化多维数据集。

    所以唯一真正的解决方案是手动指定立方体顶点,并指定有用的纹理坐标。您从未指定所需的映射。纹理是一个矩形图像,你可以将它映射到每个面,我们你可能希望将图像的不同子矩形映射到每一面 - 你必须告诉GL如何映射它,它不能猜测只是因为你绘制了6个面并启用了纹理。

      

    或纹理绑定在背景上。

    如果要绘制无纹理,则需要再次禁用纹理。