所以我对OpenGL和纹理相当陌生。我有一个平面,如原始(2 个三角形),我试图将图像映射到。我已经做到了这两种方式。第一种方法是我编写了一个使用 sampler2d 统一的 Fragment 着色器,并调用 texture2d 将图像的像素映射到图元,这工作正常,看起来像这样:
正确
我采取的第二种方法我使用了 glEnable 并且没有使用任何着色器,图像看起来像这样:
错
了很多代码是一个工作项目,所以我不能发布很多,但我基本上是这样渲染的:
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 ,则不会显示任何图像,因为它会将所有东西都染成绿色。从着色器的角度来看,这完全有道理,但我不明白这种方法。我如何使用没有着色器的旧方法让它工作,就像我对着色器所做的那样?