МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра ЗІ
З В І Т
До лабораторної роботи №6
з курсу: «Програмування комп’ютерної графіки»
на тему: «Побудова рухомих зображень»
Варіант №9
Мета роботи - набути практичних навиків в складанні програм для побудови зображень на екрані комп’ютера за допомогою засобів мови С# та бібліотеки OpenGL.
Завдання:
Створити на екрані комп’ютера графічне вікно і сформувати в ньому рухоме зображення. Вікно розмістити в верхньому правому куті екрану. Навести межі вікна. Параметри рухомого зображення визначені в таблиці 3. Параметри зображення задані в пікселах. Варіант завдання визначає викладач. Графік і вікно з рухомим зображенням повинні бути присутні на екрані одночасно, причому вікно не має перекривати графік (рис.1).
№ варіанту
Структура зображення
Пояснення
9
Замальований восьмикутник котиться по видимому круговому подібному контуру. Зміна центрів обертання в точці А. Діаметр вписаного у восьмикутник кола та відстань між колами становить a. Радіуси кіл становлять R. Кольори восьмикутника і контуру різні.
Параметри : a=20, R=80
Текст програми:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Tao.FreeGlut;
using Tao.OpenGl;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
OnGl.InitializeContexts();
}
private void OnGl_Load(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
Gl.glClearColor(255, 255, 255, 1);
Gl.glViewport(0, 0, OnGl.Width, OnGl.Height);
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
if ((float)OnGl.Width <= (float)OnGl.Height)
{
Glu.gluOrtho2D(0.0, 25.0 * (float)OnGl.Height / (float)OnGl.Width, 0.0, 25.0);
}
else
{
Glu.gluOrtho2D(0.0, 20.0 * (float)OnGl.Width / (float)OnGl.Height, 0.0, 20.0);
}
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
}
private void button1_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glColor3f(0.3f, 0.5f, 0.3f);
Gl.glBegin(Gl.GL_POINTS);
Gl.glEnd();
Gl.glFlush();
OnGl.Invalidate();
Gl.glBegin(Gl.GL_POINTS);
Gl.glEnd();
Gl.glEnable(Gl.GL_POINT_SMOOTH);
Gl.glPointSize(4);
Gl.glBegin(Gl.GL_POINTS);
Gl.glVertex2d(5, 5);
Gl.glVertex2d(5, 15);
Gl.glVertex2d(15, 15);
Gl.glVertex2d(15, 5);
Gl.glEnd();
Gl.glDisable(Gl.GL_POINT_SMOOTH);
}
private void button3_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glColor3f(0.6f, 0.3f, 0.2f);
Gl.glEnable(Gl.GL_LINE_SMOOTH);
Gl.glBegin(Gl.GL_LINE_LOOP);
Gl.glEnd();
Gl.glFlush();
OnGl.Invalidate();
Gl.glBegin(Gl.GL_LINE_LOOP);
Gl.glEnd();
Gl.glEnable(Gl.GL_LINE_STIPPLE);
Gl.glLineWidth(3);
Gl.glLineStipple(1, 58360);
Gl.glBegin(Gl.GL_LINE_LOOP);
Gl.glVertex2d(5, 5);
Gl.glVertex2d(5, 15);
Gl.glVertex2d(5, 15);
Gl.glVertex2d(15, 15);
Gl.glVertex2d(15, 15);
Gl.glVertex2d(15, 5);
Gl.glVertex2d(15, 5);
Gl.glVertex2d(5, 5);
Gl.glEnd();
Gl.glDisable(Gl.GL_LINE_STIPPLE);
}
private void button4_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glColor3f(1.0f, 0.0f, 1.0f);
Gl.glBegin(Gl.GL_LINES);
Gl.glEnd();
Gl.glFlush();
OnGl.Invalidate();
Gl.glBegin(Gl.GL_LINES);
Gl.glEnd();
Gl.glLineWidth(5);
Gl.glBegin(Gl.GL_LINES);
Gl.glVertex2d(1,1);
Gl.glVertex2d(6,4);
Gl.glVertex2d(6,4);
Gl.glVertex2d(1,6);
Gl.glVertex2d(1,6);
Gl.glVertex2d(15,6);
Gl.glVertex2d(15,6);
Gl.glVertex2d(5,8);
Gl.glVertex2d(5,8);
Gl.glVertex2d(10,10);
Gl.glVertex2d(10,10);
Gl.glVertex2d(1,10);
Gl.glEnd();
Gl.glDisable(Gl.GL_LINE_SMOOTH);
}
private void button5_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glColor3f(0.0f, 1.0f, 0.0f);
Gl.glEnable(Gl.GL_LINE_SMOOTH);
Gl.glFlush();
OnGl.Invalidate();
Gl.glLineWidth(2);
Gl.glBegin(Gl.GL_LINE_LOOP);
Gl.glVertex2d(4.5, 3);
Gl.glVertex2d(7.5, 12);
Gl.glVertex2d(7.5, 12);
Gl.glVertex2d(3, 15);
Gl.glVertex2d(3, 15);
Gl.glVertex2d(4.5, 18);
Gl.glVertex2d(4.5, 18);
Gl.glVertex2d(22.5, 18);
Gl.glVertex2d(22.5, 18);
Gl.glVertex2d(25.5, 13.5);
Gl.glVertex2d(25.5, 13.5);
Gl.glVertex2d(25.5,6);
Gl.glVertex2d(25.5, 6);
Gl.glVertex2d(22.5, 3);
Gl.glVertex2d(22.5, 3);
Gl.glVertex2d(14.5, 10.5);
Gl.glVertex2d(14.5, 10.5);
Gl.glVertex2d(4.5, 3);
Gl.glEnd();
Gl.glDisable(Gl.GL_LINE_SMOOTH);
}
private void button6_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
OnGl.Invalidate();
Gl.glFlush();
Gl.glEnable(Gl.GL_POLYGON_SMOOTH);
Gl.glLineWidth(3);
Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL);
Gl.glBegin(Gl.GL_TRIANGLES);
Gl.glColor3f(0.2f, 0.6f, 0.4f);
Gl.glVertex2d(14.5,10.5);
Gl.glVertex2d(4.5,3);
Gl.glVertex2d(7.5,12);
Gl.glEnd();
Gl.glBegin(Gl.GL_TRIANGLE_STRIP);
Gl.glColor3f(0.2f, 0.6f, 0.5f);
Gl.glVertex2d(3, 15);
Gl.glVertex2d(4.5, 18);
Gl.glVertex2d(7.5, 12);
Gl.glColor3f(1.0f, 1.0f, 0.7f);
Gl.glVertex2d(22.5, 18);
Gl.glColor3f(0.0f, 1.0f, 1.0f);
Gl.glVertex2d(14.5, 10.5);
Gl.glEnd();
Gl.glBegin(Gl.GL_TRIANGLE_FAN);
Gl.glVertex2d(14.5, 10.5);
Gl.glColor3f(0.0f, 1.0f, 1.0f);
Gl.glVertex2d(22.5, 18);
Gl.glColor3f(0.3f, 0.7f, 0.0f);
Gl.glVertex2d(25.5, 13.5);
Gl.glColor3f(0.8f, 1.0f, 0.5f);
Gl.glVertex2d(25.5, 6);
Gl.glColor3f(0.1f, 0.2f, 0.0f);
Gl.glVertex2d(22.5, 3);
Gl.glEnd();
Gl.glDisable(Gl.GL_POLYGON_SMOOTH);
}
private void button9_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
OnGl.Invalidate();
Gl.glBegin(Gl.GL_POLYGON);
Gl.glEnable(Gl.GL_POLYGON_SMOOTH);
Gl.glColor3f(1.0f, 0.6f, 0.0f);
Gl.glVertex2d(20, 15);
Gl.glVertex2d(20, 5.5);
Gl.glVertex2d(9.5, 5.5);
Gl.glVertex2d(9.5, 15);
Gl.glEnd();
Gl.glDisable(Gl.GL_POLYGON_SMOOTH);
}
private void button10_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glShadeModel(Gl.GL_FLAT);
OnGl.Invalidate();
Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL);
Gl.glBegin(Gl.GL_QUAD_STRIP);
Gl.glColor3f(0.0f, 1.0f, 0.0f);
Gl.glVertex2d(3, 16.5);
Gl.glVertex2d(6, 10.5);
Gl.glVertex2d(21, 13.5);
Gl.glVertex2d(15, 10.5);
Gl.glColor3f(1.0f, 0.0f, 0.0f);
Gl.glVertex2d(21, 3);
Gl.glVertex2d(15, 4.5);
Gl.glColor3f(1.0f, 0.0f, 0.1f);
Gl.glVertex2d(13.5, 1.5);
Gl.glVertex2d(12, 4.5);
Gl.glColor3f(0.0f, 0.0f, 1.0f);
Gl.glVertex2d(3, 1.5);
Gl.glVertex2d(7.5, 7.5);
Gl.glEnd();
Gl.glShadeModel(Gl.GL_SMOOTH);
Gl.glEnd();
}
private void button11_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL);
Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_POINT);
OnGl.Invalidate();
Gl.glBegin(Gl.GL_QUAD_STRIP);
Gl.glColor3f(0.0f, 1.0f, 0.0f);
Gl.glVertex2d(3, 16.5);
Gl.glVertex2d(6, 10.5);
Gl.glVertex2d(21, 13.5);
Gl.glVertex2d(15, 10.5);
Gl.glColor3f(1.0f, 0.0f, 0.0f);
Gl.glVertex2d(21, 3);
Gl.glVertex2d(15, 4.5);
Gl.glColor3f(1.0f, 0.0f, 0.1f);
Gl.glVertex2d(13.5, 1.5);
Gl.glVertex2d(12, 4.5);
Gl.glColor3f(0.0f, 0.0f, 1.0f);
Gl.glVertex2d(3, 1.5);
Gl.glVertex2d(7.5, 7.5);
Gl.glEnd();
}
private void button12_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_FILL);
Gl.glPolygonMode(Gl.GL_BACK, Gl.GL_LINE);
OnGl.Invalidate();
Gl.glBegin(Gl.GL_QUAD_STRIP);
Gl.glColor3f(0.0f, 1.0f, 0.0f);
Gl.glVertex2d(3, 16.5);
Gl.glVertex2d(6, 10.5);
Gl.glVertex2d(21, 13.5);
Gl.glVertex2d(15, 10.5);
Gl.glColor3f(1.0f, 0.0f, 0.0f);
Gl.glVertex2d(21, 3);
Gl.glVertex2d(15, 4.5);
Gl.glColor3f(1.0f, 0.0f, 0.1f);
Gl.glVertex2d(13.5, 1.5);
Gl.glVertex2d(12, 4.5);
Gl.glColor3f(0.0f, 0.0f, 1.0f);
Gl.glVertex2d(3, 1.5);
Gl.glVertex2d(7.5, 7.5);
Gl.glEnd();
}
private void button13_Click(object sender, EventArgs e)
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_LINE);
OnGl.Invalidate();
Gl.glBegin(Gl.GL_QUAD_STRIP);
Gl.glColor3f(0.0f, 1.0f, 0.0f);
Gl.glVertex2d(3, 16.5);
Gl.glVertex2d(6, 10.5);
Gl.glVertex2d(21, 13.5);
Gl.glVertex2d(15, 10.5);
Gl.glColor3f(1.0f, 0.0f, 0.0f);
Gl.glVertex2d(21, 3);
Gl.glVertex2d(15, 4.5);
Gl.glColor3f(1.0f, 0.0f, 0.1f);
Gl.glVertex2d(13.5, 1.5);
Gl.glVertex2d(12, 4.5);
Gl.glColor3f(0.0f, 0.0f, 1.0f);
Gl.glVertex2d(3, 1.5);
Gl.glVertex2d(7.5, 7.5);
Gl.glEnd();
}
private void Exit_Click_1(object sender, EventArgs e)
{
Application.Exit();
}
}
}
Результат виконання програми
/
Висновок:
На цій лабораторній роботі я навчився використовувати елементи бібліотеки OpenGl для побудови рухомих зображень.