Advertisement
Guest User

C#

a guest
Oct 21st, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.85 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using OpenTK;
  10. using OpenTK.Graphics.OpenGL;
  11. using OpenTK.Audio;
  12. using OpenTK.Audio.OpenAL;
  13. using OpenTK.Input;
  14.  
  15. namespace Lab5
  16. {
  17.     public partial class Form1 : Form
  18.     {
  19.         double[,] m;
  20.         int ir;
  21.         float AngleX = 30;
  22.         float AngleY = 30;
  23.         float AngleZ = 0;
  24.         //private OpenTK.GLControl glControl1;
  25.         const float AngleDl = 5;
  26.         PolygonMode mode = PolygonMode.Line;//Выбранная грань не будет закрашиваться
  27.         double x, y, z;
  28.  
  29.         private void KeyDown(object sender, KeyEventArgs e)
  30.         {
  31.             switch (e.KeyCode)
  32.             {
  33.                 case Keys.W:
  34.                     AngleX += AngleDl;
  35.                     break;
  36.                 case Keys.S:
  37.                     AngleX -= AngleDl;
  38.                     break;
  39.                 case Keys.A:
  40.                     AngleY += AngleDl;
  41.                     break;
  42.                 case Keys.D:
  43.                     AngleY -= AngleDl;
  44.                     break;
  45.                 case Keys.Q:
  46.                     AngleZ += AngleDl;
  47.                     break;
  48.                 case Keys.E:
  49.                     AngleZ -= AngleDl;
  50.                     break;
  51.             }
  52.  
  53.             glControl1.Invalidate();
  54.         }
  55.  
  56.         private void Paint(object sender, PaintEventArgs e)
  57.         {
  58.             GL.ClearColor(0.5f, 0.5f, 0.75f, 1.0f); // цвет фона
  59.             // очистка буферов цвета и глубины
  60.             GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
  61.             // поворот изображения
  62.             GL.LoadIdentity();
  63.             GL.Rotate(AngleX, 1.0, 0.0, 0.0);
  64.             GL.Rotate(AngleY, 0.0, 1.0, 0.0);
  65.             GL.Rotate(AngleZ, 0.0, 0.0, 1.0);
  66.             // формирование изображения
  67.             GL.Begin(BeginMode.Lines);
  68.             GL.Color3(1f, 0f, 0f); GL.Vertex3(-1f, 0f, 0f); GL.Vertex3(1f, 0f, 0f);
  69.             GL.Color3(0f, 1f, 0f); GL.Vertex3(0f, -1f, 0f); GL.Vertex3(0f, 1f, 0f);
  70.             GL.Color3(0f, 0f, 1f); GL.Vertex3(0f, 0f, -1f); GL.Vertex3(0f, 0f, 1f);
  71.             GL.End();
  72.             float ak;
  73.             ak = 0.5f;
  74.             // формирование изображения ЧЕТЫРЕХУГОЛЬНИКА
  75.             GL.Begin(BeginMode.Lines);
  76.             GL.Color3(1f, 1f, 1f);
  77.             // первый четырехугольник
  78.             GL.Vertex3(0.0, 0.0, 0);
  79.             GL.Vertex3(0.0, ak, 0);
  80.             GL.Vertex3(-ak, 0.0, 0);
  81.             GL.Vertex3(-ak, ak, 0);
  82.             GL.Vertex3(-ak, ak, 0);
  83.             GL.Vertex3(0, ak, 0);
  84.             GL.Vertex3(-ak, 0, 0);
  85.             GL.Vertex3(0.0, 0.0, 0);
  86.             GL.End();
  87.             GL.Begin(BeginMode.Lines);
  88.             GL.Color3(1f, 1f, 1f);
  89.             // второй четырехугольник
  90.             GL.Vertex3(0.0, 0.0, ak);
  91.             GL.Vertex3(0.0, ak, ak);
  92.             GL.Vertex3(-ak, 0.0, ak);
  93.             GL.Vertex3(-ak, ak, ak);
  94.             GL.Vertex3(-ak, ak, ak);
  95.             GL.Vertex3(0, ak, ak);
  96.             GL.Vertex3(-ak, 0, ak);
  97.             GL.Vertex3(0.0, 0.0, ak);
  98.             GL.End();
  99.             // соединение четырехугольник
  100.             GL.Begin(BeginMode.Lines);
  101.             GL.Color3(1f, 1f, 1f);
  102.             GL.Vertex3(0.0, 0.0, ak);
  103.             GL.Vertex3(0.0, 0, 0);
  104.             GL.Vertex3(0, ak, ak);
  105.             GL.Vertex3(0, ak, 0);
  106.             GL.Vertex3(-ak, 0.0, ak);
  107.             GL.Vertex3(-ak, 0, 0);
  108.             GL.Vertex3(-ak, ak, ak);
  109.             GL.Vertex3(-ak, ak, 0);
  110.             GL.End();
  111.             // для приближения
  112.             m = new double[4, 5];
  113.             ir = 0;
  114.             //GL.LineWidth(3f);
  115.             GL.Begin(BeginMode.Lines);
  116.             GL.Color3(0f, 0f, 0f);
  117.             GL.Vertex3(0.0, ak, 0);
  118.             GL.Vertex3(-ak, ak, ak);
  119.             GL.Vertex3(0.0, ak, 0);
  120.             GL.Vertex3(0, 0, ak);
  121.             GL.Vertex3(0, 0, ak);
  122.             GL.Vertex3(-ak, 0, 0);
  123.             GL.End();
  124.             GL.PolygonMode(MaterialFace.FrontAndBack, mode); //Режим отображения
  125.             m[1, 1] = -ak;
  126.             m[2, 1] = 0;
  127.             m[3, 1] = 0;
  128.             m[1, 2] = -ak;
  129.             m[2, 2] = ak;
  130.             m[3, 2] = ak;
  131.             m[1, 3] = 0;
  132.             m[2, 3] = 0;
  133.             m[3, 3] = ak;
  134.             m[1, 4] = 0;
  135.             m[2, 4] = ak;
  136.             m[3, 4] = 0;
  137.             binar();
  138.             // завершение формирования изображения
  139.             GL.Flush();
  140.             GL.Finish();
  141.  
  142.             glControl1.SwapBuffers();
  143.         }
  144.  
  145.         private void binar()
  146.         {
  147.             double u, w;
  148.             int nu, nw; //nx ny
  149.             nu = 10;
  150.             nw = 10;
  151.             GL.Color3(0f, 0f, 0f);
  152.             ir = 0;
  153.             for (int iw = 0; iw < nw; ++iw)
  154.             {
  155.                 GL.Begin(BeginMode.LineStrip);
  156.                 for (int iu = 0; iu <= nu; ++iu)
  157.                 {
  158.                     u = iu * 0.1f;
  159.                     w = iw * 0.1f;
  160.                     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;
  161.                     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;
  162.                     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;
  163.                     GL.Vertex3(x, y, z);
  164.                     w = w + 0.1f;
  165.                     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;
  166.                     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;
  167.                     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;
  168.                     GL.Vertex3(x, y, z);
  169.                 }
  170.                 GL.End();
  171.             }
  172.         }
  173.  
  174.         private void Load(object sender, EventArgs e)
  175.         {
  176.         }
  177.  
  178.         private void Resize(object sender, EventArgs e)
  179.         {
  180.             SetupViewport();
  181.             glControl1.Invalidate();
  182.         }
  183.  
  184.         public Form1()
  185.         {
  186.             InitializeComponent();
  187.         }
  188.  
  189.         private void SetupViewport()
  190.         {
  191.             int w = glControl1.Width;
  192.             int h = glControl1.Height;
  193.             GL.MatrixMode(MatrixMode.Projection);
  194.             GL.LoadIdentity();
  195.             GL.Ortho(0, w, 0, h, -1, 1);
  196.             GL.Viewport(0, 0, w, h);
  197.         }
  198.     }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement