Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.26 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.  
  10. using OpenTK;
  11. //using OpenTK.Graphics;
  12. using OpenTK.Graphics.OpenGL;
  13. using OpenTK.Audio;
  14. using OpenTK.Audio.OpenAL;
  15. using OpenTK.Input;
  16.  
  17. namespace LR_10_TPM
  18. {
  19. public partial class Form1 : Form
  20. {
  21. float AngleX = 0;
  22. float AngleY = 0;
  23. float AngleZ = 0;
  24.  
  25. bool flag;
  26.  
  27. const float AngleDl = 5;
  28. public Form1()
  29. {
  30. InitializeComponent();
  31. }
  32.  
  33. private void glControl1_Resize(object sender, EventArgs e)
  34. {
  35. SetupViewport();
  36. glControl1.Invalidate();
  37. }
  38. private void SetupViewport()
  39. {
  40. GL.Viewport(0, 0, glControl1.Width, glControl1.Height);
  41.  
  42. GL.MatrixMode(MatrixMode.Projection);
  43. GL.LoadIdentity();
  44. GL.Ortho(-1, 1, -1, 1, -1, 1);
  45. GL.MatrixMode(MatrixMode.Modelview);
  46. }
  47.  
  48. private void glControl1_Paint(object sender, PaintEventArgs e)
  49. {
  50. GL.ClearColor(0.5f, 0.5f, 0.75f, 1.0f); // цветфона
  51. // очисткабуферовцветаиглубины
  52. GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
  53.  
  54. // поворотизображения
  55. GL.LoadIdentity();
  56. GL.Rotate(AngleX, 1.0, 0.0, 0.0);
  57. GL.Rotate(AngleY, 0.0, 1.0, 0.0);
  58. GL.Rotate(AngleZ, 0.0, 0.0, 1.0);
  59.  
  60.  
  61. // формированиеосейкоординат
  62. GL.Enable(EnableCap.Lighting);
  63. GL.Enable(EnableCap.Light0);
  64. GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Diffuse, new float[] { 1f, 0.2f, 0.2f, 1.0f });
  65. GL.Light(LightName.Light0, LightParameter.Ambient, new float[] { 0.1f, 0.5f, 0.8f, 1.0f });
  66. GL.LightModel(LightModelParameter.LightModelTwoSide, 1);
  67. GL.Light(LightParameter.Specular, new float[] { 0.1f, 0.5f, 0.8f, 1.0f });
  68.  
  69. float n = 0.5f; // половинадлиныребракуба
  70.  
  71. GL.Color3(0f, 0f, 0f);
  72. GL.Begin(BeginMode.Quads);
  73.  
  74. if (!flag)
  75. {
  76. GL.Normal3(0f, 0f, 1f);
  77. }
  78. GL.Vertex3(0.5f, 0.5f, 0.5f);
  79. GL.Vertex3(-0.5f, 0.5f, 0.5f);
  80. GL.Vertex3(-0.5f, -0.5f, 0.5f);
  81. GL.Vertex3(0.5f, -0.5f, 0.5f);
  82. GL.End();
  83.  
  84. GL.Color3(0f, 0f, 0f);
  85. GL.Begin(BeginMode.Quads);
  86.  
  87.  
  88. if (!flag)
  89. {
  90. GL.Normal3(0f, 0f, -1f);
  91. }
  92. GL.Vertex3(0.5f, 0.5f, -0.5f);
  93. GL.Vertex3(0.5f, -0.5f, -0.5f);
  94. GL.Vertex3(-0.5f, -0.5f, -0.5f);
  95. GL.Vertex3(-0.5f, 0.5f, -0.5f);
  96. GL.End();
  97.  
  98. GL.Color3(0f, 0f, 0f);
  99. GL.Begin(BeginMode.Quads);
  100. if (!flag)
  101. {
  102. GL.Normal3(-1f, 0f, 0f);
  103. }
  104. GL.Vertex3(-0.5f, 0.5f, 0.5f);
  105. GL.Vertex3(-0.5f, 0.5f, -0.5f);
  106. GL.Vertex3(-0.5f, -0.5f, -0.5f);
  107. GL.Vertex3(-0.5f, -0.5f, 0.5f);
  108. GL.End();
  109.  
  110. //GL.Translate(-0.8, 0, 0);
  111.  
  112. Sphere(0.2, 100, 100, flag);
  113.  
  114. GL.Disable(EnableCap.Lighting);
  115. // завершение формирования изображения
  116.  
  117. GL.Flush();
  118. GL.Finish();
  119.  
  120. glControl1.SwapBuffers();
  121. }
  122.  
  123. private void glControl1_Load(object sender, EventArgs e)
  124. {
  125.  
  126. }
  127.  
  128. private void Form1_Load(object sender, EventArgs e)
  129. {
  130. SetupViewport();
  131. GL.Enable(EnableCap.DepthTest);
  132.  
  133. AngleX = 30;
  134. AngleY = 30;
  135. }
  136.  
  137. private void glControl1_KeyDown(object sender, KeyEventArgs e)
  138. {
  139. switch (e.KeyCode)
  140. {
  141. case Keys.W:
  142. AngleX += AngleDl;
  143. break;
  144. case Keys.S:
  145. AngleX -= AngleDl;
  146. break;
  147. case Keys.D:
  148. AngleY += AngleDl;
  149. break;
  150. case Keys.A:
  151. AngleY -= AngleDl;
  152. break;
  153. case Keys.E:
  154. AngleZ += AngleDl;
  155. break;
  156. case Keys.Q:
  157. AngleZ -= AngleDl;
  158. break;
  159. case Keys.Z:
  160. flag = !flag;
  161. break;
  162. }
  163. glControl1.Invalidate();
  164. }
  165. void Sphere(double r, int nx, int ny, bool flag)
  166. {
  167. int ix, iy;
  168. double x, y, z;
  169.  
  170. for (iy = 0; iy < ny; ++iy)
  171. {
  172. GL.Begin(BeginMode.QuadStrip);
  173. for (ix = 0; ix <= nx; ++ix)
  174. {
  175. //double d = iy * Math.PI / ny;
  176. //x= Math.Sin (d);
  177. x = r * Math.Sin(iy * Math.PI / ny) * Math.Cos(2 * ix * Math.PI / nx);
  178.  
  179. y = r * Math.Sin(iy * Math.PI / ny) * Math.Sin(2 * ix * Math.PI / nx);
  180. z = r * Math.Cos(iy * Math.PI / ny);
  181. if (flag)
  182. {
  183. GL.Normal3(x, y, z);//нормаль направлена от центра
  184. }
  185. GL.TexCoord2((double)ix / (double)nx, (double)iy / (double)ny);
  186. GL.Vertex3(x, y, z);
  187.  
  188. x = r * Math.Sin((iy + 1) * Math.PI / ny) * Math.Cos(2 * ix * Math.PI / nx);
  189. y = r * Math.Sin((iy + 1) * Math.PI / ny) * Math.Sin(2 * ix * Math.PI / nx);
  190. z = r * Math.Cos((iy + 1) * Math.PI / ny);
  191. GL.Normal3(x, y, z);
  192. GL.TexCoord2((double)ix / (double)nx, (double)(iy + 1) / (double)ny);
  193. GL.Vertex3(x, y, z);
  194. }
  195. GL.End();
  196. }
  197. }
  198. }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement