У меня есть 128 x 128 px 24 бит файла BMP для текстуры. Это зеленый квадрат с одной вертикальной линией. Он загружает OK с помощью stbi_image. В инициализации включеныТекстурирование OpenGL не работает, как должно быть
glEnable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
и параметры текстуры являются
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
У меня есть объект, который сделан с кубиками и цилиндров (и некоторых многоугольников с вершинами). Я связываю текстуру к одному, как это перенасыщения:
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, tex1_id);
glColor3f(0.0f, 1.0f, 0.0f);
glTranslatef(-0.5f, 0.2f, 0.05f);
glScalef(2.4f, 0.4f, 1.0f);
glutSolidCube(0.6f);
glBindTexture(GL_TEXTURE_2D, 0);
glPopMatrix();
или к вершинам площади:
glPushMatrix();
glTranslatef(-0.03f, 1.26f, -0.35f);
glRotatef(94, 1.0f, 0, 0);
glBindTexture(GL_TEXTURE_2D, tex1);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-0.3f, 0.4f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-0.3f, 0.85f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0.3f, 0.85f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0.3f, 0.4f, 0.0f);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glPopMatrix();
Я знаю, что glutSolidCube не generete координаты текстуры, но по-видимому, с верхним glEnables он работает только хорошо. Таким образом, текстура появляется на объекте. В этот момент все выглядит хорошо.
Проблема начинается, когда я меняю вид с помощью lookAt или я переводю и поворачиваю объект по какой-либо траектории. Затем это выглядит так, как текстура не перемещается и не вращается с объектами, а остается неподвижной.
Первый: начальный вид; Второй: слегка повернутый вид (lookAt); Третий: слегка переведенный объект
То же самое происходит, если я нарисую этот объект с вершинами. Я использую OpenGL 2.1 в C++ с избытком.
Вы, кажется, сами идентифицировали проблему. Без текстурных координат, как он может отображать вершины в точку в текстуре? – Dave
@Dave Я надеялся, что есть волшебный способ, который сделает это возможным. Твердый куб прост в применении, поэтому меня больше волнует реализация твердого цилиндра. Будет ли это работать, если я возьму реализацию glutSolidCylinder и поместит в нее некоторые текстурные координаты? –