Как мне увеличить расстояние рендеринга raycast?

#go #raycasting

#Вперед #raycasting

Вопрос:

Чтобы изучить Golang и повеселиться с ним, я попытался преобразовать существующий проект raycaster из C # в Go:https://github.com/harbdog/raycaster-go

Этот оригинальный проект в основном основан на руководстве по raycasting от lodev.

Я впервые создаю движок raycaster, и мне удалось привести его в хорошее рабочее состояние, за исключением одной основной проблемы: расстояние рендеринга слишком мало, и я хотел бы рендерить дальше, но я не вижу очевидного параметра, который позволил бы это. Любые предложения будут оценены!

Вот видео на YouTube, демонстрирующее это и проблему расстояния рендеринга, если вы посмотрите, когда большая стена на расстоянии решает втянуться:https://www.youtube.com/watch?v=HqNorhH37xY

Комментарии:

1. похоже, что это может быть скорее проблемой управления объектами… Однако я не смотрел ваш код — управляете ли вы своими объектами (стенами и т.д.) Таким образом, чтобы они отображались или нет на основе некоторой (ошибочной) геометрии, которая появляется внутри моего POV? если да, исчезнет ли ваша проблема, если вы пропустите эту предполагаемую логику управления объектами и просто отобразите все объекты… это будет медленнее, но может избежать рассматриваемой проблемы… если да, то теперь вы знаете, где устранить проблему

2. Мне нужно подумать, как это может быть применимо к коду, поскольку мне пришлось написать свой собственный метод рисования , который не был необходим в примере C #, на котором я его основывал. Тем не менее, я заметил, что расстояние рендеринга было меньше, если я уменьшил высоту окна рендеринга, и больше, если высота окна была выше (переменная «h», на которую ссылается руководство lodev)

3. Кажется, я на правильном пути, я обнаружил, что если масштаб текстурного прямоугольника , подлежащего рендерингу, был < 0,25, он вообще не будет отображаться, что объясняет, почему он будет отображаться по мере приближения. Я мог бы заставить его рендерить (хотя и неправильно), установив scaleY = 0.25, если бы оно было меньше. Теперь мне просто нужно выяснить, как я могу заставить движок Ebiten позволить мне масштабировать что-то меньшее, чем 0,25.

4. Похоже, что это проблема с рендерингом Ebiten, поэтому я обнаружил ошибку в этом github.com/hajimehoshi/ebiten/issues/839

Ответ №1:

Оказалось, что это ошибка в движке 2D рендеринга Ebiten, которая недавно была исправлена! Обновление до последней версии Ebiten решило проблему.

 go get -u github.com/hajimehoshi/ebiten/...
  

Суть этого заключалась в том, что более старая версия Ebiten не отображала изображения шириной 1 пиксель с масштабированием Y менее 0,25, что, по словам разработчика Ebiten, было проблемой:

Итак, причиной был выбор mipmap с помощью линейного фильтра: если определитель матрицы геометрии мал, используется mipmap, но в вашем случае уровень mipmap настолько высок, что ширина изображения становится равной 0. Этого не происходит с ближайшим фильтром, поскольку mipmap в этом случае не используется.