【问题标题】:How to tell where the texture is drawn in OpenGL / libgdx?如何判断纹理在 OpenGL/libgdx 中绘制的位置?
【发布时间】:2014-01-28 20:14:53
【问题描述】:

我们如何知道 OpenGL 中哪个纹理与哪个网格相关?在这个例子中,我们告诉网格我们使用纹理坐标,但我们没有说哪个纹理(如果我们有多个),我们也没有告诉纹理在哪里绘制。它是如何工作的? (我知道 UV 的概念,但我不知道纹理绘制在“哪里”的概念):

mesh = new Mesh(true, 4, 6,
     new VertexAttribute(VertexAttributes.Usage.Position, 3,"attr_Position"),
     new VertexAttribute(Usage.TextureCoordinates, 2, "attr_texCoords"));
texture = new Texture(Gdx.files.internal("data/img.png"));
mesh.setVertices(new float[] { 
      -1024f, -1024f, 0, 0, 1,
       1024f, -1024f, 0, 1, 1,
       1024f,  1024f, 0, 1, 0,
      -1024f,  1024f, 0, 0, 0
});


@Override
public void render() {
    // Texturing --------------------- /
    gl.glActiveTexture(GL10.GL_TEXTURE0);
    gl.glEnable(GL10.GL_TEXTURE_2D);
    texture.bind();

    mesh.render(GL10.GL_TRIANGLES);
}

【问题讨论】:

  • 纹理绘制的位置 == UV 坐标 ... 使用的纹理 == glActiveTexture()
  • @Vallentin 感谢 Vallentin,UV 用于纹理本身,而不是世界上的哪个地方?关于 activeTexture,你能告诉我用 2 个网格和第二个纹理会怎么样吗?
  • 在世界上,你指定使用对象的 x,y,z 坐标,当然......如果你想执行“多纹理”,基本上只是绑定多个纹理,并使用glActiveTexture(GL_TEXTURE0); 然后glActiveTexture(GL_TEXTURE1); 等等......然后Shader中有多种方法可以区分使用哪个纹理以及何时使用!
  • @Vallentin 所以如果你想切换网格的纹理,并且你有 2 个纹理变量...如何判断 GL_TEXTURE0 是第一个纹理,GL_TEXTURE1 是第二个纹理?
  • 如果你只想切换模型/网格的纹理,然后简单地绑定另一个纹理...glActiveTextureN(); 用于着色器,我看不到你的着色器,如果你实际上将“活动 id”绑定到着色器。

标签: java opengl textures libgdx render


【解决方案1】:
猜你喜欢
  • 2017-10-09
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多