【发布时间】: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