РАЗРАБОТКА МОДЕЛИ КУБА СЕЙСМИЧЕСКОЙ ИНФОРМАЦИИ СРЕДСТВАМИ OPEN GL - Студенческий научный форум

V Международная студенческая научная конференция Студенческий научный форум - 2013

РАЗРАБОТКА МОДЕЛИ КУБА СЕЙСМИЧЕСКОЙ ИНФОРМАЦИИ СРЕДСТВАМИ OPEN GL

Бикинеева А.М. 1, Гуляева К.В. 1
1Томский Политехнический Университет
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Аннотация

В работе представлена разработка модели куба сейсмической информации.

Ключевые слова: математический объект, математическая модель, программный объект, форма, модуль, информационный поток, визуальный компонент, структура данных, метод класса, обработчик событий, сейсморазведка, МОГТ, формат данных.

Число страниц – 21.

Число рисунков – 7.

Число таблиц – 1.

Содержание

Содержание 3

Введение 4

Постановка задачи 5

Основная часть 6

Графический стандарт OpenGL 6

Основные возможности OpenGL: 7

Этапы выполнения задачи 8

Изучение простейших примитивов 9

Построение модели 11

Листинги программного кода и пояснения 12

Описание глобальных переменных 12

Описание функций, связанных с текструрами 12

Функция построения изображения 13

Функция изменения размера окна 13

Функция выхода на нажатие кнопки «Esc» 14

Функции, связанные с движением 14

Основная функция 15

Результаты работы программ 15

Заключение 18

Список литературы 19

Введение

Обработка геофизических данных является необходимым этапом проведения сейсморазведки. В современной сейсморазведке наиболее распространенным является метод общей глубинной точки (МОГТ). Сущность МОГТ составляет идея многократного прослеживания одних и тех же отраженных от границы волн при различном взаимном положении источников и приемников упругих колебаний. При проведении сейсморазведочных работ в районах со сложными глубинными сейсмогеологическими условиями для получения объективных и достоверных сведений о геологическом строении изучаемой среды необходимо учитывать трехмерность структуры волнового поля [1]. Кроме того, в указанных районах при профильном варианте изучения среды сейсморазведкой 2D нередко трудно однозначно опознать волны, у которых направление распространения не лежит в вертикальной плоскости, содержащей линию профиля. В сейсморазведке 3D, в отличие от работ по технологии 2D, плотность общих глубинных точек на единицу площади исследований резко возрастает, что дает возможность формировать куб сейсмической информации [2].

Сейсморазведочные работы 3D на начальном этапе своего развития проводились по упрощенным системам наблюдения, так как все сейсмостанции того времени были линейными, вследствие чего реализовать сложные системы наблюдения с такой аппаратурой было невозможно [1]. В настоящее время для регистрации наблюдений используются различные форматы данных. Рассмотрим формат формат SEG-Y, поскольку он является наиболее используемым. Упрощенно принцип хранения информации в формате SEG-Y представлен на рисунке 1 и заключается в сборе в одном файле данных всех проведенных исследований таким образом, что данные одного колебания (трассы) находятся в одной записи [3, 4].

Рис. 1. Принцип хранения информации в формате SEG-Y.

Постановка задачи

В данной курсовой работе требуется разработать тестовую модель куба сейсмической информации. Под тестовой моделью следует понимать модель, не использующую данные SEG-Y – файла, т.е. данные для текстур будут выбираться произвольно. Следующим этапом работы является считывание данных их SEG-Y – файла и генерация текстуры на основе полученных данных.

Для разработки модели выберем среду программирования Borland C++. Построение 3D-моделей возможно с использованием библиотек OpenGL а также программных пакетов, таких как Autodesk 3ds Max, Gmax и прочих. Наибольший интерес представляют именно библиотеки OpenGL, поскольку они находятся в свободном доступе во всемирной сети, а также могут быть использованы при написании программ на таких языках программирования, как Java, Фортран 90, Perl, Pike, Python, Ada, Visual Basic и Pascal. Имеются также варианты привязки OpenGL для языков C++ и C# [5]. Именно привязка OpenGL к С++ стала решающим фактором в выборе инструмента для создания программного модели.

Основная часть Графический стандарт OpenGL

OpenGL - это графический стандарт в области компьютерной графики. На данный момент он является одним из самых популярных графических стандартов во всём мире. Ещё в 1982 г. в Стенфордском университете была разработана концепция графической машины, на основе которой фирма Silicon Graphics в своей рабочей станции Silicon IRIS реализовала конвейер рендеринга. Таким образом была разработана графическая библиотека IRIS GL. На основе библиотеки IRIS GL, в 1992 году был разработан и утверждён графический стандарт OpenGL. Разработчики OpenGL - это крупнейшие фирмы разработчики как оборудования так и программного обеспечения: Silicon Graphics, Inc., Microsoft, IBM Corporation, Sun Microsystems, Inc., Digital Equipment Corporation (DEC), Evans & Sutherland, Hewlett-Packard Corporation, Intel Corporation и Intergraph Corporation.

OpenGL переводится как Открытая Графическая Библиотека (Open Graphics Library), это означает, что OpenGL - это открытый и мобильный стандарт. Программы, написанные с помощью OpenGL можно переносить практически на любые платформы, получая при этом одинаковый результат, будь это графическая станция или суперкомпьютер. OpenGL освобождает программиста от написания программ для конкретного оборудования. Если устройство поддерживает какую-то функцию, то эта функция выполняется аппаратно, если нет, то библиотека выполняет её программно.[5]

Библиотека OpenGL представляет из себя интерфейс программирования трехмерной графики. Единицей информации является вершина, из них состоят более сложные объекты. Программист создает вершины, указывает, как их соединять (линиями или многоугольниками), устанавливает координаты и параметры камеры и ламп, а библиотека OpenGL берет на себя работу создания изображения на экране. OpenGL идеально подходит для программистов, которым необходимо создать небольшую трехмерную сцену и не задумываться о деталях реализации алгоритмов трехмерной графики. Для профессионалов, занимающихся программированием трехмерной графики, библиотека тоже будет полезной, т.к. она представляет основные механизмы и выполняет определенную автоматизацию. Используя OpenGL можно с легкостью создадать трехмерные поверхности, наложить на них текстуры, осветить источниками света, сделать эффект тумана, прозрачности, смешивания цветов, а также наложить трафарет, передвигать объекты сцены, лампы и камеры по заданным траекториям, сделав тем самым анимацию. OpenGL непосредственно не поддерживает работу с устройствами ввода, такими как мышь или клавиатура, т.к. эта библиотека является платформенно-независимой. Но можно задействовать функции конкретной операционной системы, под которую вы пишите свою программу или воспользоваться надстройками над OpenGL, такими как библиотеки GLUT или GLAUX. [6]

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

В некоторых библиотеках OpenGL (например под X Windows) имеется возможность изображать результат не только на локальной машине, но также и по сети. Приложение, которое вырабатывает команды OpenGL называется клиентом, а приложение, которое получает эти команды и отображает результат - сервером. Таким образом можно строить очень мощные воспроизводящие комплексы на основе нескольких рабочих станций или серверов, соединённых сетью. [7]

Основные возможности OpenGL:
  • Геометрические и растровые примитивы. На основе геометрических и растровых примитивов строятся все объекты. Из геометрических примитивов библиотека предоставляет: точки, линии, полигоны. Из растровых: битовый массив (bitmap) и образ (image);

  • Использование В-сплайнов. B-сплайны используются для рисования кривых по опорным точкам;

  • Видовые и модельные преобразования. С помощью этих преобразований можно располагать обьекты в пространстве, вращать их, изменять форму, а также изменять положение камеры из которой ведётся наблюдение;

  • Работа с цветом. OpenGL предоставляет программисту возможность работы с цветом в режиме RGBA (красный-зелёный-синий-альфа) или используя индексный режим, где цвет выбирается из палитры;

  • Удаление невидимых линий и поверхностей. Z-буферизация;

  • Двойная буферизация. OpenGL предоставляет как одинарную так и двойную буферизацию. Двойная буферизация используется для того, чтобы устранить мерцание при мультипликации, т.е. изображение каждого кадра сначала рисуется во втором(невидимом) буфере, а потом, когда кадр полностью нарисован, весь буфер отображается на экране;

  • Наложение текстуры. Позволяет придавать объектам реалистичность. На объект, например шар, накладывается текстура(просто какое-то изображение), в результате чего наш объект теперь выглядит не просто как шар, а как разноцветный мячик;

  • Сглаживание. Сглаживание позволяет скрыть ступенчатость, свойственную растровым дисплеям. Сглаживание изменяет интенсивность и цвет пикселей около линии, при этом линия смотрится на экране без всяких зигзагов;

  • Освещение. Позволяет задавать источники света, их расположение, интенсивность, и т.д.;

  • Атмосферные эффекты. Например туман, дым. Всё это также позволяет придать объектам или сцене реалистичность, а также "почувствовать" глубину сцены;

  • Прозрачность объектов;

  • Использование списков изображений.

Этапы выполнения задачи

На рисунке 2 представлена последовательность выполнения шагов решения поставленной задачи – построения модели куба сейсмической информации.

Рис. 2. Последовательность выполнения шагов решения поставленной задачи.

Изучение простейших примитивов

В ходе изучение дисциплины «Компьютерная графика» нами получены базовые навыки работы с графической библиотекой OpenGL и её дополнением FreeGLUT. Была написаны функция:

  • вывод изображения на экран,

  • обработка изменения размера окна программы.

В ходе работы нами изучены функции, представленные в Таблице 1.

Таблица 1.

Используемые функции проекта

Название функции

Описание функции

glClear ()

Очистка различных буферов OpenGL. В данном случае (см. параметры в коде) буфера цвета и буфера глубины.

glTranslatef (xd, dy, dz)

Функция сдвига сисемы координат на заданную dx, dy и dz. Буква “f” в названии говорит о том, что аргументы команды – числа типа float.

glScalef (x, y, z)

Функция масштабирования в x раз по оси ox, в y раз по оси oy и в z раз по оси oz. Буква “f” в названии говорит о том, что аргументы команды – числа типа float.

glRotatef (angle, x, y, z)

Функция поворота вокруг оси, где первый аргумент - это угол поворота против часовой стрелки, а остальные три показывают относительно каких осей координат будет производится поворот на заданный угол

glLoadIdentity()

Функция, устанавливающая исходный вид системы координат. Проще говоря, отменяет действие всех предыдущих translate, scale и rotate.

glBegin … glEnd

Операторные скобки процедуры рисования в OpenGL, где параметром glBegin является тип объединения вертексов, описывающихся перед glEnd, в фигуры:

GL_POINTS – каждый вызов glVertex задает отдельную точку.

GL_LINES – каждая пара вершин задает отрезок.

GL_LINE_STRIP – рисуется ломанная.

GL_LINE_LOOP – рисуется ломанная, причем ее последняя точка соединяется с первой.

GL_TRIANGLES – каждые три вызова glVertex задают треугольник.

GL_TRIANGLE_STRIP – рисуются треугольники с общей стороной.

GL_TRIANGLE_FAN – рисуются треугольники с одной общей вершиной.

GL_QUADS – четырёхугольники.

GL_QUAD_STRIP – четырёхугольники с общей стороной.

GL_POLYGON – многоугольник

glVertex ()

Команда, которая должна находиться между соответствующей парой glBegin – glEnd. Описывает вершину в 3-мерном или 2-мерном (если команда вида glVertex2#, где # – буква, указывающая на тип параметров команды). Вызов glVertex вне скобок begin – end приведёт к ошибке.

glColor (r, g, b)

Команда описывает текущее состояние рисования OpenGL. Соответсвенно, если если произошёл один вызов этой команды с каким-то заданным цветом, то всё, что будет рисоваться после этого вызова будет закрашено этим цветом. Может вызываться внутри или вне begin – end, как для всей фигуры, так и для отдельного вертекса. Три ее параметра указывают насыщенность цвета красной, синей и зеленой составляющей.

glutSwapBuffers ()

Вызывается тогда, когда обработаны все команды на прорисовку фигур на экране, выполняя смену буфера кадра.

glViewport (x,y,width, height)

Утанавливает размеры области, в которой OpenGL будет выполнять прорисовку. Значения всех параметров задаются в пикселах и определяют ширину и высоту области вывода с координатами левого нижнего угла ( x,y ) в оконной системе координат.

gluPerspective (angley, aspect, znear, zfar)

Устанавливает параметры перспективы отображения. Параметр angley определяет угол видимости в градусах по оси у и должен находиться в диапазоне от 0 до 180. Угол видимости вдоль оси x задается параметром aspect, который обычно задается как отношение сторон области вывода. Параметры zfar и znear задают расстояние от наблюдателя до плоскостей отсечения по глубине и должны быть положительными.

glMatrixMode ()

Устанавливает тип матрицы, которую необходимо изменить:

GL_PROJECTION – проектно-видовая матрица, отвечающая за то, как и куда мы смотрим на визуализируемую сцену

GL_MODELVIEW – модельно-видовая матрица, наша система координат. Собственно эта матрица и изменяется при вызове rotate, translate и scale команд.

glClearColor ()

Функция, устанавливающая цвет очистки экрана. По умолчанию – чёрный.

На рисунке 3 представлен результат выполнения программы: требовалось нарисовать 2 геометрических объекта, чтобы один из них двигался по определенному закону, а другой менял цвета своих вершин.

Рис.3. Результат, выполненной в ходе лабораторной работы.

Построение модели

Как правило, модель описывается граничными условиями и параметрами пластов в отдельных точках среды. Далее рассмотрим модель горизонтально-слоистой среды и будем полагать, что слои являются однородными. Принятые допущения существенно упростят визуализацию данной модели, в дальнейшем планируется переход от упрощенной модели к более детальной.

При проектировании приложения визуализации требуется, чтобы пользователь-геофизик мог с легкостью управлять данным приложением и настраивать элемент визуализации по своему усмотрению, в связи с этим основным элементами управления у нас будут служить комбинации клавиш на клавиатуре, а также кнопки и Scroll мыши, что является незатруднительным в освоении для пользователя. Необходима реализация графического дружественного интерфейса.

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

Опорными критериями для построения нашего элемента визуализации будут служить:

  • скорость выполнения программы;

  • качество и скорость реакции программы на действия пользователя.

Скорость выполнения работы является важным критерием эффективности. Как правило, длительность реакции системы является наименее требуемый блок заданий.

От качество и скорость реакции программы на действия пользователя будет также зависеть скорость выполнения пользователем всего блока задач. Для реализации данных критериев будем рассматривать работу с помощью приемлемых пользователю устройств ввода, таких как комбинация клавиш клавиатуры и мыши.

Листинги программного кода и пояснения Описание глобальных переменных

static GLubyte checkImage[checkImageHeight][checkImageWidth][4];

static GLuint texName;

float t=0, j, u, v, x, y, z, dx=0, dy=0, dz=-20, xRot=0, yRot=0, zRot=0;

float light0_direction[] = {1.0, 1.0, 1.0, 0.8};

float light0_diffuse[] = {1, 1, 1}; //цвет

int x1, y1;

int i = 0;

Описание функций, связанных с текструрами

Функция генерации текстуры

void makeCheckImage(void)

{

int i, j, c;

for (i = 0; i < checkImageHeight; i++)

{

for (j = 0; j < checkImageWidth; j++)

{

c = ((((i&0x8)==0)^((j&0x8))==1))*255;

checkImage[i][j][0] = (GLubyte) c;

checkImage[i][j][1] = (GLubyte) c;

checkImage[i][j][2] = (GLubyte) 240;

checkImage[i][j][3] = (GLubyte) 255;

}

}

}

Функция инициализации текстуры

void init(void)

{

glClearColor (0.0, 0.0, 0.0, 0.0);

glShadeModel(GL_FLAT);

glEnable(GL_DEPTH_TEST);

makeCheckImage();

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

glGenTextures(1, &texName);

glBindTexture(GL_TEXTURE_2D, texName);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);

}

Функция построения изображения

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glEnable(GL_TEXTURE_2D);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

glBindTexture(GL_TEXTURE_2D, texName);

glTranslatef(0.0f,0.0f,0.0f);

// Рисование куба, текстура

glBegin(GL_QUADS);

// Передняя поверхность куба

glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Ниж лев

glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Ниж прав

glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Вер прав

glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Вер лев

// Задняя поверхность куба

glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Ниж прав

glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Вер прав

glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Вер лев

glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Ниж лев

// Правая поверхность куба

glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Ниж прав

glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Вер прав

glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Вер лев

glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Ниж лев

// Левая поверхность куба

glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Ниж лев

glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Ниж прав

glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Вер прав

glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Вер лев

glEnd();

glDisable(GL_TEXTURE_2D);

// Рисование куба, без текстуры

glBegin(GL_QUADS);

// Верхняя поверхность куба

glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Вер лев

glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Ниж лев

glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Ниж прав

glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Вер прав

// Нижняя поверхность куба

glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Вер прав

glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Вер лев

glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Ниж лев

glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Ниж прав

glEnd();

glFlush();

}

Функция изменения размера окна

void reshape(int w, int h)

{

if(h == 0)

h = 1;

glViewport(0, 0, (GLsizei) w, (GLsizei) h); // Уст. раз-ры обл прорисовки

glMatrixMode(GL_PROJECTION); // Уст. тип мат-цы, к-ю измен

glLoadIdentity(); // Уст. исх вида сист. коорд

gluPerspective(100.0f, (GLfloat) w/(GLfloat) h, 0.1f, 100.0f); // Перспект.

//gluLookAt (3, 3, 3, 0, 0, 0, 0, 10, 0); //Уст. камеры обзора

glMatrixMode(GL_MODELVIEW); // Уст. тип мат-цы, к-ю измен

glLoadIdentity(); // Уст. исх вида сист. коорд

}

Функция выхода на нажатие кнопки «Esc»

void keyboard (unsigned char key, int x, int y)

{

switch (key)

{

case 27:

exit(0);

break;

default:

break;

}

}

Функции, связанные с движением

Описание движении при нажатии клавиш

void keyboard (unsigned char key, int x, int y)

{

if(key == 27 || key == 'q' || key == 'Q')

exit(0);

// Перемещение

if(key == 27 || key == 'a' || key == 'A')

dx=dx+0.1; // передвижение фигуры по оси Х вправо

if(key == 27 || key == 'w' || key == 'W')

dy=dy-0.1; // передвижение фигуры по оси Y влево

if(key == 27 || key == 'd' || key == 'D')

dx=dx-0.1; // передвижение фигуры по оси X влево

if(key == 27 || key == 's' || key == 'S')

dy=dy+0.1; // передвижение фигуры по оси Y вправо

if(key == 27 || key == 'r' || key == 'R')

dz=dz+0.1;

if(key == 27 || key == 'f' || key == 'F')

dz=dz-0.1;

// Вращение

if(key == 27 || key == 'i' || key == 'I')

xRot=xRot+1;

if(key == 27 || key == 'k' || key == 'K')

xRot=xRot-1;

if(key == 27 || key == 'j' || key == 'J')

yRot=yRot+1;

if(key == 27 || key == 'l' || key == 'L')

yRot=yRot-1;

if(key == 27 || key == 'u' || key == 'U')

zRot=zRot+1;

if(key == 27 || key == 'o' || key == 'O')

zRot=zRot-1;

glutPostRedisplay();

}

Функция, определяющая какая кнопка мыши была нажата:

void _mouseclick( int button, int state, int x, int y )

{

// Если кнопку нажали (не отпустили)

if ( state == GLUT_DOWN ) // Определяем, какая кнопка

switch ( button )

{

case GLUT_LEFT_BUTTON: // Левая кнопка

x1=x;

y1=y;

printf("%i",y);

break;

}

display(); // Вызов отрисовки для применения изменений

}

Функция,регистрирующая передвижение мыши:

void mouseMotion(int x, int y)

{

yRot = yRot - (float)0.01*(x1 - x);

xRot = xRot - (float)0.01*(y1 - y);

}

Функция, регистрирующая прокрутку колесика мыши:

void mouseWheel(int button, int dir, int x, int y)

{

if (dir > 0) // Приблизить

dz=dz+0.5;

else // Отдалить

dz=dz-0.5;

return;

}

Основная функция

int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

glutInitWindowSize(500, 500);

glutInitWindowPosition(100, 50);

glutCreateWindow(argv[0]);

glutIdleFunc(Idle);

glutMouseFunc( _mouseclick );

glutMotionFunc(mouseMotion);

glutMouseWheelFunc(mouseWheel);

init();

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutKeyboardFunc(keyboard);

glutMainLoop();

return 0;

}

Результаты работы программ

На рисунке 4 представлен тестовый куб, для которого производилась отладка и тестирование алгоритмов перемещения.

Рис.4. Тестовый куб данных

Кроме того, прежде, чем генерировать текстуру, производилось считывание текстуры из файла. Результат наложения полученной текстуры представлен на рисунке 5.

Рис.5. Тестовый куб данных с наложенными текстурами

Результатом разработанного приложения является куб со сгенерированными текстурами и возможностью его перемещения в пространстве, уменьшения и увеличения. Результат работы представлен на рисунках 6 и 7.

Рис.6. Итоговый куб

Рис.7. Итоговый куб

Заключение

В процессе разработки модели проделаны следующие шаги:

  1. Изучена литература по теме проекта;

  2. Разработан алгоритм решения задачи;

  3. Разработана математическая модель решения задачи;

  4. Разработано приложение:

    1. Осуществлена генерация и инициализация текстур;

    2. Произведено построение изображения;

    3. Реализовано перемещение объекта с помощью мыши и клавиатуры;

  5. Произведено тестирование программы.

Следующими этапами работы на данной моделью может послужить:

  • Генерация текстур с использованием данных SEG-Y-файла, распространенного в среде геофизиков;

  • Переход от упрощенной модели среды горизонтально-слоистой и однородной к модели более детальной;

  • Возможность более подробной детализации пластов при приближении;

  • Осуществление разметки глубины для простоты визуализации и возможности сравнения глубины залегания данных слоев с глубинами залегания основных реперов;

  • Осуществление разрезов и возможность представления доступа к данным внутри куба и их визуализация.

Список литературы
  1. Резяпов Г.И. Сейсморазведка – Учебное пособие, 2011. – 246 с.

  2. Бондарев В.И. Сейсморазведка МОГТ. Часть 3, Екатеринбург: УГГГА, 1996. – 242 с.

  3. Хаттон Л., Уэрдингтон М., Мейкин Дж. Обработка сейсмических данных, пер. с англ. – М.: Мир, 1991. – 216 с.

  4. Барри К.М., Каверс Д.A., Книле C.В. SEG-Y. Рекомендуемые стандарты форматов цифровых лент, 1974. – 122 с.

  5. Васильев Л.А. Графика компьютерной игры на основе OpenGL, М.: Диалог – МИФИ, 2004. - 383 с.

  6. Основы OpenGL OpenGL [Электронный ресурс]: Режим доступа: http://www.codenet.ru/progr/opengl - свободный;

  7. OpenGL. Программирование с использованием OpenGL [Электронный ресурс]: Режим доступа: //www.opengl.org.ru - свободный;

Просмотров работы: 1663