Как избежать изменения текстуры при изменении размера в OpenGl

компьютеры Геометрия OpenGL Текстурирование

Заливка полигона маленькой текстурой так чтобы она повторялась

Примечание:
да в терминологии я еще не силен, моя вина. Значит тайлинг. Собственно проблема возникает при изменении параметров viewport
Gl.glClearColor(255, 255, 255, 1);
// установка порта вывода в соотвествии с размерами элемента ant
Gl.glViewport(0, 0, ant.Width, ant.Width);
// настройка проекции
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
// теперь необходимо корректно настроить 2D ортогональную проекцию
// в зависимости от того, какая сторона больше
// мы немного варьируем то, как будет сконфигурированный настройки проекции
if ((float)ant.Width <= (float)ant.Height)
Glu.gluOrtho2D(0.0, 30.0 * (float)ant.Height / (float)ant.Width, 0.0, 30.0);
else
Glu.gluOrtho2D(0.0, 30.0 * (float)ant.Width / (float)ant.Height, 0.0, 30.0);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
// настройка параметров OpenGL для визуализации
Gl.glEnable(Gl.GL_DEPTH_TEST);
текстура начинает сжиматься и растягиваться вместе с изменением. Не знаю как это побороть

Примечание:
//Gl.glEnable(Gl.GL_TEXTURE_GEN_S);
//Gl.glEnable(Gl.GL_TEXTURE_GEN_T);
Gl.glGenTextures(1, glTextureArray);
Gl.glBindTexture(Gl.GL_TEXTURE_2D, (int)glTextureArray[0]);
Gl.glPixelStorei(Gl.GL_UNPACK_ALIGNMENT, 1);
Gl.glTexEnvf(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_REPLACE);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_REPEAT);
Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_REPEAT);
Glu.gluBuild2DMipmaps(Gl.GL_TEXTURE_2D, 3, b.Width, b.Height, Gl.GL_RGBA, Gl.GL_UNSIGNED_BYTE, ptr);
Gl.glEnable(Gl.GL_TEXTURE_2D);
Gl.glBegin(Gl.GL_POLYGON);

Gl.glTexCoord2f(10, 11 );
Gl.glVertex2d(10, 10);

Gl.glTexCoord2f(15, 21 );
Gl.glVertex2d(15, 20);

Gl.glTexCoord2f(20, 11);
Gl.glVertex2d(20, 10);

Gl.glTexCoord2f(20, 6 );
Gl.glVertex2d(20, 5);

Gl.glEnd();
Gl.glDisable(Gl.GL_TEXTURE_2D);
Ответы:
даже не знаю как разговаривать. Сначала с терминами разберитесь.
"Заливка полигона маленькой текстурой так чтобы она повторялась " - называется тайлинг.
"при изменении размера " - либо масштабирование, либо зумирование, черт не поймет, что вы тут имели ввиду.
Вы задаёте фиксированные координаты текстур командой glTexCoord.
Поэтому, выражаясь вашим языком, количество "маленьких повторяющихся текстурок" всегда будет одинаковым, независимо от размеров окна.


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.