Получение неожиданных результатов фильтрации при масштабировании текстурыC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Получение неожиданных результатов фильтрации при масштабировании текстуры

Сообщение Anonymous »

У меня есть большая текстура (5040x5040), размер которой при рендеринге увеличивается в 24 раза по сравнению с обычным размером.
Я рендерю 2D-прямоугольник 960x960 (два треугольника), при этом часть моей гигантской текстуры (40x40) растягивается на многоугольник 960x960.
Я создаю текстуру следующим образом:
/>

Код: Выделить всё

glGenTextures(1, &id);
glActiveTexture(GL_TEXTURE0 + 0);
glBindTexture(GL_TEXTURE_2D, id);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RG8 /* only green and red channel */, 5040, 5040, 0 /* deprecated 'border' feature */,
GL_RGBA, GL_UNSIGNED_BYTE, pixelsToUpload)
При рендеринге моей текстуры происходит что-то странное: вместо блоков 24x24 для каждого пикселя 1x1 моего исходного изображения я получаю какой-то странный шаблон сглаживания с градиентами в блоках 12x12 (половина размера, который я ожидал).
Я также отключил сглаживание, на тот случай, если это вызывало проблема.
И, как вы можете видеть по каменному мосту и моему маленькому другу-дракону, остальная часть моего рендеринга (многочисленные спрайты, элементы пользовательского интерфейса и т. д.) работает нормально.
Есть какие-нибудь подсказки, что может быть причиной этого шаблона размытия?
Возможно, я столкнулся с проблемой с точностью плавающей точки?
Я действительно хочу используйте фильтрацию GL_LINEAR, но это также выглядит странно и просто скрывает основную проблему, которую GL_NEAREST показывает более четко.
Что визуализируется:
Изображение

То, что я ожидал: (макет в художественной программе)
Изображение

Вот GL_LINEAR: (то, что мне в конечном итоге нужно, но также неправильно — я считаю, что GL_NEAREST лучше показывает проблему)
Изображение


Подробнее здесь: https://stackoverflow.com/questions/797 ... up-texture
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»