Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 OpenTK;
- using OpenTK.Graphics.OpenGL;
- using OpenTK.Audio;
- using OpenTK.Audio.OpenAL;
- using OpenTK.Input;
- namespace Lab5
- {
- public partial class Form1 : Form
- {
- double[,] m;
- int ir;
- float AngleX = 30;
- float AngleY = 30;
- float AngleZ = 0;
- //private OpenTK.GLControl glControl1;
- const float AngleDl = 5;
- PolygonMode mode = PolygonMode.Line;//Выбранная грань не будет закрашиваться
- double x, y, z;
- private void KeyDown(object sender, KeyEventArgs e)
- {
- switch (e.KeyCode)
- {
- case Keys.W:
- AngleX += AngleDl;
- break;
- case Keys.S:
- AngleX -= AngleDl;
- break;
- case Keys.A:
- AngleY += AngleDl;
- break;
- case Keys.D:
- AngleY -= AngleDl;
- break;
- case Keys.Q:
- AngleZ += AngleDl;
- break;
- case Keys.E:
- AngleZ -= AngleDl;
- break;
- }
- glControl1.Invalidate();
- }
- private void Paint(object sender, PaintEventArgs e)
- {
- GL.ClearColor(0.5f, 0.5f, 0.75f, 1.0f); // цвет фона
- // очистка буферов цвета и глубины
- GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
- // поворот изображения
- GL.LoadIdentity();
- GL.Rotate(AngleX, 1.0, 0.0, 0.0);
- GL.Rotate(AngleY, 0.0, 1.0, 0.0);
- GL.Rotate(AngleZ, 0.0, 0.0, 1.0);
- // формирование изображения
- GL.Begin(BeginMode.Lines);
- GL.Color3(1f, 0f, 0f); GL.Vertex3(-1f, 0f, 0f); GL.Vertex3(1f, 0f, 0f);
- GL.Color3(0f, 1f, 0f); GL.Vertex3(0f, -1f, 0f); GL.Vertex3(0f, 1f, 0f);
- GL.Color3(0f, 0f, 1f); GL.Vertex3(0f, 0f, -1f); GL.Vertex3(0f, 0f, 1f);
- GL.End();
- float ak;
- ak = 0.5f;
- // формирование изображения ЧЕТЫРЕХУГОЛЬНИКА
- GL.Begin(BeginMode.Lines);
- GL.Color3(1f, 1f, 1f);
- // первый четырехугольник
- GL.Vertex3(0.0, 0.0, 0);
- GL.Vertex3(0.0, ak, 0);
- GL.Vertex3(-ak, 0.0, 0);
- GL.Vertex3(-ak, ak, 0);
- GL.Vertex3(-ak, ak, 0);
- GL.Vertex3(0, ak, 0);
- GL.Vertex3(-ak, 0, 0);
- GL.Vertex3(0.0, 0.0, 0);
- GL.End();
- GL.Begin(BeginMode.Lines);
- GL.Color3(1f, 1f, 1f);
- // второй четырехугольник
- GL.Vertex3(0.0, 0.0, ak);
- GL.Vertex3(0.0, ak, ak);
- GL.Vertex3(-ak, 0.0, ak);
- GL.Vertex3(-ak, ak, ak);
- GL.Vertex3(-ak, ak, ak);
- GL.Vertex3(0, ak, ak);
- GL.Vertex3(-ak, 0, ak);
- GL.Vertex3(0.0, 0.0, ak);
- GL.End();
- // соединение четырехугольник
- GL.Begin(BeginMode.Lines);
- GL.Color3(1f, 1f, 1f);
- GL.Vertex3(0.0, 0.0, ak);
- GL.Vertex3(0.0, 0, 0);
- GL.Vertex3(0, ak, ak);
- GL.Vertex3(0, ak, 0);
- GL.Vertex3(-ak, 0.0, ak);
- GL.Vertex3(-ak, 0, 0);
- GL.Vertex3(-ak, ak, ak);
- GL.Vertex3(-ak, ak, 0);
- GL.End();
- // для приближения
- m = new double[4, 5];
- ir = 0;
- //GL.LineWidth(3f);
- GL.Begin(BeginMode.Lines);
- GL.Color3(0f, 0f, 0f);
- GL.Vertex3(0.0, ak, 0);
- GL.Vertex3(-ak, ak, ak);
- GL.Vertex3(0.0, ak, 0);
- GL.Vertex3(0, 0, ak);
- GL.Vertex3(0, 0, ak);
- GL.Vertex3(-ak, 0, 0);
- GL.End();
- GL.PolygonMode(MaterialFace.FrontAndBack, mode); //Режим отображения
- m[1, 1] = -ak;
- m[2, 1] = 0;
- m[3, 1] = 0;
- m[1, 2] = -ak;
- m[2, 2] = ak;
- m[3, 2] = ak;
- m[1, 3] = 0;
- m[2, 3] = 0;
- m[3, 3] = ak;
- m[1, 4] = 0;
- m[2, 4] = ak;
- m[3, 4] = 0;
- binar();
- // завершение формирования изображения
- GL.Flush();
- GL.Finish();
- glControl1.SwapBuffers();
- }
- private void binar()
- {
- double u, w;
- int nu, nw; //nx ny
- nu = 10;
- nw = 10;
- GL.Color3(0f, 0f, 0f);
- ir = 0;
- for (int iw = 0; iw < nw; ++iw)
- {
- GL.Begin(BeginMode.LineStrip);
- for (int iu = 0; iu <= nu; ++iu)
- {
- u = iu * 0.1f;
- w = iw * 0.1f;
- x = m[1, 1] * (1 - u) * (1 - w) + m[1, 2] * (1 - u) * w + m[1, 3] * u * (1 - w) + m[1, 4] * u * w;
- y = m[2, 1] * (1 - u) * (1 - w) + m[2, 2] * (1 - u) * w + m[2, 3] * u * (1 - w) + m[2, 4] * u * w;
- z = m[3, 1] * (1 - u) * (1 - w) + m[3, 2] * (1 - u) * w + m[3, 3] * u * (1 - w) + m[3, 4] * u * w;
- GL.Vertex3(x, y, z);
- w = w + 0.1f;
- x = m[1, 1] * (1 - u) * (1 - w) + m[1, 2] * (1 - u) * w + m[1, 3] * u * (1 - w) + m[1, 4] * u * w;
- y = m[2, 1] * (1 - u) * (1 - w) + m[2, 2] * (1 - u) * w + m[2, 3] * u * (1 - w) + m[2, 4] * u * w;
- z = m[3, 1] * (1 - u) * (1 - w) + m[3, 2] * (1 - u) * w + m[3, 3] * u * (1 - w) + m[3, 4] * u * w;
- GL.Vertex3(x, y, z);
- }
- GL.End();
- }
- }
- private void Load(object sender, EventArgs e)
- {
- }
- private void Resize(object sender, EventArgs e)
- {
- SetupViewport();
- glControl1.Invalidate();
- }
- public Form1()
- {
- InitializeComponent();
- }
- private void SetupViewport()
- {
- int w = glControl1.Width;
- int h = glControl1.Height;
- GL.MatrixMode(MatrixMode.Projection);
- GL.LoadIdentity();
- GL.Ortho(0, w, 0, h, -1, 1);
- GL.Viewport(0, 0, w, h);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement