OpenGL каркас


18

Ні, я не шукаю glPolygonMode. Я шукаю метод, можливо, шейдер GLSL, який би створював такий ретро-каркас, що шукає об'єкти. Будь-які пропозиції?

Щось на зразок Vector Tanks було.

http://toucharcade.com/wp-content/uploads/2009/01/picture-111-300x204.png

Переважно рішення також має працювати і на OpenGL ES 2.0.

Будь-які підказки та покажчики (доки не NULL) оцінені!

Відповіді:


10

Кілька цікавих посилань:

Baerentzen та ін. "Відображення однопрохідного дротяного кадру" http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=4884

Біла книга корпорації Nividia "Суцільний каркас" http://developer.download.nvidia.com/SDK/10/direct3d/samples.html

редагувати: я бачу, що перший уже згадувався, вибачте!


5

Я б дуже рекомендував використовувати текстури, як сказав Дейв. Можливо, це щось болить, але це забезпечить набагато кращі показники, я думаю.

Ви можете спробувати виявити край алгоритми . Якщо ви створюєте свої сітки за допомогою вершинного забарвлення суцільними кольорами та середніми значеннями альфа (для невеликої прозорості), а потім використовуєте шейдер для виявлення країв, це може виглядати досить добре. Це було б не зовсім так, але вам це може сподобатися ще більше; а може й ні.

В іншому випадку ви можете дивитись на рішення з двома проходами, малюючи напівпрозорі багатокутники (знову ж, встановити кольори вершин суцільним кольором із середнім значенням альфа), потім встановити glPolygonMode (GL_LINE) і налаштувати glLineWidth за бажанням (можливо, на основі об'єкта відстань) і знову намалюйте багатокутники.

Трохи пізно, і мені важко читати це, але дискусія на форумі вказує на цей PDF: Однопрохідний каркасний рендерінг . Вибачте, якщо це не актуально.


+1: було б простіше, хоч якби я знайшов спосіб якось генерувати текстури. Неможливо використовувати glPolygonMode через пізнішого націлювання на OpenGL ES (iStuff).
Kornel Kisielewicz

2

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


Я знаю, я знаю, але я також міг би вставити зображення Subversion, і він зовсім не використовує текстури (AFAIK)
Kornel Kisielewicz

2

Єдиний спосіб, коли я це бачив, - це текстури з високою роздільною здатністю, в основному, чорні текстури, такі, як у Tron 2.0. Їх текстури майже універсально - або плоский чорний з товстою кольоровою облямівкою, або проста текстура шуму Перліна.

Вони застосували просту післяобробку для досягнення ефекту світіння.


+1: Я знав статтю, але дякую, що нагадав - вона справді хороша стаття (і допомагає у другій проблемі, яку я мав - світіння).
Kornel Kisielewicz

1

Ви можете спробувати якусь просту функцію відстані в піксельній шейдері. Можливо, щось на зразок барицентричних координат (зберігайте різні версії RGB у вершинах, і розпорошувач зробить для вас більшу частину роботи).

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

Я підозрюю, що на практиці це було б легше текстурувати.


1

Як щодо цього: візьміть свою модель і скосіть краї, які ви хочете виглядати як обриси. Розфарбуйте обличчя, які були створені яскравим непрозорим зеленим, тоді як усі старі обличчя - темним напівпрозорим зеленим.

Для цього взагалі не потрібно використовувати піксельні шейдери. (Фактично відсутні жодні текстури; лише кольори обличчя.) Для вашої сторони потрібна попередня обробка моделі, що може бути проблемою.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.