Так что я довольно новичок в OpenGL и текстурировании. У меня есть плоская плоскость, похожая на примитив (2 треугольника), на которую я пытаюсь нанести изображение. Я сделал это 2 способами. Первым способом я написал шейдер Fragment, который использует форму sampler2d и вызвал 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 до того, как отрендерить, ни одно изображение не будет отображаться, потому что оно окрашивает все в зеленый цвет. Это имеет смысл с точки зрения шейдеров, но я не понимаю такой подход. Как мне заставить его работать, используя старый метод без шейдеров, как я делал с шейдерами?
Задача ещё не решена.
Других решений пока нет …