Как динамически проецировать линии на трехмерную местность? - PullRequest
2 голосов
/ 16 января 2009

Я работаю над игрой в XNA для Xbox 360. В игре 3D-рельеф с набором статических объектов, которые связаны графом ссылок. Я хочу нарисовать ссылки, соединяющие объекты в виде линий, проецируемых на местность. Я также хочу иметь возможность изменять цвета и т. Д. Ссылок по мере того, как игроки перемещают свой выбор, хотя мне не нужны ссылки для перемещения. Однако я сталкиваюсь с проблемами, заставляющими эту работу работать правильно и эффективно.

Вот некоторые идеи, которые у меня были:

1) Рендеринг квадов к отдельной цели рендеринга и использование текстуры в качестве наложения поверх ландшафта. В настоящее время у меня это работает, генерируя текстуру только для области, видимой в данный момент для камеры, чтобы минимизировать алиасинг. Тем не менее, у меня все еще возникают проблемы с алиасами - линии выглядят неровно, а игра часто пускает при перемещении камеры РЕДАКТИРОВАТЬ: она пускает все время, у меня просто нет счетчика частоты кадров Xbox, поэтому я замечаю это только когда все движется.

2) Запекать линии в текстуру заранее. Это может повысить производительность, но усугубит проблему наложения. Кроме того, он не позволяет мне динамически изменять свойства линий без особых усилий.

3) Создайте геометрию, которая соответствует форме местности, путем тесселяции линий квадратов по местности. Похоже, этот вариант может помочь, но я не уверен, стоит ли мне тратить время на его опробование, если есть более простой способ.

Есть ли какой-то волшебный способ сделать это, о котором я не подумал? Является ли один из этих путей лучшим, если все сделано правильно?

Ответы [ 2 ]

1 голос
/ 16 января 2009

Ваш 1) довольно хорошее решение. Вы можете уменьшить зазубрины путем фильтрации - во-первых, обязательно используйте билинейную выборку при использовании наложения. Затем попробуйте размыть наложение после его рисования, но перед его использованием; если вы выберете правильный фильтр, он удалит псевдонимы.

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

Я не знаю, почему игра зависает только при перемещении камеры. Помните, у вас должна быть отдельная камера для наложения - ортогональная и указывающая вниз на местность.

0 голосов
/ 16 января 2009

Есть ли в XNA библиотека теней? Если это так, вы можете просто притвориться, что линии - это тени.

...