public void Draw() { GL.Translate(pos); GL.Begin(PrimitiveType.Quads); { // front face GL.Normal3(0, 0, 1.0f); GL.Vertex3(length * 0.5, -height * 0.5, width * 0.5); GL.Vertex3(length * 0.5 + offsetX, height * 0.5, width * 0.5); GL.Vertex3(-length * 0.5 + offsetX, height * 0.5, width * 0.5); GL.Vertex3(-length * 0.5, -height * 0.5, width * 0.5); // back face GL.Normal3(0, 0, -1.0f); GL.Vertex3(-length * 0.5, -height * 0.5, -width * 0.5); GL.Vertex3(-length * 0.5 + offsetX, height * 0.5, -width * 0.5); GL.Vertex3(length * 0.5 + offsetX, height * 0.5, -width * 0.5); GL.Vertex3(length * 0.5, -height * 0.5, -width * 0.5); // top face GL.Normal3(0f, 1.0f, 0); GL.Vertex3(length * 0.5 + offsetX, height * 0.5, width * 0.5); GL.Vertex3(length * 0.5 + offsetX, height * 0.5, -width * 0.5); GL.Vertex3(-length * 0.5 + offsetX, height * 0.5, -width * 0.5); GL.Vertex3(-length * 0.5 + offsetX, height * 0.5, width * 0.5); // bottom face GL.Normal3(0, -1.0f, 0); GL.Vertex3(-length * 0.5, -height * 0.5, width * 0.5); GL.Vertex3(-length * 0.5, -height * 0.5, -width * 0.5); GL.Vertex3(length * 0.5, -height * 0.5, -width * 0.5); GL.Vertex3(length * 0.5, -height * 0.5, width * 0.5); // right face GL.Normal3(Math.Sin(angle_), -Math.Cos(angle_), 0); GL.Vertex3(length * 0.5, -height * 0.5, -width * 0.5); GL.Vertex3(length * 0.5 + offsetX, height * 0.5, -width * 0.5); GL.Vertex3(length * 0.5 + offsetX, height * 0.5, width * 0.5); GL.Vertex3(length * 0.5, -height * 0.5, width * 0.5); // left face GL.Normal3(-Math.Sin(angle_), Math.Cos(angle_), 0); GL.Vertex3(-length * 0.5, -height * 0.5, width * 0.5); GL.Vertex3(-length * 0.5 + offsetX, height * 0.5, width * 0.5); GL.Vertex3(-length * 0.5 + offsetX, height * 0.5, -width * 0.5); GL.Vertex3(-length * 0.5, -height * 0.5, -width * 0.5); } GL.End(); GL.Translate(-pos); }
public void Draw() { GL.Normal3(0f, 1f, 0f); GL.Begin(PrimitiveType.Polygon); { GL.Vertex3(vertices[0]); GL.Vertex3(vertices[1]); GL.Vertex3(vertices[2]); } GL.End(); GL.Normal3(-1f, 0f, 0f); GL.Begin(PrimitiveType.Polygon); { GL.Vertex3(vertices[0]); GL.Vertex3(vertices[2]); GL.Vertex3(vertices[3]); } GL.End(); GL.Normal3(0.5f, -0.5f, 0.5f); GL.Begin(PrimitiveType.Polygon); { GL.Vertex3(vertices[0]); GL.Vertex3(vertices[3]); GL.Vertex3(vertices[1]); } GL.End(); GL.Normal3(0f, 0f, -1f); GL.Begin(PrimitiveType.Polygon); { GL.Vertex3(vertices[3]); GL.Vertex3(vertices[2]); GL.Vertex3(vertices[1]); } GL.End(); }
public static void Normal3(Vector3d normal) { GL.Normal3(normal.X, normal.Y, normal.Z); }
private void GlPaint(object sender, PaintEventArgs e) { if (!_glLoaded) { return; } // Color fonColor = Color.FromArgb(_soundColor.R, _soundColor.B, 0); _fonStrong = ((_fonStrong * 3) + _total) / 4; if (_fonStrong > 1) { _fonStrong = 1; } Color fonColor = Color.FromArgb((int)(255 * _fonStrong), (int)(255 * _fonStrong), (int)(255 * _fonStrong * 0.2)); GL.ClearColor(fonColor); // GL.ClearColor(1f, 1f, 1f, 1f); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.LoadIdentity(); GL.Disable(EnableCap.Lighting); GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); //Прорисoвка круга if (Visual1.Colors.Count >= 10) { Color spin = new Color(); GL.Begin(PrimitiveType.TriangleFan); GL.Color3(Visual1.Colors[0]); GL.Color4(Visual1.Colors[0].R, Visual1.Colors[0].G, Visual1.Colors[0].B, (double)0.5); GL.Color4(Color.FromArgb(Visual1.Colors[0].A * 0, Visual1.Colors[0].R, Visual1.Colors[0].G, Visual1.Colors[0].B)); GL.Vertex3(-0, -0, -1); GL.Vertex3(Visual1.Coordinates[0].X, Visual1.Coordinates[0].Y, -1); for (int i = 0; i < Visual1.Coordinates.Count; i++) { if ((i % 4 == 0) && (i > 0)) { GL.End(); GL.Begin(PrimitiveType.TriangleFan); GL.Vertex3(-0, -0, (float)((double)i / Visual1.Coordinates.Count / 2 - 1)); for (int j = i - 3; j < i; j++) { GL.Vertex3(-Visual1.Coordinates[j - 1].X, -Visual1.Coordinates[j - 1].Y, (float)((double)j / Visual1.Coordinates.Count / 2 - 1)); } GL.End(); GL.Begin(PrimitiveType.TriangleFan); GL.Vertex3(-0, -0, (float)((double)i / Visual1.Coordinates.Count / 2 - 1)); GL.Vertex3(Visual1.Coordinates[i - 1].X, Visual1.Coordinates[i - 1].Y, (float)((double)i / Visual1.Coordinates.Count / 2 - 1)); } GL.Color3(Visual1.Colors[i]); GL.Color4(Visual1.Colors[i].R, Visual1.Colors[i].G, Visual1.Colors[i].B, (double)0.5); GL.Color4(Color.FromArgb((int)((double)i / Visual1.Coordinates.Count * TR * 255), Visual1.Colors[i].R, Visual1.Colors[i].G, Visual1.Colors[i].B)); GL.Vertex3(Visual1.Coordinates[i].X, Visual1.Coordinates[i].Y, (float)((double)i / Visual1.Coordinates.Count / 2 - 1)); } GL.End(); } //////конец прорисовки круга float[] diffuse = new float[3] { 0.5f, 0.5f, 0.5f }; GL.Light(LightName.Light0, LightParameter.Diffuse, diffuse); float[] ambient = new float[3] { 4, 4, 4 }; GL.Light(LightName.Light0, LightParameter.Ambient, ambient); float[] lightPos = new float[4] { -glControl1.Width, 0.0f, 10.0f, 1.0f }; GL.Light(LightName.Light0, LightParameter.Position, lightPos); float[] specular = new float[4] { 10, 10, 10, 1 }; GL.Light(LightName.Light0, LightParameter.Specular, specular); GL.Enable(EnableCap.Lighting); GL.Enable(EnableCap.Light0); GL.LightModel(LightModelParameter.LightModelTwoSide, 1); //звуковой спектр снизу в виде диаграмм Random rand = new Random(); for (int color = 0; color < 5; color++) { LoadTexture(bmpTex[color]); for (int j = 0; j < 50; j++) { if (_FFTnum[j] - 1 != color) { continue; } GL.Enable(EnableCap.Texture2D); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.PolygonMode(MaterialFace.FrontAndBack, mode); GL.Begin(PrimitiveType.QuadStrip); double w = glControl1.Width / 25; float k = 0.5f; double r = 0.5; int n = 20; for (int i = 0; i <= n; ++i) { double a = Math.PI / n * i; double x = r * Math.Cos(a); double z = r * Math.Sin(a); GL.TexCoord2(0, 1); GL.Vertex3(x * w + w * j + (w / 2) - glControl1.Width, -glControl1.Height * (1 - _FFTSpectr[_FFTnum[j] - 1]), z); GL.TexCoord2(1, 0); GL.Vertex3(x * w + w * j + (w / 2) - glControl1.Width, -glControl1.Height, z); if (i > 0) { GL.Normal3(-(x - r * Math.Cos(a - 1)), (x - r * Math.Cos(a - 1)), 0); } } GL.End(); } } GL.Disable(EnableCap.Lighting); GL.Disable(EnableCap.Texture2D); //myThread t1 = new myThread("Thread 1", glControl1.Width, glControl1.Height, firstColorSpectr, spectrRadius, // _FFTSpectr, glControl1); //myThread t2 = new myThread("Thread 1", -glControl1.Width, glControl1.Height, firstColorSpectr, spectrRadius, // _FFTSpectr, glControl1); //myThread t3 = new myThread("Thread 1", glControl1.Width, -glControl1.Height, firstColorSpectr, spectrRadius, // _FFTSpectr, glControl1); //myThread t4 = new myThread("Thread 1", -glControl1.Width, -glControl1.Height, firstColorSpectr, spectrRadius, // _FFTSpectr, glControl1); MusicCirsle(glControl1.Width, glControl1.Height, Math.PI, 3 * Math.PI / 2); MusicCirsle(-glControl1.Width, glControl1.Height, 3 * Math.PI / 2, 2 * Math.PI); MusicCirsle(glControl1.Width, -glControl1.Height, Math.PI / 2, 2 * Math.PI); MusicCirsle(-glControl1.Width, -glControl1.Height, 0, Math.PI / 2); //GL.Disable(EnableCap.Lighting); GL.Disable(EnableCap.Blend); GL.Flush(); //GL.Finish(); glControl1.SwapBuffers(); }