Здравствуйте, igor_zaicev, Вы писали: _>glBegin(GL_QUADS); _> glVertex3f( -1.0f, -1.0f, 0.0f);glTexCoord2d(0,0); // Слева внизу _> glVertex3f( 1.0f, -1.0f, 0.0f);glTexCoord2d(1,0); // справа внизу _> glVertex3f( 1.0f, 1.0f, 0.0f);glTexCoord2d(1,1); // Справа вверху _> glVertex3f( -1.0f, 1.0f, 0.0f);glTexCoord2d(0,1);// слева вверху _>glEnd();
_>Все замечательно, однако после разбиения прямоугольника на два треугольника:
_>glEnable(GL_TEXTURE_2D); _>glBindTexture(GL_TEXTURE_2D, clock_tex ); _>glBegin(GL_TRIANGLES); _> glVertex3f( -1.0f, -1.0f, 0.0f);glTexCoord2d(0,0); _> glVertex3f( 1.0f, -1.0f, 0.0f);glTexCoord2d(1,0); _> glVertex3f( 1.0f, 1.0f, 0.0f);glTexCoord2d(1,1);
_> glVertex3f( 1.0f, 1.0f, 0.0f); glTexCoord2d(1,1); _> glVertex3f( -1.0f, 1.0f, 0.0f);glTexCoord2d(0,1); _> glVertex3f( -1.0f, -1.0f, 0.0f);glTexCoord2d(0,0); _>glEnd();
_>glDisable(GL_TEXTURE_2D);
_>текстура накладывается криво, в чем ошибка ???
Я так думаю в том, что надо вначале установить текстурные координаты, а потом уже вызывать glVertex. Потому как ты вначале все устанавливаешь, а потом вызовом glVertex всё это дело как бы коммиттишь. Хотя честно говоря в код не вникал вообще, просто предположение, основанное на способе форматирования кода.
Здравствуйте, igor_zaicev, Вы писали:
_>Доброго времени суток! Работаю с OpenGL в VisualStudio 2005, дошел до наложения текстур и наткнулся на интересный баг:
_>где-то при инициализации загружаю текстуру:
1) Ошибка в том, что криво указываете текстурные координаты. Вы их и для четырёхугольника-то указываете неверно (они должны быть до glVertex, поскольку это атрибут вершины). Но с четырёхугольником вам почему-то повезло. Лично мне непонятно почему, единственный вариант — у вас текстура типа "шахматной доски" и вы не заметили, что она идёт "боком".
2) Почему glTexCoord2d? Относительные размеры от 0.0 до 1.0 указываются в glTexCoord2f
3) Кто же это так бьёт на треугольники? Бьют trianglestrip'ом (как я показал) или trianglefan'ом иначе вместо выигрыша по эффективности вы получите потерю её.
4) У вас z-координата всё время нулевая. Поэтому можно обойтись glVertex2f.