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;
- using OpenTK.Graphics.OpenGL;
- using OpenTK.Audio;
- using OpenTK.Audio.OpenAL;
- using OpenTK.Input;
- namespace LR_10_TPM
- {
- public partial class Form1 : Form
- {
- float AngleX = 0;
- float AngleY = 0;
- float AngleZ = 0;
- bool flag;
- const float AngleDl = 5;
- public Form1()
- {
- InitializeComponent();
- }
- private void glControl1_Resize(object sender, EventArgs e)
- {
- SetupViewport();
- glControl1.Invalidate();
- }
- private void SetupViewport()
- {
- GL.Viewport(0, 0, glControl1.Width, glControl1.Height);
- GL.MatrixMode(MatrixMode.Projection);
- GL.LoadIdentity();
- GL.Ortho(-1, 1, -1, 1, -1, 1);
- GL.MatrixMode(MatrixMode.Modelview);
- }
- private void glControl1_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.Enable(EnableCap.Lighting);
- GL.Enable(EnableCap.Light0);
- GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Diffuse, new float[] { 1f, 0.2f, 0.2f, 1.0f });
- GL.Light(LightName.Light0, LightParameter.Ambient, new float[] { 0.1f, 0.5f, 0.8f, 1.0f });
- GL.LightModel(LightModelParameter.LightModelTwoSide, 1);
- GL.Light(LightParameter.Specular, new float[] { 0.1f, 0.5f, 0.8f, 1.0f });
- float n = 0.5f; // половинадлиныребракуба
- GL.Color3(0f, 0f, 0f);
- GL.Begin(BeginMode.Quads);
- if (!flag)
- {
- GL.Normal3(0f, 0f, 1f);
- }
- GL.Vertex3(0.5f, 0.5f, 0.5f);
- GL.Vertex3(-0.5f, 0.5f, 0.5f);
- GL.Vertex3(-0.5f, -0.5f, 0.5f);
- GL.Vertex3(0.5f, -0.5f, 0.5f);
- GL.End();
- GL.Color3(0f, 0f, 0f);
- GL.Begin(BeginMode.Quads);
- if (!flag)
- {
- GL.Normal3(0f, 0f, -1f);
- }
- GL.Vertex3(0.5f, 0.5f, -0.5f);
- GL.Vertex3(0.5f, -0.5f, -0.5f);
- GL.Vertex3(-0.5f, -0.5f, -0.5f);
- GL.Vertex3(-0.5f, 0.5f, -0.5f);
- GL.End();
- GL.Color3(0f, 0f, 0f);
- GL.Begin(BeginMode.Quads);
- if (!flag)
- {
- GL.Normal3(-1f, 0f, 0f);
- }
- GL.Vertex3(-0.5f, 0.5f, 0.5f);
- GL.Vertex3(-0.5f, 0.5f, -0.5f);
- GL.Vertex3(-0.5f, -0.5f, -0.5f);
- GL.Vertex3(-0.5f, -0.5f, 0.5f);
- GL.End();
- //GL.Translate(-0.8, 0, 0);
- Sphere(0.2, 100, 100, flag);
- GL.Disable(EnableCap.Lighting);
- // завершение формирования изображения
- GL.Flush();
- GL.Finish();
- glControl1.SwapBuffers();
- }
- private void glControl1_Load(object sender, EventArgs e)
- {
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- SetupViewport();
- GL.Enable(EnableCap.DepthTest);
- AngleX = 30;
- AngleY = 30;
- }
- private void glControl1_KeyDown(object sender, KeyEventArgs e)
- {
- switch (e.KeyCode)
- {
- case Keys.W:
- AngleX += AngleDl;
- break;
- case Keys.S:
- AngleX -= AngleDl;
- break;
- case Keys.D:
- AngleY += AngleDl;
- break;
- case Keys.A:
- AngleY -= AngleDl;
- break;
- case Keys.E:
- AngleZ += AngleDl;
- break;
- case Keys.Q:
- AngleZ -= AngleDl;
- break;
- case Keys.Z:
- flag = !flag;
- break;
- }
- glControl1.Invalidate();
- }
- void Sphere(double r, int nx, int ny, bool flag)
- {
- int ix, iy;
- double x, y, z;
- for (iy = 0; iy < ny; ++iy)
- {
- GL.Begin(BeginMode.QuadStrip);
- for (ix = 0; ix <= nx; ++ix)
- {
- //double d = iy * Math.PI / ny;
- //x= Math.Sin (d);
- x = r * Math.Sin(iy * Math.PI / ny) * Math.Cos(2 * ix * Math.PI / nx);
- y = r * Math.Sin(iy * Math.PI / ny) * Math.Sin(2 * ix * Math.PI / nx);
- z = r * Math.Cos(iy * Math.PI / ny);
- if (flag)
- {
- GL.Normal3(x, y, z);//нормаль направлена от центра
- }
- GL.TexCoord2((double)ix / (double)nx, (double)iy / (double)ny);
- GL.Vertex3(x, y, z);
- x = r * Math.Sin((iy + 1) * Math.PI / ny) * Math.Cos(2 * ix * Math.PI / nx);
- y = r * Math.Sin((iy + 1) * Math.PI / ny) * Math.Sin(2 * ix * Math.PI / nx);
- z = r * Math.Cos((iy + 1) * Math.PI / ny);
- GL.Normal3(x, y, z);
- GL.TexCoord2((double)ix / (double)nx, (double)(iy + 1) / (double)ny);
- GL.Vertex3(x, y, z);
- }
- GL.End();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement