Товарищи, подкиньте какой-нибудь исходник по теме, на основе которого можно свой воксельный пейзаж организовать. Информации что-то мало по этому делу очень, а исходников вобще не нашел.
Товарищи, подкиньте какой-нибудь исходник по теме, на основе которого можно свой воксельный пейзаж организовать. Информации что-то мало по этому делу очень, а исходников вобще не нашел.
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
11 апреля 2009 в 9:04
Исходник давать не буду, но идею постараюсь объяснить.
Пусть есть карта высот (или даже 3D grid) и камера. Из камеры можно "бросать" лучи (raycasting) и искать пересечение каждого луча с картой высот (ведь именно точку пересечения и будем визуализировать).
Камера задает "видимый объем" (view frustum, за перевод сорри, по-русски не находил), то есть видимую область сцены (scene, место действия, короче).
Так как экран монитора у нас — прямоугольник, то и видимый объем будет "вытянутым" прямоугольником (усеченная пирамида, на самом деле: задней/дальней плоскостью (back/far plane) называется основание, а передней/ближней (front/near plane) — параллельное основанию сечение). На передней плоскости мы рисуем — ее как раз и "совмещаем" с прямоугольником экрана, а задняя находится где-то далеко-далеко.
Ну так вот, чтобы узнать, какого цвета будет какой-то пиксель на экране, нужно найти пересечение соответствующего пикселю луча с картой высот. Луч этот начинается в вершине пирамиды, проходит через переднюю плоскость в точке, соответствующей пикселю, и проходит к дальней.
После нахождения точки пересечения можно рассчитывать затенение (shading), которое зависит от источников света в сцене. Результирующий цвет и будет цветом пикселя (можно к нему еще добавить постобработку/post-effects).
Рейкастинг можно значительно упростить/ускорить, если ограничить свободу камеры (запретить повороты вверх-вниз и по оси, проходящей через центр экрана и перпендикулярной к ближней плоскости). Алгоритм называется "wave surfing", именно он использовался в старых играх.
Есть другой способ: растеризация. Это когда карту высот превращают в 3D-модель с полигончиками, применяют LOD или еще что, и скармливают Direct3D/OpenGL.
А теперь — в гугл!
10 апреля 2009 в 22:01
Зайди на steps3d.narod.ru
10 апреля 2009 в 20:03
читай апрельскую "Игроманию" = )