Я пытаюсь нарисовать прямоугольник в OpenGL с текстурой. прежде чем писать текстуру в прямоугольник, я рисую один примитив OpenGL с соответствующим цветом. Затем я записываю текстуру в прямоугольник, используя приведенный ниже код, где переменный буфер содержит данные RGB для 800x600 пикселей. Но выполнение выполнения фрагмента кода приводит к тому, что цвет внутри прямоугольника остается заполненным цветом из примитива. Что я делаю не так?
Обновление кода с 07.11.19
фрагмент кода:
//glDisable(GL_COLOR_MATERIAL);
glScalef(1,1,1);
glPixelstorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures (1, @texID);
glBindTexture (GL_TEXTURE_2D,texID);
if schglobal=1 then
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_BGR, GL_UNSIGNED_BYTE, buffer)
else
begin
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_BGR, GL_UNSIGNED_BYTE, buffer)
end;
glcolor3i(255,255,255);
//glcolor3i(0,0,0);
//glcolor3i(0,0,0);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
//glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glBindTexture (GL_TEXTURE_2D,texID);
glEnable(GL_TEXTURE_2D);
glBegin (GL_QUADS);
glTexCoord2f (0, 0);
glVertex3f (vertexes[4,1], vertexes[4,2], vertexes[4,3]);
glTexCoord2f (1, 0);
glVertex3f (vertexes[2,1], vertexes[2,2], vertexes[2,3]);
glTexCoord2f (1, 1);
glVertex3f (vertexes[1,1], vertexes[1,2], vertexes[1,3]);
glTexCoord2f (0, 1);
glVertex3f (vertexes[3,1], vertexes[3,2], vertexes[3,3]);
glEnd;
ans:=glGetError;
//glFlush();
//glBindTexture (GL_TEXTURE_2D,0);
glDisable(GL_TEXTURE_2D);
Обновление кода с08.11.19 (работает, но не работает, если glTexSubImage2D использовал ошибку 1281)
glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glScalef(1,1,1);
glPixelstorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures (1, @texID);
glBindTexture (GL_TEXTURE_2D,texID);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
if use_gltexsubimage=false then
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_BGR, GL_UNSIGNED_BYTE, buffer)
else begin
if use_glteximage=true then begin
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_BGR, GL_UNSIGNED_BYTE, buffer);
use_glteximage:=false;
end
else begin
glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 800, 600, GL_RGB, GL_UNSIGNED_BYTE, buffer);
ans:=glGetError;
end;
end;
glcolor3f(1,1,1);
glBindTexture (GL_TEXTURE_2D,texID);
glEnable(GL_TEXTURE_2D);
glBegin (GL_QUADS);
glTexCoord2f (0, 0);
glVertex3f (vertexes[4,1], vertexes[4,2], vertexes[4,3]);
glTexCoord2f (1, 0);
glVertex3f (vertexes[2,1], vertexes[2,2], vertexes[2,3]);
glTexCoord2f (1, 1);
glVertex3f (vertexes[1,1], vertexes[1,2], vertexes[1,3]);
glTexCoord2f (0, 1);
glVertex3f (vertexes[3,1], vertexes[3,2], vertexes[3,3]);
glEnd;
glBindTexture (GL_TEXTURE_2D,0);
end;