Находить близлежащие треугольники с помощью трехмерного конвейера? - PullRequest
2 голосов
/ 10 декабря 2011

Скажем, у вас есть сетка.Рассмотрим один из треугольников.Скажем, вы хотите знать , какие треугольники являются соседями этого треугольника .

Фактически:

Знает ли OpenGL (или какой-либо другой аспект трехмерного конвейера) этоинформация каким-то образом?

Единственный известный мне способ найти соседние треугольники - это просто просмотреть все вершины сетки.

Мой вопрос:

Нафактический уровень конвейера 3D, знает ли "аппаратное обеспечение", какие треугольники соседствуют ??

Или есть какая-то магия, возможно, подход уровня шейдера, который мгновенно дает эти ответы?

Или, возможно, физический уровень каким-то образом быстро знает, какие трис сетки столкновений соседствуют?

Или, возможно, вы можете получить эту информацию, написав собственный шейдер,шейдерный уровень «знает» эту информацию?

В чем дело, эксперты низкого уровня ??Спасибо

PS Конечно, если эта информация НЕ доступна "с аппаратного обеспечения", лучше всего поддерживать какую-то пространственную базу данных вашей сетки.Достаточно просто, но глупо, если информация уже доступна из некоторого аспекта конвейера / аппаратного обеспечения.Спасибо!


ПОЗЖЕ ПОЗЖЕ для будущих читателей, я сейчас подробно обсудил эту проблему с несколькими людьми, которые работают над аппаратным обеспечением.

ВотОтвет:

Действительно, одним словом, трехмерный конвейер НЕ знает о соседних треугольниках: это так просто.Вершина отображается только в отношении двух других в том же треугольнике, и все, как объясняет Антеру.Надеюсь, это кому-нибудь поможет.

Ответы [ 4 ]

2 голосов
/ 10 декабря 2011

Нет, OpenGL не знает и не заботится о том, что рядом. Он отображает каждый треугольник индивидуально. Единственный случай, когда уместны соседние треугольники, это если вы используете геометрические шейдеры, но в этом случае вы должны предоставить информацию о смежности.

Для рендеринга аппаратное обеспечение заботится только о том, какие вершины являются общими, поэтому при возможности они не затеняют их чаще, чем это необходимо (т. Е. Если они помещаются в кеш вершин).

1 голос
/ 10 декабря 2011

Open GL ES может не знать, какие треугольники находятся «рядом» друг с другом, но отложенный рендерер на основе тайла в графическом процессоре, используемом аппаратным обеспечением устройства iOS, вероятно, знает, по крайней мере, до уровня «той же тайлы». Однако эта информация непрозрачна для кода приложения.

1 голос
/ 10 декабря 2011

Мое понимание Open GL в том, что оно просто рисует то, что вы ему говорите.Он не поддерживает никаких внутренних списков или иерархий.Так что нет, не будет.

0 голосов
/ 10 декабря 2011

Вы можете создать соседнюю структуру данных. Если сетка хранится как:

  • список вершин
  • список треугольников, где каждый треугольник является тройкой индексов вершин.

Чем проще для каждой вершины создать список индексов треугольников, в которых используется эта вершина. При этом для проверки соседних треугольников достаточно протестировать только треугольники из 3 списков.

...