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

标签 java opengl jogl

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

这是我的代码:

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

最佳答案

为了使texturinh产生有用的效果,您将需要纹理坐标来告诉GL纹理的哪一部分要映射到图元的哪一部分。由于您使用的是固定功能管道,因此有两种选择:

  1. 为几何图元提供每个顶点的纹理坐标,或者
  2. 使用自动纹理坐标生成。

GLUT 对象从不提供任何纹理坐标。这意味着 OpenGL 将为每个顶点使用当前设置的纹理坐标。这将导致仅对单一特定纹理位置进行一次又一次采样 - 它不必是黑色,但您的对象将是均匀着色的。

您可能会倾向于选择选项 2,即自动纹理坐标生成,该生成由 `glTexGen() 控制。函数族。然而,可用的纹理坐标生成模式都不适合对立方体进行纹理处理。

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

or the texture is bound on the background.

当您想要绘制无纹理时,您需要再次禁用纹理。

关于java - JOGL - 向对象添加纹理 - 仅黑色对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23546265/

相关文章:

java - OpenGL:模型显示不正确。 (需要固定绘制距离吗?)

Java OpenGL - 计算等距 View 的正交平截头体

java - WildFly 与 Sybase 的 jdbc 连接

java - 如何在热敏打印机上打印大图像

数字和破折号的 Java 正则表达式

python - pyopengl - 动态更新顶点缓冲区对象中的值

java - 四元数的模型 View 矩阵

java - android 已建立的连接被主机中的软件中止

c++ - OpenGL GL_POLYGON 凹多边形不着色

java - JPanel 中的 GLCanvas 不起作用