Реалізація декалів


11

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

Чи може хтось підтвердити, якщо я отримав право на реалізацію відмітки?

  • Ви визначаєте куб будь-якого виміру, який визначатиме об'єм проекції у загальному просторі. Ви перевіряєте перетин трикутника із визначеним кубом, щоб отримати трикутники, на які буде впливати проекція.
  • Ви вирізаєте ці трикутники і зберігаєте їх.
  • Потім ви використовуєте матричні трюки для обчислення координат УФ для збережених трикутників, які посилаються на текстуру, яку ви проектуєте.
  • Для цього ви берете вектори, що представляють висоту, ширину та глибину куба у загальному просторі, так що нижній лівий кут є початком.
  • Ви поміщаєте це в матрицю як вектори одиниці i, j, k, встановлюєте переклад куба, тоді ви обертаєте цю матрицю.
  • Ви помножуєте вершини збережених трикутників за допомогою цієї матриці, таким чином ви отримуєте їх координати всередині куба розміром 0 до 1, який ви використовуєте як УФ-координати.
  • Таким чином у вас є оригінальні трикутники, на які ви проектуєте, і у вас є ультрафіолетові координати (УФ-координати посилаються на текстуру, яку ви проектуєте).
  • Потім ви рендеруйте збережені трикутники на сцену, і вони перезаписують область проекції проеційним зображенням.

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


Ось посилання з посиланнями: gamedev.stackexchange.com/questions/24653/…
Луїс Естрада

Відповіді:


5

Погляньте на цю статтю:

http://blog.wolfire.com/2009/06/how-to-project-decals/

Здається, він використовує абсолютно той самий підхід, який ви використовуєте. Він не говорить про боротьбу з z, але, безумовно, це може стати проблемою на великих відстанях.

Моя пропозиція полягала б у тому, щоб вимкнути відмітні знаки після певної відстані, якщо z-бої стануть дуже помітними.


Я бачив цю статтю неодноразово, річ у тому, що вона взагалі не говорить про те, про що я прошу, як ви вже згадували, боротьба з z насправді не проблема дистанції, це лише ви Ви намагаєтеся візуалізувати право на вершині існуючої геометрії і через обмежену точність, чи можете / не можете бути впевнені, що будете на вершині або точно там же
dreta

1
Малюючи відмітні знаки, ви завжди можете встановити функцію порівняння буфера глибини на меншу чи рівну, а не на меншу, ніж стікання, декали завжди малюються лише поверх поверхні, на яку вони впливають.
jmegaffin

1

Що я зробив для вирішення бойових дій Z, - це збільшити значення Z вершини на невелику кількість, у моєму шейдері відмітки, після того, як це буде в екранах координат.

Гаразд ..... Я використовую приталені сітчасті наклейки. Я створюю сітку nxn з Y, сидячи на місцевості. Я використовую код, щоб знайти Y на сітці багатокутника місцевості. Після всіх перетворень я малюю верхню частину існуючої геометрії в екранах координат. Буфер глибини знаходиться в координатах екрана, тому трохи переміщуючи Z багатокутників відмітки в бік екрана, він зупиняє боротьбу Z. Роблячи це, я вдвічі зменшив кількість багатокутників, складаючи свої приталені сітки для відміток. Це старий 120 код

 vec4 v = gl_ModelViewProjectionMatrix * gl_Vertex;
 v.z -= .03;
 gl_Position = v;

Сподіваюся, це пояснює це краще .. (як вимагається)

Весь дротяний каркас.

Тільки провідна місцевість.


1
Ця відповідь здається особливо короткою та не визначеною. Чи можете ви пояснити свою відповідь?
Gnemlock

1
Це не важко зрозуміти .. Я переміщую вершину лише трохи в напрямі Z в просторі екрану. Оскільки у OpenGL ви завжди шукаєте позитивну Z у просторі екрану, переміщення на негатив Z невелика кількість фіксує боротьбу з Z. Однак з цим виникає проблема .. Коли ви зменшуєте масштаб, z може переміщувати відмітку значно більше, ніж потрібно .. Виправлення полягає в масштабуванні величини зсуву на око на відстань вершини.
Майк О
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.