Как динамически проецировать линии на трехмерный ландшафт?

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

У меня были следующие идеи:

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

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

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

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


person Neil Williams    schedule 16.01.2009    source источник
comment
У меня нет ответа, но это заставляет меня думать о линейной алгебре. Возможно, вы можете сделать какое-нибудь матричное преобразование? Извините, это не поможет.   -  person jcollum    schedule 16.01.2009
comment
Так же и статически, но чаще и после запуска программы. :-)   -  person paxdiablo    schedule 16.01.2009


Ответы (2)


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

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

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

person comingstorm    schedule 16.01.2009
comment
Неровности довольно плохи, до такой степени, что я не уверен, что какая-либо фильтрация поможет. - person Neil Williams; 16.01.2009
comment
Вы можете быть удивлены. В любом случае, вы можете попробовать еще одну (своего рода эквивалентную) вещь - размытие краев линий по мере их рисования - пусть они переходят от прозрачных по краям к непрозрачным по направлению к центру. - person comingstorm; 16.01.2009

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

person Shalmanese    schedule 16.01.2009