Как сделать куб в программе

4-04-2021, 20:30

Programming

291

OpenGL — это инструмент 3D-программирования, позволяющий создавать сложные трехмерные изображения из простых форм. Из этой статьи вы узнаете, как нарисовать с его поможью простой куб, который можно вращать в в трех измерениях!

Первоначальная установка

Установите OpenGL. Начните с руководства по установке OpenGL на ваш компьютер. Если OpenGL и компилятор С у вас уже есть, можете пропустить этот шаг и перейти к следующему.

Создайте документ. Создайте новый файл в своем любимом редакторе кода и сохраните его как mycube.c

Добавьте #includes. Вот основные директивы #include, которые вам понадобятся. Важно помнить, что директивы для разных операционных систем — разные, а потому выбрать нужно все, чтобы программа была универсальной и ее можно было запустить в любой системе.

Как делать куб в Paint

Добавьте функциональные прототипы и глобальные переменные. Следующим шагом будет объявить функциональные прототипы.

  • Это настройка нашей среды разработки. Важно помнить, что, работая над созданием программ OpenGL, вы должны запрашивать каждый параметр. Поэтому вам нужно хорошо понимать, как будет работать ваша программа и что нужно включить в необходимый вам функционал. В этой строке вы настроили отображение с двойной буферизацией, поддержкой цветов по RGB и z-буферизацией.
  • Двойная буферизация — это прием, позволяющий графическим программам избежать потенциальной проблемы с отображением изображений. Эта проблема может возникнуть в связи с тем, что при каждой перерисовке сцены необходимо сперва очистить дисплей, и только потом можно выводить новую информацию. Без двойной буферизации вы будете наблюдать мигающий эффект по мере того, как экран будет очищаться и зарисовываться снова и снова.
  • Эта проблема имеет простое решение: добавляется второй буфер для отрисовки. Изображение отрисовывается в первом буфере, который и выводится на экран. Следующий кадр будет отрисован уже во втором буфере, после чего кадры поменяются местами. Мы сразу же увидим содержимое второго буфера, а первый буфер, скрытый от нас вторым, будет в это самое время очищен и заполнен третьим кадром. И так далее.
  • Кроме того, вам понадобится поддержка цветов по схеме RGB.
  • Z-буферизация — это, собственно, то, что и создает эффект трехмерности. OpenGL использует трехмерную пространственную систему координат с осями x, y и z. Приближение объекта к зрителю и удаление его от зрителя — это изменение дистанции по оси z.

Создайте окно. Теперь нужно создать окно, в котором и будет отрисован куб. Назовем его просто и без изысков — «Awesome Cube», то есть «Шикарный куб».

Как сделать простой кубик в программе GIMP

Активируйте тест глубины. OpenGL — язык довольно строгий, подразумевающий, что никакие специальные функции не активированы. Нам же, чтобы должным образом отобразить трехмерный объект с помощью z-буфера, необходим тест глубины. Изучая OpenGL дальше, вы откроете для себя еще много функций, которые нужно активировать (освещение, текстуры и так далее).

Добавьте функции обратного вызова. Вот функции обратного вызова для созданных нами ранее прототипов. Эти функции будут вызываться через основной цикл программы. Функция display будет перерисовывать сцену исходя из изменения значений переменных, которые были сделаны после прошлого их вызова. Функция specialKeys, в свою очередь, позволит нам взаимодействовать с программой.

Запустите MainLoop. Последний шаг настройки — запуск MainLoop, основного цикла, с помощью которого мы будем вызвать основную функцию, обеспечивая анимацию и взаимодействие с пользователем, пока программа не будет закрыта.

Функция display()

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

Добавьте функцию glClear(). Первым делом, работая с этой функцией, нам надо очистить цвет и z-буфер. Без этого под новым рисунком будет виднеться старый, а нарисованные программой объекты будут расположены неправильно.

  • Начните с передней стороны куба. Позже мы добавим цвет к каждой из шести граней.
  • Первое — во скольких измерениях вы будете работать? Цифра 3 в in glVertex3f указывает на три измерения. Впрочем, можно работать и в 2, и в 4 измерениях. Буква f, в свою очередь, указывает на то, что мы работаем с цифрами с плавающей запятой. Впрочем, тут вы можете использовать и данные типов integer, double или short.
  • Заметьте, что все точки задаются против часовой стрелки. Пока это еще не очень важно, но когда вы начнете работать над освещением, текстурирование, обработкой нецелевых граней, то привычка прописывать все против часовой стрелки вам очень пригодится.
  • Добавьте вершины между линиями glBegin() и glEnd().
  • Вызывая glColor3f(), мы отрисовываем каждую вершину от указанной точки в указанном цвете. Иными словами, если все четыре вершины должны быть красными, то просто один-единственный раз задайте значение цвета до вызова команд glVertex3f(), и все они будут красными.
  • На примере заданной ниже передней стороны можно увидеть, как задается новый цвет каждой вершины. Когда вы это делаете, то можете познакомиться с интересной особенностью цветов OpenGL. Так как каждая вершина многоугольника имеет свой цвет, OpenGL автоматически смешивает цвета! Код, размещенный дальше, показывает, как создать четыре вершины с одинаковым цветом.
  • Обратите внимание на две последние строки. Это функции glFlush(); и glutSwapBuffers();, дающие эффект двойной буферизации, о котором было рассказано выше.
Читайте также:
Как подключиться удаленно программы

Интерактивность программы

  • Именно ради этой функции были объявлены глобальные переменные rotate_x и rotate_y. Когда вы будете нажимать на клавиши-стрелки «влево» и «вправо», значение rotate_y будет увеличиваться или уменьшаться на пять градусов. Аналогичным образом будем меняться и значение rotate_x, но уже при нажатии на клавиши-стрелки «вверх» и «вниз».
  • Обратите внимание, что синтаксис glRotatef(), который схож с синтаксисом glColor3f() и glVertex3f(), но всегда требует указания четырех параметров. Первый — угол вращения в градусах. Следующие три — оси, по которым идет вращение, в порядке x, y, z. Пока что нам нужно вращать куб по двум осям, x и у.
  • Для всех трансформаций, которые мы задаем в программе, требуются аналогичные строки. По сути, мы представляем вращение объекта по оси х как изменение значения rotate_x, а вращение по оси у — как изменение значения rotate_y. Впрочем, OpenGL объединит все в одну матрицу трансформации. Всякий раз, вызывая функцию display, вы будете создавать матрицу трансформации, и glLoadIdentity() позволит начинать каждый раз с новой матрицы.
  • Другие функции трансформации, которым вы могли воспользоваться, — это glTranslatef() и glScalef(). Они аналогичны glRotatef(), за исключением того, что требуют лишь трех параметров: значения x, y и z для изменения и масштабирования объекта.
  • Чтобы все отображалось правильно, когда все три трансформации применены к одному объекту, нужно задавать трансформации в соответствующем порядке, а именно glTranslate, glRotate, glScale — и никогда иначе. OpenGL трансформирует объект, читая программу снизу вверх. Чтобы лучше это понять, представьте, как куб 1x1x1 будет выглядеть после всех трансформаций, если бы OpenGL применял их в том порядке, как те указаны (сверху вниз), а потом подумайте, как OpenGL обработает куб, читая инструкции снизу вверх.

Добавьте следующие команды для двухкратного масштабирования куба по осям х и у, для вращения куба на 180 градусов по оси у, а также для перемещения куба на 0,1 по оси х. Убедитесь, что все соответствующие команды, включая ранее заданные команды glRotate(), указаны в правильном порядке. Если боитесь ошибиться, посмотрите финальную версию программы в конце статьи.

Скомпилируйте и запустите код. Допустим, в качестве компилятора вы используете gcc, поэтому введите в терминал следующие команды:

Проверьте финальный код. Вот финальный код, созданный автором статьи, в котором не переведены комментарии.

Читайте также:
Бонусные программы авиакомпаний их виды

Источник: vripmaster.com

Понятие как форма мышления

Понятие как форма мышления

Множество объектов окружают людей и каждый из них можно описать, используя ряд признаков объекта.

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

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

Для того, чтобы отразить совокупность признаков отдельного объекта или множества однородных объектов можно использовать понятие.

Например, понятие «лист» отражает в себе все существенны признаки всех существующих листов бумаги, поэтому понятие лист бумаги нельзя спутать с понятием лист дерева.

Каждый объект имеет свое имя и мы пользуемся именами в устной речи и в письме. Также понятиями мы пользуемся, когда думаем о чем-либо. Именно поэтому форму мышления и понятие считают одним и тем же.

В связи с тем, что все окружающие человека предметы состоят из отдельных частей, т.е. являются сложными, то и исследуются человеком понятия путем анализа, синтеза.

Понятия образуются при помощи применения логических приемов формирования понятий, к которым относят анализ, синтез, абстрагирование, сравнение.

Рассмотрим способы образования понятий в таблице 1.

В целом понятие образуются поле обобщения существенных признаков объекта исследования, присущих классу однородных объектов, в том числе обобщения информации о свойствах и отношениях различных объектов.

Практическая работа: Конструируем и исследует графические объекты

Практическую работу необходимо выполнить в графическом редакторе Paint, который есть в любом офисном пакете. Удобство использования данного графического редактора для изучения данной темы подчеркивается тем, что именно в Paint довольно легко рисовать объемные фигуры.

Примерами конструкций могут служить любые фигуры, которые можно сложить из кубиков, рассмотрим их на рисунке 1.

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

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

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

Сначала просто нажимаем на фигуру квадрат и на чистом листе квадрат формируем необходимого размера. Изменить размер квадрата можно выделив наш квадрат кнопочкой нажав на кнопочку «Выделить – прозрачное выделение» (рисунок 2) , а затем на кнопочку «Изменить размер».

В открывшемся окошке редактируем размер квадрата.

Далее выделяем квадрат прозрачным выделением, вызываем правой кнопкой мыши меню и наживаем «Копировать». Также можно воспользоваться основным верхним меню программы для копирования объекта.

Затем нажимаем на «Вставить».

В этот момент получаем второй квадрат по размерам идентичный первому.

Передвигаем квадрат так, чтобы они стояли друг за другом.

Далее стираем лишние линии, которые не видны за первым квадратом и получаем незаконченный куб.

Стирать ненужные линии можно ластиком, толщина ластика также может регулироваться при помощи кнопочки «толщина»

Чтобы движения при стирании были более четкими можно левой рукой зажать клавишу Ctrl , а правой стирать лишние линии.

Теперь осталось только дорисовать ребрышки куба. Этому поможет также клавиша Ctrl , которую необходимо нажать, когда будете проводить линию от угла одного квадрата к углу другого.

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

Читайте также:
Программа барс медицина инструкция по применению

Куб готов и его надо закрасить, используя в меню инструментов кнопочку «Заливка»

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

Значок «Заливка» находится в инструментах. Выбираем цвет заливки, причем внимательно следим. Основной цвет заливки находится в панели инструментов под названием «Цвет 1»

Заготовку «КУБ» видно на рисунке 9.

Далее необходимо скопировать этот куб и вставить то количество, которое необходимо, чтобы сделать фигуру. При необходимости, размер куба можно уменьшить.

Проделываем процедуру «Копировать – вставить» столько раз, сколько нужно.

Теперь кубики необходимо поставить друг на друга так, чтоб получилась необходимая фигура.

Помним, что фигуру начинаем собирать сзади, снизу и слева.

Для этого выделяем отдельный кубик и перемещаем его в нужное место.

Сначала я собираю кубики сзади.

Если кубиков оказалось мало, то последний не установленный в конструкцию кубик копируем снова.

После того, как фигуру построили, фигуру можно уменьшить или увеличить, воспользовавшись кнопочкой «Изменить размер»

Затем работу подписываем: Фамилию, имя, класс и сохраняем через главное меню, как показано на рисунке 14.

На одном листочке можно сконструировать несколько фигур в зависимости от работы воображения.

Источник: kozhevnikovamn.ru

Уроки OpenGL. Часть 4. Создание 3D-объектов.

Продолжается цикл статей, посвященных работе с библиотекой OpenGL на нашем сайте, и, наконец, пришло время подключить третье измерение в наших экспериментах. Сегодня мы создадим в пространстве куб, а также добавим функцию вращения 3D-фигуры вокруг осей x и y. Как всегда разберем все по шагам, а в конце статьи я выложу полный проект с реализованным примером.

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

Что из себя представляет куб? Ответ прост — 6 граней (квадратов) и 8 вершин ) Именно так мы и будем строить фигуру — построим по отдельности 6 его граней, а эта задача для нас уже не представляет никакой сложности. Но прежде, чем приступать к рисованию, добавим в функцию initializeGL() следующее:

glShadeModel(GL_FLAT); glEnable(GL_CULL_FACE);

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

Вторая функция устанавливает режим, когда строятся только внешние поверхности фигур. И вот тут есть один важный момент. Для корректного отображения объекта вершины в массиве вершин должны задаваться против(!) часовой стрелки.

Собственно, с приготовлениями на этом заканчиваем, начинаем отрисовку. Нам понадобятся три массива:

GLfloat cubeVertexArray[8][3]; GLfloat cubeColorArray[8][3]; GLubyte cubeIndexArray[6][4];

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

cubeVertexArray[0][0] = 0.0; cubeVertexArray[0][1] = 0.0; cubeVertexArray[0][2] = 1.0; cubeVertexArray[1][0] = 0.0; cubeVertexArray[1][1] = 1.0; cubeVertexArray[1][2] = 1.0; cubeVertexArray[2][0] = 1.0; cubeVertexArray[2][1] = 1.0; cubeVertexArray[2][2] = 1.0; cubeVertexArray[3][0] = 1.0; cubeVertexArray[3][1] = 0.0; cubeVertexArray[3][2] = 1.0; cubeVertexArray[4][0] = 0.0; cubeVertexArray[4][1] = 0.0; cubeVertexArray[4][2] = 0.0; cubeVertexArray[5][0] = 0.0; cubeVertexArray[5][1] = 1.0; cubeVertexArray[5][2] = 0.0; cubeVertexArray[6][0] = 1.0; cubeVertexArray[6][1] = 1.0; cubeVertexArray[6][2] = 0.0; cubeVertexArray[7][0] = 1.0; cubeVertexArray[7][1] = 0.0; cubeVertexArray[7][2] = 0.0; cubeColorArray[0][0] = 0.0; cubeColorArray[0][1] = 0.0; cubeColorArray[0][2] = 1.0; cubeColorArray[1][0] = 0.6; cubeColorArray[1][1] = 0.98; cubeColorArray[1][2] = 0.6; cubeColorArray[2][0] = 1.0; cubeColorArray[2][1] = 0.84; cubeColorArray[2][2] = 0.8; cubeColorArray[3][0] = 0.8; cubeColorArray[3][1] = 0.36; cubeColorArray[3][2] = 0.36; cubeColorArray[4][0] = 1.0; cubeColorArray[4][1] = 0.27; cubeColorArray[4][2] = 0.0; cubeColorArray[5][0] = 0.82; cubeColorArray[5][1] = 0.13; cubeColorArray[5][2] = 0.56; cubeColorArray[6][0] = 0.54; cubeColorArray[6][1] = 0.17; cubeColorArray[6][2] = 0.89; cubeColorArray[7][0] = 0.0; cubeColorArray[7][1] = 1.0; cubeColorArray[7][2] = 1.0;

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru