Чому можна зустріти координату текстури більше 1 або менше 0


11

Я вивчаю текст про texture mappingта на preparing to drawсесії, я читаю:

Визначте параметри загортання текстури. Це дозволить контролювати те, що відбувається, коли зустрічається координата текстури більше 1,0 або менше 0,0:

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,wrap);  
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,wrap);  

де обгортання:
GL_REPEAT: вказує, що цей шаблон повториться (тобто, обернути), якщо зустрічаються трансформовані координати текстури менше 0,0 або більше 1,0.

GL_CLAMP: вказує, що шаблон буде "прилипати" до значення в 0,0 або 1,0.

Але немає пояснень, що є причиною зустрічі таких координат текстури?
Наприклад, припустимо, що я щойно намалював прямокутник і хочу застосувати до нього зображення як текстуру, чи можна зустріти такі координати?

Відповіді:


5

Не всі текстури використовують координати текстур, що надходять із даних сітки. Наприклад, за допомогою проективного текстурування ви перетворюєте світ у простір текстури. Ну, багато цього світу виходить за рамки [0, 1] текстури. Без якогось режиму затискання на місці у вас виникнуть проблеми.


10

Саме для повторення текстури.

Отже, якщо у вас є квадратик, а координати текстури йдуть від 0 до 1, текстура буде намальована один раз. Якщо координати йдуть від 0 до 2, а обертання встановлено на GL_REPEAT, текстура буде намальована двічі.

Спробуйте і перегляньте самі


добре @ піжама Panda, тому для такого коду: float x0 = 0; // лівий верхній кут поплавця зображення y0 = 0; float x1 = x0 + Ширина зображення; // нижній правий кут float зображення y1 = y0 + ImageHeight; glBegin (GL_TRIANGLE_STRIP); {glTexCoord2f (0, 1); glVertex2f (x0, y1); glTexCoord2f (0, 0); glVertex2f (x0, y0); glTexCoord2f (1, 1); glVertex2f (x1, y1); glTexCoord2f (1, 0); glVertex2f (x1, y0); } немає можливості зустріти текстурні координати за межами інтервалу (0,1)?
Сепіде Абадпур

1
@sepideh: Звичайно, ні. Ви спеціально зберігали координати текстури у діапазоні [0, 1]. Те, чого ви не розумієте, - це не потрібно ; ти міг зробити з них що завгодно. Крім того, не публікуйте купу коду в коментарях. Якщо ви хочете уточнити, відредагуйте своє запитання.
Нікол Болас

добре, дякую за ваші рекомендації щодо передачі кодів на моє запитання. Я шукав спосіб форматування кодів у командах, але не міг знайти !!! Отже, ви маєте на увазі зустріч з такими координатами - не можлива подія в процесі виконання. Він просто визначений програмістом чітко для того, щоб повторити текстуру чи ні.
Сепіде Абадпур

1
@sepideh Що означає "не можлива подія під час виконання"? Ідеально чудово змінити код у коментарі, щоб мати його, glTexCoord2f(0, 2);наприклад. Це має дуже конкретне чітко визначене значення як у коді, так і під час роботи програми. Якщо ви це бачите, програміст навмисно зробив це, тому що це дає бажаний результат.
Джозеф Менсфілд

2
@sepideh Звичайно. OpenGL використовує всі значення, які ви їм надаєте. Якщо ви дасте йому значення в діапазоні від 0 до 1, ви більше нічого не отримаєте.
Джозеф Менсфілд

5

Так, ви можете зіткнутися з координатами текстур, більшими 1.0та меншими 0.0.

Це повністю залежить від завантаженої вами моделі. Зазвичай для кожної вершини зберігаються координати позиції, нормальності та текстури. У більшості форматів сітчастого файлу координата текстури не обмежена жодним діапазоном.

Це використовується для повторення текстури . Наприклад, щоб охопити часу текстури чотири між четверного вершин, текстурні координати б 0,0, 0,4, 4,0і 4,4. Без текстури упаковки, вам будуть потрібні додаткові вершини , щоб розділити поверхню на 4 рази 4 допоміжних поверхонь з кожної текстурних координат 0,0, 0,1, 1,0, 1,1. Менше вершин призводить до кращої продуктивності візуалізації.

Як правило, небажано, щоб користувач помічав краї повторюваної текстури. Тому повторювані текстури в більшості випадків є плитковими. Тоді як правий край плавно відхиляється до лівого, а верхній - до нижнього. Таким чином, перехід плавний, і, сподіваємось, не помічає користувач.

Більш вдосконаленою, але пов'язаною з цим темою є вміло затемнити той факт, що одна і та ж текстура повторювалася кілька разів. Наприклад, змішування повторних фактур різного розміру, наприклад, фактури стін та нанесення бруду, є звичайною технікою.


Without texture wrapping, you would need additional vertices to split the surface into 4 times 4 sub surfaces with each the texture coordinates 0,0, 0,1, 1,0, 1,1Ось якесь справжнє практичне пояснення! Дякую!
Аміт Томар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.