Визуализация лесных массивов и рельефа местности в реальном времени
Способы визуализации местности в компьютерных программах и характеристика техники гео-мипмаппинга. Представление рельефа местности, его оптимизация через гео-мипмаппинг. Устранение артефактов, прорисовка деревьев и представление лесных массивов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.03.2010 |
Размер файла | 1,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Министерство образования Республики Беларусь
Учреждение образования
«Гомельский государственный университет им. Ф. Скорины»
Математический факультет
Кафедра МПУ
Курсовая работа
Визуализация лесных массивов и рельефа местности в реальном времени
Исполнитель:
Студентка группы М-41
____________ Мариненко А.Ю.
Научный руководитель:
Канд. физ-мат. наук, доцент
____________ Маргунова Т.Е.
Гомель 2006
СОДЕРЖАНИЕ
Введение
1 Представление рельефа местности
2 Оптимизация через гео-мипмаппинг
3 Устранение артефактов
4 Прорисовка деревьев
5 Представление лесных массивов
Заключение
Литература
ВВЕДЕНИЕ
На сегодняшний день существует множество способов визуализации местности в компьютерных программах. В основном все методы направлены на снижение числа выводимых полигонов при умеренном снижении качества, в частности, техника гео-мипмаппинга [3] получила наиболее широкое распространение среди движков игровых программ, требующих растеризацию реальных местностей с повторением физических свойств окружения и меньше затраты на вычисление. Существующие техники оптимизации рельефа местности, такие как упорядоченная и не упорядоченная [5] оптимизация полигональной сетки рельефа позволяют достичь наиболее качественных результатов, однако неупорядоченная оптимизация довольно сложна в исполнении и затраты на обработку CPU наиболее высокие, по сравнению с упорядоченной оптимизацией. Описываемая ниже техника относится к упорядочиваемым оптимизациям.
Одно из преимуществ представленного способа оптимизации полигональной сетки рельефа, наряду с быстротой, это способ представления уровней оптимизации, что дает возможность чрезвычайно быстро прорисовывать лесные массивы с использованием современных графических процессоров.
1 ПРЕДСТАВЛЕНИЕ РЕЛЬЕФА МЕСТНОСТИ
Наиболее рациональным представлением рельефа местности является карта высот. Зачастую используется 8-битная карта высот (рис.1), однако если местность предполагает быть достаточно детализированной, возможно использование 16-битных карт.
Рисунок 1 - Карта рельефа
И здесь следует отметить множество способов получения карт, это:
a) Вручную созданные карты (непосредственным редактированием высот);
b) Фрактальная генерация рельефа;
c) Сканированные карты космических тел (Марс, Земля, Луна). Наиболее доступны высотные карты Марса.
На сегодняшний день достаточно качественной детализации карт размером 100x100 км, при довольно высоких дальностях прорисовки (от 10км и более) можно считать детализацию 10 метров. Данное ограничение связанно с конечным размером карты. Так, 8-битная карта 100x100 км с детализацией 10 м будет занимать не менее 100 Мб (реальный размер может быть выше 400 Мб). В случае, если карта предполагает быть порядка 10x10 км (наиболее распространенный размер среди наземных игр), детализация может быть повышена до 5-3 метров.
Поскольку 100 Мб - довольно большой размер, загрузка в память всей карты не целесообразна, необходимо разделение карты на сектора, погрузка которых во время перемещения по карте не представляла бы проблем. К примеру, сектор 10x10 км будет занимать не менее 1 Мб, а это уже приемлемый размер. Далее, 100 Мб это довольно большой размер, учитывая что программа должна иметь более 1 карты, поэтому необходимо сжатие карт высот по методу DCT (Discrete Cosine Transformation) - Дискретно-косинусового преобразования, либо Вейвлет преобразования с последующим сжатием методом Huffman. Способы упаковки выходят за рамки этого документа. В случае если карта 8-битная и не высокочастотная, довольно эффективным будет метод упаковки RLE. Возможен и другой вариант: хранить карты как изображение формата JPEG (или другого), и при загрузке пользоваться стандартными библиотеками распаковки данного формата.
Геометрическое представление.
В геометрическом смысле рельеф может быть представлен трехсторонними полигонами, соединяющими точки, являющиеся уровнями высот карты рельефа (рис. 2).
Рисунок 2 - Фрагмент карты
В данном случае представлен фрагмент размером 32 полигона с 25 вершинами. Для оптимизации рельефа, необходимо разбиение карты на отдельные блоки. Число клеток блока должно быть равно n=2m, где m?[1,...], число вершин блока k=2m+1. Данные блоки можно растеризировать с отдельной текстурой и осуществлять при рендеринге отбрасывание, не входящих в видовой объем. Обычно для таких целей достаточно техники Quadtrees. В качестве ограничивающего тела выступает сфера, в которую вписан блок карты 8x8 (или более). Таким образом, карта размером 256x256 точек и блоков 8x8, будет состоять из следующих уровней: 1 (32x32) => 4 дочерние ветви 16x16 и т.д.; у каждой ветви по 4 дочерних, разрешение дочерней ветви вдвое ниже по сравнению с родительским уровнем. Таким образом каждая ветвь содержит информацию об ограничивающих телах, то есть, сферах.
2 ОПТИМИЗАЦИЯ ЧЕРЕЗ ГЕО-МИПМАППИНГ
Если сравнивать двухмерный мипмапинг и гео-мипмаппинг, то оптимизация рельефа связана с понижением разрешения сетки блока с 8x8 (к примеру) на 4x4, затем 2x2 и 1x1, путем удаления промежуточных узлов (рис.3). Здесь, белыми точками показаны удаленные, черные - формирующие новый блок 2x2.
Рисунок 3 - Оптимизация с 4x4 до 2x2
Выбор детализации MipMap блоков
Детализация, основанная на дальности:
Уровень детализации блоков MipMap можно выбирать исходя из удаленности от камеры. Соответственно, уровень будет варьироваться в зависимости от дальности LMin и LMax. Обычно LMin = 0, в то время как LMax может выставляться как уровень детализации:
LMax = p * MaxDistance,
где 0<=p<=1,
MaxDistance - максимальная дальность прорисовки, может быть равна дальности тумана при тумане, основанном на расстоянии.
И так, уровень
MipMap = (L - LMin) * k, где k = 1 / (LMax - LMin).
Подобный способ выбора детализации не всегда соответствует оптимальному распределению полигонов рельефа: даже плоская поверхность на некотором расстоянии будет полностью или частично детализирована. В то время как для такой поверхности достаточно 2 полигонов (1 уровень детализации).
Более точную картину дает выбор детализации, основанный на кривизне поверхности блока.
Детализация, основанная на кривизне поверхности:
Суть данного метода заключается в определении относительной погрешности EL в пикселях, уровня Lдетализации блока, и сравнением с критерием отбора на растеризацию MaxError. Критерий отбораMaxError есть допустимая погрешность в пикселях. Нормальное значение критерия лежит в пределах от 3 до 10 пикселей и может выставляться пользователем в настройках. Чем больше MaxError - тем быстрее прорисовка, но погрешность аппроксимации возрастает - более заметны скачки в переходе между уровнями оптимизаций.
Для определения EL, где L - уровень оптимизации,
1) L ? [1; 1+log2MaxRes]
MaxRes - максимальное разрешение блока (для MaxRes=8, 1<=L<=4, соответственно, при L=4 разрешение блока = MaxRes = 8, при L=1 разрешение блока = 1).
где, AL - число уровней, AL = 1+log2MaxRes,
вектор a - вертикальный вектор (0;1;0),
вектор b - вектор от центра блока до наблюдателя (камеры),
вектор c = нормализованный вектор b,
? - угол обзора камеры по вертикали,
h - размер буфера рендеринга по вертикали в пикселях.
Суть скалярного произведения (a x b) заключается в том, что наблюдатель не увидит особых геометрических изменений на блоке, над которым он находится на довольно большой высоте.
Функция d(n) (3) - есть среднее арифметическое между ризницами высот вершин уровня n+1 (более детализированного) и высоты под этой точкой уровня n (рис.4). AD(n) - число удаляемых точек уровня n при оптимизации к более низкому уровню.
Рисунок 4 - Разницы высот ?, тонкая линия - уровень n+1, толстая - уровень n.
Таким образом, для каждого уровня (последний уровень, наивысшего качества будет иметь погрешность E = 0, то есть нет погрешности), вычисляется числитель уравнения (2) и сохраняется в таблице. При растеризации блока ищется такой уровень, E которого ниже максимальной погрешностиMaxError.
Следует добавить, что если длина вектора b меньше радиуса сферы в который вписан сам блок, то блок следует рисовать с наивысшим качеством, чтобы не происходило сильных изменений в геометрии, когда камера почти вплотную приблизилась к нему.
3 УСТРАНЕНИЕ АРТЕФАКТОВ
При растеризации блоков с разными уровнями детализации возникают проблемы состыковки блоков, а именно, при переходе на более низкий уровень детализации будут возникать щели в стыках между блоками. Вызвано это расхождением истинной позиции точки блока высшего уровня и линейной аппроксимации между двумя точками блока низшего уровня (рис. 5).
Рисунок 5 - Стык блоков с разной детализацией
Для устранения подобных эффектов следует стягивать граничные вершины блоков более высокой детализации с вершинами, совпадающими с вершинами блока низкой детализации (рис. 6).
Рисунок 6 - Стягивание вершины a с вершиной b
Здесь показано стягивание вершины a (белая точка, старое положение пунктирной линией) к вершине b (два блока с детализацией 1 - синий, 2 - красный)).
4 ПРОРИСОВКА ДЕРЕВЬЕВ
Естественно, что единственно быстрый способ прорисовки деревьев является прорисовка с наименьшим числом изменений RenderState, и вызовов DrawIndexedPrimitive. Существует множество методов представления деревьев: это и плоскостное представление (дерево представлено 3 квадратными полигонами, содержащими текстуру проекций дерева), трехмерное представление дерева и способ представления в виде частиц, описанный в [8]. В данном документе будет описано представление дерева как ствола с ветками и частиц, представляющих листву. Частицы позволяют хорошо описать объем листвы с наименьшими затратами на прорисовку.
Листва деревьев
Как уже было сказано, частицы представляют листву. Предполагается, что частица должна прорисовываться как Billboard с текстурой, через Alpha test. Так как нам надо минимизировать вызовы DrawIndexedPrimitive и использовать VertexBuffer-ы для ускорения прорисовки, предполагается ориентация Billboard-ов через VertexShader1.0. Это позволяет прорисовать всю листву за один вызов DrawIndexedPrimitive.
Каждый Billboard состоит из 4 вершин и 6 индексов, описывающих 2 треугольных полигона. Поскольку VertexShader1.0 работает отдельно с каждой вершиной, то вершина должна содержать информацию о центре всего Billboard, к которому она принадлежит. Изначально Billboard - это прямоугольник с координатами вершин (-sz, sz,0), (sz, sz,0), (sz,- sz,0), (-sz,- sz,0) (прямоугольник в плоскости XY). SZ - радиус частицы, если предполагается оптимизация через сливание смежных частиц, то SZ=1 и вершина должна содержать информацию о размере частицы. VertexShader должен ориентировать этот прямоугольник на камеру и сместить его на центр частицы. Для придания объема частицы используется Bumpmapping.
Рисунок 7 - Ориентация частиц
Ствол дерева может быть как с ветками, так и без веток и может быть либо автоматически генерированным, либо сделанным вручную. Для придания реалистичности ствол искажается функцией Sin в плоскости XZ, аргумент функции зависит от координаты y. Если дерево содержит много частиц, возможно применение оптимизации: 2 ближайших частицы срастаются в одну, при этом линейно меняется размер обоих частиц: одна увеличивается, другая - уменьшается (центр второй интерполируется к центру первой).
где R - радиус результирующей частицы,
S0, S1 - исходные площади 2-х частиц.
Всего_вершин = Всего_частиц * 4.
Ниже приводится пример VertexShader программы ориентации Billboard-вершин, для Direct3D8 (без расчета коэффициента тумана oFog):
Формат вершин:
typedef struct{
D3DXVECTOR4 Vertex;//x,y,z,Radius
D3DXVECTOR3 Center;
}LEAFVERTEX;
VertexShader:
vs.1.0
//c4 - transposed view matrix (no translation)
//c9 - Light vector (to diffuse 0)
//c10 - world matrix
//c16 - view projection matrix
def c8, 0.5,1,0,0
//v0 - vertex, Particle radius
//v1 - center
mad r1, v0,c8.x,c8.x
sub r1.y, c8.y,r1.y
mov oT0.xy,r1
mov oT1.xy,r1
mul r1, v0,v0.w
m3x3 r0, r1,c4
m4x4 r1, v1,c10
add r0, r0,r1
mov r0.w, c8.y
m4x4 oPos, r0,c16
mov oD0,c9 // Light direction for bump mapping
5 ПРЕДСТАВЛЕНИЕ ЛЕСНЫХ МАССИВОВ
Поскольку описывание каждого дерева (его позиция, и поворот с наклоном) подходит только для единичных деревьев, представление деревьев лесных массивов данным методом не является рациональным. Вместо этого используется заранее сгенерированный лесной блок (либо несколько разновидностей) и он прорисовывается вместе с прорисовкой блока рельефа. Естественно, прорисовка вместе с рельефом - это не совсем верно, необходимо создание группированных списков рендеренга лесных блоков для уменьшения числа смен RenderState.
3 уровня оптимизации
Отображение в полном качестве подходит только для тех деревьев, что вблизи. Для удаленных деревьев необходима оптимизация, причем оптимизация по срастанию частиц листвы не достаточна. Поэтому используется вывод через импостеры. Импостер ориентируется на камеру, для чего строится матрица LookAt в VertexShader, целью которой является камера, а вертикалью вектор (0;1;0).
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
Импостер сменяет текстуру в зависимости от ракурса, глядя на камеру. Достаточно 4 ракурса под разными углами (0, 30, 60 и 90 градусов), вокруг оси OX (или OZ). Поскольку деревья с листвой из частиц почти со всех сторон (по оси Y) выглядят одинаково, на достаточном расстоянии, можно пренебречь генерацией текстур с ракурсами от 0 до 360 градусов (и соответственно, генерацией текстур «на лету»). И так, для одного дерева мы готовим 4 ракурса и сохраняем это все в одной текстуре (Рис. 8). Кстати, эта же текстура может содержать ракурсы для других деревьев (это значит, что мы можем вывести несколько разновидностей деревьев за один раз, конечно, используя VertexShader1.1 для ориентации импостеров). Для придания объема импостера используется Bumpmapping.
Рисунок 8 - Текстуры импостера 2-х разных деревьев (левая - цветовая, правая - нормали)
Далее, для совсем удаленных блоков леса можно применять технику плоскостных деревьев (лес представлен той же геометрией что и ландшафт, но смещенный вверх на определенную высоту и содержит текстуру блока леса с вида сверху).
ВЫВОД ИМПОСТЕРОВ
Вывод всех импостеров с ориентацией на камеру за один раз можно произвести, однако появляется вопрос: каким образом выставить высоты импостеров, чтобы они точно стояли на рельефе (поскольку рельеф не плоский)? Можно применить следующий выход: так как рельеф у нас представлен блоками (которые оптимизируются), и блок леса имеет те же размеры что и блок рельефа, то можно записать в константы VertexShader-а коэффициенты полигонов (для интерполяции высоты по координатам (X,Z)), из которых состоит блок рельефа (уже оптимизированный), чтобы потом в VertexShader-е можно было интерполировать высоту рельефа для заданных X и Z. Соответственно, формат вершины импостера должен содержать адрес на константу (константы) относящуюся к полигону на котором стоит импостер (дерево).
Само по себе представление импостера схоже с представлением Billboard листвы деревьев. То есть, изначально это вертикальный прямоугольник, центр которого в координатах (0;0;0), формат вершин содержит центр реального положения импостера (в блоке леса).
Вот примерный формат вершины импостера:
typedef struct{
D3DXVECTOR3 Vertex;//x, y, z
D3DXVECTOR4 Center;// CenterX, CenterY, CetnerZ, Elevation segment constant
float tu,tv,OX,OZ;}IMPOSTERVERTEX;
Где: Vertex - координаты угла импостера (импостер генерируется как прямоугольник в плоскости XY, центр прямоугольника в координатах (0;0;0)). Center - центр в блоке леса (значение Center.y = половине высоты импостера, значение Center.w = адрес на константу для интерполяции высоты).
Естественно, сколько уровней оптимизации блока рельефа - столько разновидностей VertexBuffer-ов, различие в которых только в адресах на константы (геометрия блоков рельефа с разной оптимизацией разная).
Для нахождения координат в текстуре импостера нужного ракурса, в VertexShader используется функция arctg(x) для нахождения градуса, под которым импостер смотрит на камеру в вертикальной плоскости. Эту функцию можно преобразовать с помощью рядов Тейлора в следующую:
для |x|<=1.
В случае, если разрешение блока рельефа, в результате оптимизации больше чем 4x4 клетки, записывание коэффициентов в константы VertexShader1.1 становится невозможным (8x8 как минимум 64 константы из 96) и в этом случае необходимо использование максимального уровня (4x4) для импостеров, но все импостеры смещаются вверх от рельефа на некоторую величину, равную средней погрешности оптимизации блока (в результате оптимизации новые точки более высокого уровня оптимизации могут быть выше плоскостей более низкого уровня оптимизации).
Ниже представлен пример программы VertexShader для вывода импостеров (для ориентации здесь матрица LookAt не генерируется, а производятся линейные преобразования для вращения импостера вокруг центра, после чего импостер смещается на центр с рассчитанной высотой, импостеры выводятся до дальности 15000, причем происходит интерполяция Альфа канала для плавного перехода на следующий уровень оптимизации - плоскостным деревьям):
vs.1.1
//c0 - Camera position
//c1 - Block OffsetX, Offset Z
def c5, 1, 1.57079632, 0.57735026918962, 0
def c6,1.9098593171,0.25,0.5,0
def c8, 15000,0.0002,0,0
//c7 - Light direction vector
//c16 - View*Projection matrix
//Faces coefficients
//20 - Ky0, Ky1, Offset Y
//21 - Ky0', Ky1', Offset Y'
//...
//
//v0 - x,y,z
//v1 - CenterX,CenterY,CenterZ,Triangle constant ID
//v2 - tu,tv, KX, KZ
mov r0,v0 //R0 - source vertex
mov a0.x,v1.w
//Vertex rotation
mov r8, v1
mul r2.x, c[a0.x].x,v2.z
mad r2.x, c[a0.x].y,v2.w,r2.x
add r8.y, r8.y,r2.x
add r8.y, r8.y,c[a0.x].z
add r8.xz, r8.xz,c1.xy //R8 - transformed center
sub r1, c0,r8
max r1.y, r1.y,c5.w
dp3 r2, r1,r1
rsq r2, r2
mul r1, r1,r2 //R1 - Center to camera vector
//Alpha channel calculation
rcp r2,r2 //r2 - length
sub r2.x, c8.x,r2.x
mul r2.x, r2.x,c8.y
min r2.x, r2.x,c5.x
max oD0.w, r2.x,c5.w
mov r5, r1 //R5 = (R1.x; 0; R1.z)
mov r5.yw, c5.w //
dp3 r3, r5,r5
rsq r3, r3
mul r2, r5,r3 //R2 - Axis Z
dp3 r4, r5,r2 //R4.W = |R5|
//Angle calculation
rcp r5, r4
mul r5, r5,r1.y //R5 - tg(a)
slt r7.x, r5,c5.x //R7.x = K
sub r7.y, c5.x,r7.x //R7.y = 1-K
mul r5.y, r5.x,c5.z
mad r5.y, -r5.y,r5.y,c5.x
mul r5.x, r5.x,r5.y
mul r5.x, r5.x,r7.x
rcp r6, r1.y
mul r6, r6,r4 //R6 - ctg(a)
mul r6.y, r6.x,c5.z
mad r6.y, -r6.y,r6.y,c5.x
mul r6.x, r6.x,r6.y
sub r6.x, c5.y,r6.x
mad r5.x, r6.x,r7.y,r5.x //R5.x - Angle (0..PI/2)
//Texture coordinates
mad r5.y, r5.x,c6.x,c6.z
expp r6, r5.y
sub r5.y, r5.y,r6.y
mad r5.y,r5.y,c6.y,v2.y
mov r5.x,v2.x
mov oT0.xy,r5.xy
mov oT1.xy,r5.xy
///////Vertex ortation
mul r0.z, r1.y,r0.y //Rotate around X
mul r0.y, r4.w,r0.y //
mul r4.x, r0.z,r2.x //Rotate around Y
mad r4.x, -r0.x,r2.z,-r4.x //
mul r4.z, r0.z,r2.z //
mad r4.z, r0.x,r2.x,-r4.z //
mov r0.xz, r4.xz //
////////Sun rotation
mul r5.z, -c7.x,r2.x //Around Y
mad r5.z, -c7.z,r2.z,r5.z //
mul r5.x, -c7.x,r2.z //
mad r5.x, c7.z,r2.x,c7.x //
mul r5.w, -c7.y,r1.y //Around X
mad r5.w, r5.z,r4.w,r5.w //
mul r5.y, c7.y,r4.w //
mad r5.y, c7.z,r1.y,r5.y //
mov r5.z,r5.w
mad oD0.xyz, r5,c6.z, c6.z
mov r0.w,c5.x
add r0.xyz, r0.xyz,r8
m4x4 oPos, r0,c16
Тени от деревьев
Использование упорядоченной оптимизации рельефа позволяет эффективно выводить тени от таких объектов как деревья. В данном случае выводиться тот же блок что и рельефа, только через Alpha смешивание и с текстурой теней от деревьев. При генерации текстуры тени выводятся деревья с матрицей World, ось Y матрицы World сдвинута по направлению света на вектор (NLx, 0, NLz), без последующей нормализации. NLx, NLz - значения нормализированного вектора направления света NL(x, y, z).
ЗАКЛЮЧЕНИЕ
Благодаря применению 3 уровней оптимизации удалось достичь следующих результатов: (Для работы использовалась следующая система: AMD AthlonXP 1700+, 256 Mb, GeForce4 Ti-4200).
10x10 км. леса, число полигонов деревьев: 18038,
число полигонов рельефа: 7466,
число деревьев: 157286,
скорость прорисовки 100 fps (10 ms).[td]
10x10 км. леса, число полигонов деревьев: 12480, число полигонов рельефа: 1260, число деревьев: 157286, скорость прорисовки 166 fps (6 ms).
[tr]
10x10 км. леса, число полигонов деревьев: 19240, число полигонов рельефа: 40, число деревьев: 157286, скорость прорисовки ~500 fps (1 ms).
[td]
10x10 км. леса, число полигонов деревьев: 15078, число полигонов рельефа: 4126, число деревьев: 157286, скорость прорисовки 166 fps (6 ms).
ЛИТЕРАТУРА
1. Heckbert, P.S. and Garland, M. (1994). Multiresolution modeling for fast rendering. Proceedings of Graphics Interface (Banff, Alberta 18-20 May, 1994), pp. 43-50.
2. Peter Lindstrom, David Koller (1996), LEVEL-OF-DETAIL MANAGEMENT FOR REAL-TIME RENDERING OF PHOTOTEXTURED TERRAIN.
3. Willem H. de Boer. (2000). Fast Terrain Rendering Using Geometrical MipMapping, E-mersion Project, October 2000,
4. Peter Lindstrom, David Koller,_William Ribarsky, Real-Time, Continuous Level of Detail Rendering of Height Fields
5. P. Lindstrom and V. Pascucci (2001). Visualization of Large Terrains Made Easy,
6 ROAMing Terrain: Real-time Optimally Adapting Meshes. Mark Duchaineau, LLNL, Murray Wolinksy, LANL, David E. Sigeti, LANL, Mark C. Miller, LLNL, Charles Aldrich, LANL, Mark B. Mineev-Weinstein, LANL.
7 Continuous LOD Terrain Meshing Using Adaptive Quadtrees. Thatcher Ulrich, Slingshot Game Technology.
8 I. Remolar, M. Chover, J. Ribelles, У. Belmonte, View-Dependent Multiresolution Model For Foliage, WSCG 2003, pp.370-378, 2003.
Подобные документы
Разработка программного обеспечения по моделированию рельефа местности на основе топографических карт и прочих объектов на ней. Цифровые модели рельефа. Бикубическая интерполяция высотных данных. Технические требования к программному изделию.
отчет по практике [246,4 K], добавлен 06.04.2013Наглядное представление массивов различной информации в компьютерной графике. Типы визуализации: схематическая, концептуальная, стратегическая, графическая, комбинированная. Виды сравнения данных: покомпонентное, позиционное, временное, частотное.
контрольная работа [1,4 M], добавлен 20.12.2015Составляющие цифровой модели рельефа. Назначение и области применения программного комплекса Credo_Топоплан, обзор основных функций системы. Создание ЦМР по тахеометрической съемке местности и с помощью растровой подложки; работа в Credo_Transform.
курсовая работа [7,3 M], добавлен 19.04.2012Последовательность построения поверхностей, картографирования значений глубин и сравнения полученных моделей при помощи модуля Geostatistical Analyst. Визуализация рельефа и создание 3D-моделей местности в ArcGIS. Создание видео-обзора 3D-поверхностей.
курсовая работа [5,5 M], добавлен 23.04.2012Понятие массива и правила описания массивов в программах на языке С. Рассмотрение основных алгоритмов обработки одномерных массивов. Примеры программ на языке С для всех рассмотренных алгоритмов. Примеры решения задач по обработке одномерных массивов.
учебное пособие [1,1 M], добавлен 22.02.2011Ознакомление с особенностями программной реализации алгоритмов преобразования одномерных массивов. Исследование развития вычислительной техники, которое подразумевает использование компьютерных и информационных технологий. Изучение интерфейса программы.
курсовая работа [1,0 M], добавлен 02.06.2017Разработка программ на языке Turbo Pascal на основе использования массивов данных. Особенности хранения данных, способы объявления переменных, действия над элементами массивов, их ввод и вывод. Практическое применение одномерных и многомерных массивов.
методичка [17,8 K], добавлен 25.11.2010Выполнение геометрической коррекции сканированного листа карты Украины масштаба 1:1000000 в среде Erdas. Возможности выявления объектов с использованием радиолокационных снимков. Создание цифровых моделей рельефа и перспективных изображений местности.
курсовая работа [2,0 M], добавлен 17.12.2013Общая характеристика систем синтезированного обзора (видения). Разработка программного стенда, предназначенного для построения синтезированных 3D изображений местности по цифровой карте, загруженной из файла имитации полета летательного аппарата.
дипломная работа [8,7 M], добавлен 29.06.2012Ознакомление с основными понятиями и организацией ввода-вывода, обработкой массивов. Описание одномерных и двумерных массивов. Описание строк и операции с ними. Комбинированный тип данных - записи. Характеристика записей, использующих вариантную часть.
реферат [84,6 K], добавлен 09.02.2011