Если вы ищете простой и быстрый способ создать 3D-игру или головоломку, вам, возможно, захочется узнать о raycasting. Хантеру Лофтису удалось создать движок типа шутера от первого лица, используя всего 256 строк JavaScript.
Создание 3D-мира может быть трудным упражнением, но не в том случае, если вы выберете raycasting и сохраните свои требования к реальности простыми. Передача лучей похожа на трассировку лучей. Вы берете направление с точки зрения и следуете по пути, по которому прошел бы луч света, но в обратном направлении, и смотрите, на какие поверхности вы попадаете.
При трассировке лучей вы обычно следуете вторичным лучам от поверхностей, которые вы находите на пути, чтобы увеличить реалистичность. В raycasting вы в основном исследуете 3D-модель, чтобы увидеть, какая поверхность ближе всего к точке обзора в каждом направлении.
Просто и удивительно эффективно. Raycasting является основой хорошо известных шутеров от первого лица, таких как Duke Nukem 3D.
Как говорит Хантер Лофтис:
«Raycasting кажется мошенничеством, и, как ленивый программист, мне это нравится. Вы получаете погружение в 3D-среду без многих сложностей «реального 3D», которые замедляют вас. Например, raycasts работают в постоянном времени, поэтому вы можете загрузить массивный мир, и он будет работать без оптимизации так же быстро, как крошечный мир. Уровни определяются как простые сетки, а не как деревья многоугольных сеток, поэтому вы можете погрузиться в них без фона 3D-моделирования или докторской степени по математике.»
Если вы просто хотите показать лабиринт, туннель или любую среду со сложным набором вертикальных стен, это становится еще проще. В этом случае вам нужно только сканировать в горизонтальном направлении и обнаружить ближайшую стену. Затем вы можете нарисовать вертикальную полосу, представляющую цвет и высоту стены. Вы можете увидеть, как это работает на диаграмме из описания Хантера:
Из этого вы должны получить общее представление о том, как это работает, и мелкие детали полностью описаны на веб-сайте. Конечно, чтобы он выглядел действительно хорошо, вам нужны некоторые дополнительные эффекты, такие как текстура стен, мрачный дождь и освещение, чтобы он выглядел опасным, например.
Это такой простой 3D-эффект, что вы можете использовать его для создания экспериментов и пробных игр. Это, безусловно, подход, о котором стоит знать.
Вы можете попробовать демо-версию на веб-сайте автора PlayfulJS, а код доступен на GitHub.