как рисовать трехмерные поверхности и скрывать невидимые линии? - PullRequest
3 голосов
/ 29 мая 2009

кто-нибудь знает, как рисовать трехмерные поверхности и скрывать невидимые линии?

Я помню, как читал некоторый код из книги Apple II, и в Бейсике было всего около 25 строк, и он мог рисовать некоторые трехмерные поверхности, например, гору или фигуру, которая похожа на водную рябь. Сначала были показаны невидимые строки, но после добавления нескольких строк кода невидимые строки также исчезли.

Кто-то знает, как это сделать, или знает о ресурсах в Интернете для этого?

Ответы [ 3 ]

5 голосов
/ 29 мая 2009

Это немного зависит от того, как вы рисуете полигоны. Я бы порекомендовал почитать немного об OpenGL или DirectX, так как они предназначены для решения многих из этих проблем за вас. Если вы не хотите использовать их напрямую, на основе этих API уже есть множество замечательных движков.

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

  • Сортируйте полигоны по расстоянию от камеры и сначала нарисуйте те, что дальше, иначе известный как Алгоритм рисования . Этот метод использовался многими старыми 3D-играми, такими как классическая Doom, которая также использовала BSP Tree для эффективной сортировки.

  • Сохраняйте ближайшее расстояние от камеры до каждого элемента изображения на экране и не рисуйте ничего дальше, иначе называемое Z-Buffering . Этот метод хорошо поддерживается современными 3D-видеокартами, OpenGL и DirectX.

  • Использовать алгоритм трассировки лучей , который естественным образом удаляет скрытые поверхности.

4 голосов
/ 29 мая 2009

Я помню эту книгу. Если я правильно помню, это были поверхностные графики, и хитрость была в том, чтобы строить линии спереди назад, отслеживая минимальную и максимальную y, нанесенные для каждого x. Вероятно, ящиком линии был Брезенхем, модифицированный так, чтобы пропустить нарисованные точки, если они не были больше максимума или меньше мин.

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

Я все еще вижу эти заговоры в моей голове. Хотелось бы узнать, из какой это книги.

2 голосов
/ 29 мая 2009

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

Если вы хотите построить только контур, вы рисуете только ребра, которые идут между треугольником с лицевой нормой и треугольником с лицевой стороной назад.

Или вы используете OpenGL, включаете буфер глубины и забываете обо всей основной математике: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...