старший преподаватель, Бухарский государственный университет, Республика Узбекистан, г. Бухара
Функции и элементы OpenGL, используемые для построения основных форм в C#
АННОТАЦИЯ
В статье показаны функции и элементы, используемые для построения основных форм и реализации их преобразований в C#.
ABSTRACT
The article shows the functions and elements used to build basic forms and implement their transformations.
Ключевые слова: OpenGL, рисование, линия, вершины, элемент управления.
Keywords: OpenGL, drawing, line, vertices, control.
Рисование линии в OpenGL основано на использовании вершин, т.е. если вы хотите нарисовать линию, вы должны определить две вершины (начало и конец), линия будет нарисована в соответствии с выбранным вами режимом соединения с учетом каждой из определены вершины (GL_LINESGL_POLYGON и т. д.), то, если мы определим четыре вершины и выберем в качестве режима соединения «GL_LINES», это может привести к двухстрочной обводке, но, если вы выберете «GL_QUADS», это приведет к квадрату (рис.1.) [1].
Рисунок 1. Рисование линии
Итак, мы продолжим. Первое, что мы делаем, это добавляем наш элемент управления SimpleOpenGlControl, который упрощает нашу работу, поскольку нам не нужно выполнять ряд сложных шагов для инициализации рабочей области.
El SimpleOpenGlControl принадлежит Tao Framework, и если мы хотим его использовать, мы должны добавить ссылку на Tao.Platform.Windows (рис.2).
Рисунок 2. Установка ссылки на Tao.Platform.Windows
SimpleOpenGlControl
Шаг 1:
общедоступная форма Form1 ()
{
InitializeComponent ();
int height = simpleOpenGlControl1.Height;
int width = simpleOpenGlControl1.Width;
simpleOpenGlControl1.InitializeContexts ();
Gl .glViewport (0, 0, ширина, высота);
Gl .glMatrixMode ( Gl .GL_PROJECTION);
Gl .glLoadIdentity ();
Glu .gluPerspective (45.0f, ( двойная ) ширина / ( двойная ) высота, 0,01f, 5000.0f);
}
двойной xrot, yrot, zrot = 0;
Инициализируйте рабочую область и переменные, которые будут управлять вращением нашей фигуры.
SimpleOpenGlControl1.InitializeContexts () Инициализируйте контекст управления или рабочую область.
Gl .glViewport () .- Рабочая область.
Gl .glMatrixMode () .- Укажите, какая матрица является текущей матрицей Gl
.GL_PROJECTION .- Определяет свойства камеры, которая просматривает объекты
Gl .GL_MODELVIEW .- Матрица определяет, как ваши объекты преобразуются Glu .gluPerspective .- настраиваем матрицу перспективной проекции
Шаг 2:
Теперь мы готовы приступить к рисованию. Для этого воспользуемся событием «Paint» элемента управления.
private void simpleOpenGlControl1_Paint (отправитель объекта, PaintEventArgs e) // событие OnPaint
{
Gl .glClear ( Gl .GL_COLOR_BUFFER_BIT |Gl .GL_DEPTH_BUFFER_BIT); // очищаем буферы до предустановленных значений
Gl .glMatrixMode ( Gl .GL_MODELVIEW);
Gl .glLoadIdentity (); // загружаем единичную матрицу
Gl .glTranslated (0, 0, -4); // перемещает нашу фигуру (x, y, z)
Gl .glRotated (xrot + = 0.5, 1, 0, 0); // вращаемся по x
Gl .glRotated (yrot + = 0.3, 0, 1, 0); // вращаемся по оси y
Gl .glRotated (zrot + = 0.2, 0, 0, 1); // вращаемся по оси z
// вид 1
Gl .glBegin ( Gl .GL_LINE_LOOP); // начинаем рисовать GL_LINE_LOOP - это режим подключения
Gl .glColor3ub (255, 0, 255);
Gl .glVertex3d (1, 1, -1);
Gl .glVertex3d (1, -1, -1);
Gl .glVertex3d (-1, -1, -1);
Gl .glVertex3d (-1, 1, -1);
Gl .glEnd ();
// вид 2
Gl .glBegin ( Gl .GL_LINE_LOOP);
Gl .glColor3ub (0, 255, 255);
Gl .glVertex3d (-1, -1, -1);
Gl .glVertex3d (1, -1, -1);
Gl .glVertex3d (1, -1, 1);
Gl .glVertex3d (-1, -1, 1);
Gl .glEnd ();
// вид 3
Gl .glBegin ( Gl .GL_LINE_LOOP);
Gl .glColor3ub (255, 255, 0);
Gl .glVertex3d (-1, 1, -1);
Gl .glVertex3d (-1, -1, -1);
Gl .glVertex3d (-1, -1, 1);
Gl .glVertex3d (-1, 1, 1);
Gl .glEnd ();
// вид 4
Gl .glBegin ( Gl .GL_LINE_LOOP);
Gl .glColor3ub (0, 0, 255);
Gl .glVertex3d (1, 1, 1);
Gl .glVertex3d (1, -1, 1);
Gl .glVertex3d (1, -1, -1);
Gl .glVertex3d (1, 1, -1);
Gl .glEnd ();
// вид 5
Gl .glBegin ( Gl .GL_LINE_LOOP);
Gl .glColor3ub (0, 255, 0);
Gl .glVertex3d (-1, 1, -1);
Gl .glVertex3d (-1, 1, 1);
Gl .glVertex3d (1, 1, 1);
Gl .glVertex3d (1, 1, -1);
Gl .glEnd ();
// вид 6
Gl .glBegin (Gl .GL_LINE_LOOP);
Gl .glColor4d (255, 0, 0, 100);
Gl .glVertex3d (-1, 1, 1);
Gl .glVertex3d (-1, -1, 1);
Gl .glVertex3d (1, -1, 1);
Gl .glVertex3d (1, 1, 1); Gl .glEnd ();
}
Gl .glTranslated (0, 0, -4); // перемещает нашу фигуру (x, y, z)
Gl .glRotated (xrot + = 0.5, 1, 0, 0); // вращаемся по x
Gl .glRotated (yrot + = 0.3, 0, 1, 0); // вращаемся по оси y
Gl .glRotated (zrot + = 0.2, 0, 0, 1); // вращаемся по оси z
Применяет матрицу вращения и перевода к нашей фигуре.
Список литературы:
- Атаева.Г.И. Технологический подход к образовательному процессу// Academy. № 6(33), 2018. С. 91-92.
- Хаятов Х.У, Жалолова Н.Х. О нахождении нормы функционала погрешности интерполяционных формул типа эрмита в периодическом пространстве // Проблемы вычислительной и прикладной математики. — 2017. — № 4 (10). — С. 98-103.
- Хаятов Х. У., Жураева Л. И., Жураев З. Ш. Основные понятия теории нечетких множеств // Молодой ученый. — 2019. — № 25 (263). — С. 41-44.
- Хаятов Х. У., Хайдаров О. C # dasturlash tilida fayl va kataloglar bilan ishlash// «МАТЕМАТИКА, ФИЗИКА ВА АХБОРОТ ТЕХНОЛОГИЯЛАРИНИНГ ДОЛЗАРБ МУАММОЛАРИ» мавзусидаги Республика миқёсидаги онлайн илмий-амалий анжумани. ТЕЗИСЛАР ТЎПЛАМИ. Бухоро 2020, 15 апрель 319-321с.