所以我对OpenGL和纹理都很陌生。我有一个像原始(2个三角形)的平面,我正试图将图像映射到。我已经完成了这两种方式。我编写使用sampler2d uniform的Fragment着色器的第一种方法,并调用texture2d将图像的像素映射到基元,这样工作正常,看起来像这样:
Correct
我采用的第二种方法是使用glEnable并且没有使用任何着色器,图像看起来像这样:
Wrong
很多这个代码都是一个工作项目,所以我不能发布很多但是我基本上是这样渲染的:
void draw()
{
glColor4f(0.0, 1.0, 0.0, 1.0)
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEX_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D, id);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
// then draw arrays....
// disable client states
}
我知道绿色来自我的glColor电话,但我想我只是想了解幕后发生了什么?我想如果我在渲染之前调用glColor,那么任何图像都不会出现,因为它的颜色都是绿色的。从着色器的角度来看,这是完全合理的,但我不知道这个方法。我如何使用没有着色器的旧方法使其工作,就像我使用着色器一样?