ОК, это общий обзор, и я предполагаю, что вы уже знакомы с основами OpenGL, такими как буферные объекты.Дайте мне знать, если что-то не имеет смысла, или если вы хотите больше подробностей.
Наиболее распространенный способ представления ландшафта в компьютерной графике - это поле высоты: сетка точек, которые регулярно располагаютсяна осях X и Y, но чья Z (высота) может варьироваться.Поле высоты может иметь только одно значение Z на одну (X, Y) точку сетки, поэтому у вас не может быть «выступов» на местности, но, как правило, этого достаточно в любом случае.
Простой способ рисования ландшафта поля высотыс полосой треугольника (или четырехугольников, но они устарели).Для простоты начните с одного угла и выпустите вершины в зигзагообразном порядке вниз по столбцу, затем вернитесь наверх и перейдите к следующему столбцу и т. Д.Существуют оптимизации, которые могут быть сделаны для лучшей производительности, и более сложные способы построения геометрии для лучшего внешнего вида, но это поможет вам начать.
(Я предполагаю, что здесь прямоугольная местность, так как этообычно это делается, если вы действительно хотите окружность, вы можете заменить ? и ? на X и Y, чтобы у вас была полярная сетка.)
Координаты для каждой вершины необходимо сохранить в буферном объекте, так какобычный.Когда вы вызываете glBufferData()
для загрузки данных вершин в графический процессор, укажите параметр использовании либо GL_STREAM_DRAW
, если местность обычно будет меняться от одного кадра к следующему, либо GL_DYNAMIC_DRAW
, если это произойдетчасто меняются, но не (близко) к каждому кадру.Чтобы изменить местность, снова вызовите glBufferData()
, чтобы скопировать другой набор данных вершин в графический процессор.
Для самих данных вершин можно указать все три координаты (X, Y и Z) для каждоговершина;это самая простая вещь.Или, если вы используете достаточно свежую версию GL и хотите быть изощренным, вы сможете вычислить координаты X и Y в вершинном шейдере, используя gl_VertexID
и размеры сетки (переданные шейдеру какединообразное значение).Таким образом, вам нужно только сохранить значения Z в буфере, что означает меньше потребляемой памяти и пропускной способности графического процессора.