OpenGL - Как да скоча в единичен TRIANGLE_STRIP, без да повлияя на текстурирането?

Ако някой постави един и същ връх A в триъгълна лента няколко пъти, след това вземе друг връх B и постави този също няколко пъти в триъгълната лента (количеството зависи от ориентацията на триъгълника, с която искате да продължите), тогава можете ефективно да имате две отделни триъгълни ивици, които да бъдат изобразени само с едно извикване на чертеж (първият съдържа всички триъгълници преди връх A, а вторият се състои от всички триъгълници след връх B).

Въпросът ми:

Страхувам се, че въпреки че цялостното повикване за чертане на триъгълна лента ще начертае геометрично просто свързана мрежа, ще срещна проблеми, когато се опитвам да текстурирам мрежата поради скоковете между тях. Все още не съм стигнал, така че не мога да го тествам. Правилно ли е предположението ми? Дали скачането ми в триъгълната лента във всеки случай е валидна техника в индустрията за "рисуване на мрежи"? Има ли някакъв начин за подходящо текстуриране на резултата или еквивалентна по-добра алтернатива на скачането?


person Fejwin    schedule 08.08.2012    source източник


Отговори (2)


Помислете за „мрежа“, състояща се от триъгълник, разделен на 4 подобни триъгълника:

      2
       /\
      /  \
   1 /____\3
    /\    /\
   /  \  /  \
0 /____\/4___\5

Да предположим, че се навива CCW (glFrontFace), триъгълниците: {0,4,1}, {1,4,3}, {3,2,1} са кодирани като лента: {0,4,1,3,2}. Номерът е добавянето на триъгълника: {4,5,3} чрез добавяне на изродени триъгълници (с нулева площ), като същевременно се поддържа правилното навиване. Накратко:

{0,4,1,3,2,2,3,3,5,4}, добавя триъгълниците с нулева площ: {3,2,2}, {2,2,3}, {3,3,5}.

Това добавя незначително количество допълнителна геометрия за по-голяма мрежа, при условие че ефективната мрежа ивица.

person Brett Hale    schedule 08.08.2012
comment
Да, точно това правя там. Така че в крайна сметка това е валидна техника. Но какво да кажем за текстурирането на тази мрежа? - person Fejwin; 08.08.2012
comment
Предполагам, че вашите текстурни координати (атрибути на върха) съответстват на едни и същи върхове и следователно използват едни и същи индекси. Не съм сигурен какъв би бил проблемът? - person Brett Hale; 08.08.2012
comment
Съжалявам, предполагам, че проблемът е по-скоро недостатъчният ми опит с текстурирането на мрежи като цяло. - person Fejwin; 08.08.2012

Растеризаторите чертаят площта на триъгълник. „Триъгълник“, който има две еднакви точки, няма площ. Следователно няма област от триъгълника за изобразяване.

Изродените триъгълници (техническият термин за триъгълници, където две от точките са еднакви) са често срещана техника за свързване на множество ленти. Това обикновено се прави в индексния масив чрез просто добавяне на още индекси; нищо относно действителната топология на мрежата не трябва да се променя.

person Nicol Bolas    schedule 08.08.2012
comment
Това означава ли, че в опит да текстурирам тази мрежа, ще трябва да предложа фрагменти от текстура за всеки триъгълник с ръчно зададени текстурни координати за всеки връх (пропускайки тези с нулева област)? Донякъде се надявах на решение за автоматично обвиване на текстура... - person Fejwin; 08.08.2012
comment
glTexGen осигурява генериране на текстурни координати в движение. Това обаче е отхвърлена функция. За предварително изчисляване на координатите вижте математиката за всички различни моди тук: opengl.org/wiki/Mathematics_of_glTexGen - person Sam; 09.08.2012