Mikle » 24.06.2006 (Сб) 17:01
VT
Тут есть траблы со скоростью, множественное переключение RanderTarget сурфейсов само по себе процесс не дешевый, но! Каждый вертекс, соединенный линией с другим вертексом, лежащим в другом сурфейсе, будет просчитываться дважды, а то и большее кол-во раз, если полигон достаточно большой. То есть во столько раз больше будет выполняться вертексный шейдер. Плюс фрустум куллинг - тоже процесс не бесплатный, а придется его выполнять по кол-ву сурфейсов.
Второй вариант.
Можно написать вертексный шейдер, проецирующий ветрексы по правилам перспективы, но! При ортогональной или перспективной проекциях прямая линия ВСЕГДА отображается в прямую (либо точку). И DX и Ogl основаны на этом, то есть они сначала выполняют вертексный шейдер, проецирующий как-то геометрию на экран, а потом уже рисуют на этих вертексах треугольники, ведь раз прямая остается прямой, треугольник останется треугольником. А в панораме прямая преобразуется в кривую, и мы в результате получим зазоры междуполигонами.
Третий вариант.
Рендерить геометрию как обычно широкоугольной проекцией, но В ТЕКСТУРУ, а потом отображать эту текстуру на BackBuffer с использованием нормал мэпа, вносящего соответствующие искажения (такую текстуру несложно приготовить заранее).
И четвертый вариант, для тех, у кого не пройдет третий из-за того, что не поддерживается бамп - так же рендерим в текстуру, но вместо нормал мэпа используем EnvironmentTextureMapping на регулярную сетку с нормалями, соответствующими нормал мэпу третьего варианта.
ЗЫ. Интересная задачка, пол дня ни о чем другом не думал!