public void Initialize() { loaded = true; glControl.CreateControl(); HeadPoints.Initialize(HeadPointsCount); HeadPoints.RenderCamera = camera; HeadPoints.GenerateSphere(0.3f, 5, 5); idleShader = new ShaderController("idle.vs", "idle.fs"); idleShader.SetUniformLocation("u_UseTexture"); idleShader.SetUniformLocation("u_Color"); idleShader.SetUniformLocation("u_Texture"); idleShader.SetUniformLocation("u_BrushMap"); idleShader.SetUniformLocation("u_TransparentMap"); idleShader.SetUniformLocation("u_World"); idleShader.SetUniformLocation("u_WorldView"); idleShader.SetUniformLocation("u_ViewProjection"); idleShader.SetUniformLocation("u_LightDirection"); blendShader = new ShaderController("blending.vs", "blending.fs"); blendShader.SetUniformLocation("u_Texture"); blendShader.SetUniformLocation("u_BaseTexture"); blendShader.SetUniformLocation("u_BlendDirectionX"); LoadModel(ProgramCore.DefaultIsSmile); SetupViewport(glControl); windowInfo = Utilities.CreateWindowsWindowInfo(renderPanel.Handle); graphicsContext = new GraphicsContext(GraphicsMode.Default, windowInfo); renderPanel.Resize += (sender, args) => graphicsContext.Update(windowInfo); glControl.Context.MakeCurrent(glControl.WindowInfo); RenderTimer.Start(); }
private void Form1_Load(object sender, EventArgs e) { // инициализация библиотеки GLUT Glut.glutInit(); // инициализация режима окна Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH); // устанавливаем цвет очистки окна Gl.glClearColor(255, 255, 255, 1); // устанавливаем порт вывода, основываясь на размерах элемента управления AnT Gl.glViewport(0, 0, AnT.Width, AnT.Height); // устанавливаем проекционную матрицу Gl.glMatrixMode(Gl.GL_PROJECTION); // очищаем ее Gl.glLoadIdentity(); Glu.gluOrtho2D(0.0, AnT.Width, 0.0, AnT.Height); // переходим к объектно-видовой матрице Gl.glMatrixMode(Gl.GL_MODELVIEW); // добавлние элемента, отвечающего за управления главным слоем в объект LayersControl LayersControl.Items.Add("Главный слой", true); ProgrammDrawingEngine = new anEngine(AnT.Width, AnT.Height, AnT.Width, AnT.Height); RenderTimer.Start(); }
private void Form1_Load(object sender, EventArgs e) { // Glut.glutInit(); // Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_SINGLE); не забыть Gl.glClearColor(255, 255, 255, 1); //порт вывода, размеры AnT Gl.glViewport(0, 0, AnT.Width, AnT.Height); //матрицааааа Gl.glMatrixMode(Gl.GL_PROJECTION); Gl.glLoadIdentity(); Glu.gluOrtho2D(0.0, AnT.Width, 0.0, AnT.Height); //объектно-видовая матрица Gl.glMatrixMode(Gl.GL_MODELVIEW); ProgrammDrawingEngine = new anEngine(AnT.Width, AnT.Height, AnT.Width, AnT.Height); RenderTimer.Start(); Слои.Items.Add("Главный слой", true); }
private void btnOpenFileDlg_Click(object sender, EventArgs e) { using (var ofd = new OpenFileDialogEx("Select template file", "Image Files|*.jpg;*.png;*.jpeg;*.bmp")) { ofd.Multiselect = false; if (ofd.ShowDialog() != DialogResult.OK) { return; } textTemplateImage.Text = ofd.FileName; using (var bmp = new Bitmap(ofd.FileName)) pictureTemplate.Image = (Bitmap)bmp.Clone(); MouthRelative = new Vector2(pictureTemplate.Image.Width * 0.5f, pictureTemplate.Image.Height / 1.5f); // примерно расставляем глаз и рот EyeRelative = new Vector2(pictureTemplate.Image.Width * 0.5f, pictureTemplate.Image.Height * 0.2f); MouthRelative = new Vector2(MouthRelative.X / (pictureTemplate.Image.Width * 1f), MouthRelative.Y / (pictureTemplate.Image.Height * 1f)); EyeRelative = new Vector2(EyeRelative.X / (pictureTemplate.Image.Width * 1f), EyeRelative.Y / (pictureTemplate.Image.Height * 1f)); btnApply.Enabled = true; RecalcRealTemplateImagePosition(); RenderTimer.Start(); } }
private void OverlayWindow_Paint(object sender, PaintEventArgs e) { if (currTask != null) { float percent = 100 - ((currSec + (currMin * 60)) / (timerSeconds + (timerMinutes * 60))) * 100; TimeSpan timeLeft = new TimeSpan(0, (int)currMin, (int)currSec); string timerMainText = currTask.timerMainText; if (timerMainText == null) { timerMainText = timeLeft.ToString(@"mm\:ss"); } RenderTimer.DrawCircularTimer(e, new Vector2(Screen.GetWorkingArea(Point.Empty).Width - m_timerPadding, Screen.GetWorkingArea(Point.Empty).Height - m_timerPadding), timerSize, timerMainText, currTask.timerColor, Program.tasktraySettingsInstance.darkMode ? Color.White : Color.Black, percent, currTask.timerSubText, m_arcWidth, currTask.textFontSize, currTask.subTextFontSize ); } }
private void Game_Load(object sender, EventArgs e) { //---------------------------------------------------------------------------- GL.ClearColor(Color.Black); SetupViewport(); //GL.Enable(EnableCap.Texture2D); GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); Map.texture[0] = Game.LoadTexture(Properties.Resources.grass_tile_64x64); //tile of grass Map.texture[1] = Game.LoadTexture(Properties.Resources.Crystal); Map.texture[2] = Game.LoadTexture(Properties.Resources.tree_tex); Map.texture[3] = Game.LoadTexture(Properties.Resources.Pavement); Map.texture[4] = Game.LoadTexture(Properties.Resources.Hatchery); Tower.texture[0] = Game.LoadTexture(Properties.Resources.ArrowTower); Tower.texture[1] = Game.LoadTexture(Properties.Resources.SplashTower); Tower.texture[2] = Game.LoadTexture(Properties.Resources.PoisonTower); Tower.texture[3] = Game.LoadTexture(Properties.Resources.IceTower); Mob.texture[0] = Game.LoadTexture(Properties.Resources.Roach); Mob.texture[1] = Game.LoadTexture(Properties.Resources.Zerg); Mob.texture[2] = Game.LoadTexture(Properties.Resources.Ghost); GL.Disable(EnableCap.Texture2D); lvl1 = new Map(); //выделяется память для крты уровня //loaded = true; RenderTimer.Start(); //запуск таймера отрисовки сцены }
private void Form1_Load(object sender, EventArgs e) { Gl.glClearColor(255, 255, 255, 1); Gl.glViewport(0, 0, AnT.Width, AnT.Height); Gl.glMatrixMode(Gl.GL_PROJECTION); Gl.glLoadIdentity(); Glu.gluOrtho2D(0.0, AnT.Width, 0.0, AnT.Height); Gl.glMatrixMode(Gl.GL_MODELVIEW); ProgrammDrawingEngine = new anEngine(AnT.Width, AnT.Height, AnT.Width, AnT.Height); RenderTimer.Start(); Слои.Items.Add("Главный слой", true); }
private void MainForm_Load(object sender, EventArgs e) { Glut.glutInit(); // инициализация режима экрана Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE); // установка цвета очистки экрана (RGBA) Gl.glClearColor(0, 0, 0, 1); // установка порта вывода Gl.glViewport(0, 0, simpleOpenGlControl.Width, simpleOpenGlControl.Height); // активация проекционной матрицы Gl.glMatrixMode(Gl.GL_PROJECTION); // очистка матрицы Gl.glLoadIdentity(); Glu.gluPerspective(45, simpleOpenGlControl.Width / simpleOpenGlControl.Height, 0.1, 200); InitScene(); comboBoxFigure1.SelectedIndex = 0; comboBoxFigure2.SelectedIndex = 1; Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); // активация таймера, вызывающего функцию для визуализации RenderTimer.Start(); }
public frmNewProject2(string projectPath, string templateImagePath, FaceRecognition fcr) { InitializeComponent(); this.fcr = fcr; textName.Text = projectPath; if (!string.IsNullOrEmpty(templateImagePath)) { using (var bmp = new Bitmap(templateImagePath)) pictureTemplate.Image = (Bitmap)bmp.Clone(); } RecalcRealTemplateImagePosition(); RenderTimer.Start(); if (ProgramCore.PluginMode) { var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); var dazPath = Path.Combine(appDataPath, @"DAZ 3D\Studio4\temp\FaceShop\", "fs3d.obj"); if (File.Exists(dazPath)) { rbImportObj.Checked = true; CustomModelPath = dazPath; } else { MessageBox.Show("Daz model not found.", "HeadShop", MessageBoxButtons.OK); } } }
private void MainForm_Load(object sender, EventArgs e) { // инициализация библиотеки glut Glut.glutInit(); // инициализация режима экрана Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE); // установка цвета очистки экрана (RGBA) Gl.glClearColor(255, 255, 255, 1); // установка порта вывода Gl.glViewport(0, 0, AnT.Width, AnT.Height); // активация проекционной матрицы Gl.glMatrixMode(Gl.GL_PROJECTION); // очистка матрицы Gl.glLoadIdentity(); // установка перспективы Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200); Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); // начальная настройка параметров openGL (тест глубины, освещение и первый источник света) Gl.glEnable(Gl.GL_DEPTH_TEST); Gl.glEnable(Gl.GL_LIGHTING); Gl.glEnable(Gl.GL_LIGHT0); // установка первых элементов в списках combobox ObjectComboBox.SelectedIndex = 0; // активация таймера, вызывающего функцию для визуализации RenderTimer.Start(); }
private void Form1_Load(object sender, EventArgs e) { Glut.glutInit(); Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE); Gl.glClearColor(255, 255, 255, 1); Gl.glViewport(0, 0, AnT.Width, AnT.Height); Gl.glMatrixMode(Gl.GL_PROJECTION); Gl.glLoadIdentity(); Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); Gl.glEnable(Gl.GL_DEPTH_TEST); Gl.glEnable(Gl.GL_LIGHTING); Gl.glEnable(Gl.GL_LIGHT0); cam.PositionCamera(0, -15, 5, 0, 90, 0, 0, 1, 0); //cam.PositionCamera(0, 6, -15, 0, 3, 0, 0, 1, 0); // активация таймера, вызывающего функцию для визуализации RenderTimer.Start(); // опции для загрузки файла openFileDialog1.Filter = "ase files (*.ase)|*.ase|All files (*.*)|*.*"; //Thread thread = new Thread(new ThreadStart(Help)); //thread.Start(); // запускаем поток }
public void Update(RenderTimer timer) { var dt = (float)timer.DurationSinceLastFrame.TotalSeconds; X += (float)(Speed * Math.Sin(Direction) * dt); Y += (float)(Speed * Math.Cos(Direction) * dt); RotationAngle += AngularSpeed * dt; }
private void выбратьМодельДляЗагрузкиToolStripMenuItem_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == Forms.DialogResult.OK) { Model = new anModelLoader(); Model.LoadModel(openFileDialog1.FileName); RenderTimer.Start(); } }
private void AnT_Load(object sender, EventArgs e) { GL.Enable(EnableCap.CullFace); GL.CullFace(CullFaceMode.Back); GL.FrontFace(FrontFaceDirection.Ccw); RenderTimer.Start(); }
private void lever_Click(object sender, EventArgs e) { RenderTimer.Tick += LeverHandler; RenderTimer.Start(); if (leverRotation == 30) { RenderTimer.Stop(); } }
private void Form1_Load(object sender, EventArgs e) { Glut.glutInit(); Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE); Gl.glClearColor(255, 255, 255, 1); Gl.glViewport(0, 0, AnT.Width, AnT.Height); FigureChanger.SelectedIndex = 0; RenderTimer.Start(); }
public void win() { if (Game.WaveNum >= winwave) { RenderTimer.Stop(); Unit.towers.Clear(); Unit.mobs.Clear(); new Finish(1).Show(); } }
public void over() { if (Game.Lives <= 0) { RenderTimer.Stop(); Unit.towers.Clear(); Unit.mobs.Clear(); new Finish(2).Show(); } }
private void timer1_Tick(object sender, EventArgs e) { timer1.Stop(); if (!navbrowser.IsBrowserInitialized || !browser.IsBrowserInitialized || !navbrowser.GetBrowser().HasDocument) { Application.DoEvents(); } RenderTimer.Start();; SlowRenderTimer.Start(); SuperSlowRenderTimer.Start(); }
// событие загрузки формы окна private void Form1_Load(object sender, EventArgs e) { // инициализация OpenGL, много раз комментированная ранее // инициализация библиотеки glut Glut.glutInit(); // инициализация режима экрана Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE); // установка цвета очистки экрана (RGBA) Gl.glClearColor(255, 255, 255, 1); // установка порта вывода Gl.glViewport(0, 0, AnT.Width, AnT.Height); // активация проекционной матрицы Gl.glMatrixMode(Gl.GL_PROJECTION); // очистка матрицы Gl.glLoadIdentity(); Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200); Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); Gl.glEnable(Gl.GL_DEPTH_TEST); // пирамида для визуализации (4 точки) GeomObject[0, 0] = -0.7f; GeomObject[0, 1] = 0; GeomObject[0, 2] = 0; GeomObject[1, 0] = 0.7f; GeomObject[1, 1] = 0; GeomObject[1, 2] = 0; GeomObject[2, 0] = 0.0f; GeomObject[2, 1] = 0; GeomObject[2, 2] = 1.0f; GeomObject[3, 0] = 0; GeomObject[3, 1] = 0.7f; GeomObject[3, 2] = 0.3f; // количество вершин рассматриваемого геометрического объекта count_elements = 4; // устанавливаем ось X по умолчанию comboBox1.SelectedIndex = 0; // начало визуализации (активируем таймер) RenderTimer.Start(); }
private void Form1_Load(object sender, EventArgs e) { // инициализация Glut Glut.glutInit(); Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH); // очитка окна Gl.glClearColor(0, 0, 0, 1); LightManager.Instance.Initialization(); // установка порта вывода в соотвествии с размерами элемента anT Gl.glViewport(0, 0, AnT.Width, AnT.Height); // активация проекционной матрицы Gl.glMatrixMode(Gl.GL_PROJECTION); // очистка матрицы Gl.glLoadIdentity(); // установка перспективы Glu.gluPerspective(45f, AnT.Width / AnT.Height, 1, 500); // установка объектно-видовой матрицы Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); Gl.glEnable(Gl.GL_DEPTH_TEST); var path = AppDomain.CurrentDomain.BaseDirectory + @"..\..\"; TextureManager.Instance.LoadTexture(path + @"\Texture\ground.jpg", TextureName.Ground); TextureManager.Instance.LoadTexture(path + @"\Texture\Back.bmp", TextureName.Back); TextureManager.Instance.LoadTexture(path + @"\Texture\Front.bmp", TextureName.Front); TextureManager.Instance.LoadTexture(path + @"\Texture\Bottom.bmp", TextureName.Bottom); TextureManager.Instance.LoadTexture(path + @"\Texture\Left.bmp", TextureName.Left); TextureManager.Instance.LoadTexture(path + @"\Texture\Right.bmp", TextureName.Rigth); TextureManager.Instance.LoadTexture(path + @"\Texture\Top.bmp", TextureName.Top); modelManager = new ModelManager(); modelManager.LoadModel(); ParticleManager.Instance.Initialization(); cameraManager = new CameraManager(this, 0, 1.5f, 6, 0, 1.5f, 5, 0, 1, 0); // активация таймера RenderTimer.Start(); }
private void Form1_Load(object sender, EventArgs e) { // Glut.glutInit(); // Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_SINGLE); не забыть // устанавливаем цвет очистки окна Gl.glClearColor(255, 255, 255, 1); // устанавливаем порт вывода, основываясь на размерах элемента управления AnT Gl.glViewport(0, 0, AnT.Width, AnT.Height); // устанавливаем проекционную матрицу Gl.glMatrixMode(Gl.GL_PROJECTION); // очищаем ее Gl.glLoadIdentity(); if ((float)AnT.Width <= (float)AnT.Height) { ScreenW = 500.0; ScreenH = 500.0 * (float)AnT.Height / (float)AnT.Width; Glu.gluOrtho2D(0.0, ScreenW, 0.0, ScreenH); } else { ScreenW = 500.0 * (float)AnT.Width / (float)AnT.Height; ScreenH = 500.0; Glu.gluOrtho2D(0.0, 500.0 * (float)AnT.Width / (float)AnT.Height, 0.0, 500.0); } devX = (float)ScreenW / (float)AnT.Width; devY = (float)ScreenH / (float)AnT.Height; Glu.gluOrtho2D(0.0, AnT.Width, 0.0, AnT.Height); // переходим к объектно-видовой матрице Gl.glMatrixMode(Gl.GL_MODELVIEW); ProgrammDrawingEngine = new anEngine(AnT.Width, AnT.Height, AnT.Width, AnT.Height); RenderTimer.Start(); comboBox1.SelectedIndex = 0; // добавление элемента, отвечающего за управления главным слоем в объект LayersControl Слои.Items.Add("Главный слой", true); }
public void LoadPhoto() { using (var ofd = new OpenFileDialogEx("Select template file", "Image Files|*.jpg;*.png;*.jpeg;*.bmp")) { ofd.Multiselect = false; if (ofd.ShowDialog() != DialogResult.OK) { return; } templateImage = ofd.FileName; Recognizer = new LuxandFaceRecognition(); if (!Recognizer.Recognize(ref templateImage, true)) { templateImage = string.Empty; pictureTemplate.Image = null; return; // это ОЧЕНЬ! важно. потому что мы во время распознавания можем создать обрезанную фотку и использовать ее как основную в проекте. } using (var ms = new MemoryStream(File.ReadAllBytes(templateImage))) // Don't use using!! { var img = (Bitmap)Image.FromStream(ms); pictureTemplate.Image = (Bitmap)img.Clone(); img.Dispose(); } RecalcRealTemplateImagePosition(); var eWidth = pictureTemplate.Width - 100; var TopEdgeTransformed = new RectangleF(pictureTemplate.Width / 2f - eWidth / 2f, 30, eWidth, eWidth); // затычка. нужен будет подгон верхней части бошки - сделаю var minX = Recognizer.GetMinX(); var topPoint = (TopEdgeTransformed.Y - ImageTemplateOffsetY) / ImageTemplateHeight; Recognizer.FaceRectRelative = new RectangleF(minX, topPoint, Recognizer.GetMaxX() - minX, Recognizer.BottomFace.Y - topPoint); var noseTip = Recognizer.FacialFeatures[2].Xy; var noseTop = Recognizer.FacialFeatures[22].Xy; var noseBottom = Recognizer.FacialFeatures[49].Xy; ProgramCore.MainForm.RenderControl.PhotoLoaded(Recognizer, TemplateImage); RenderTimer.Start(); if (Math.Abs(Recognizer.RotatedAngle) > 20) { MessageBox.Show("The head rotated more than 20 degrees. Please select an other photo..."); } } }
private void button2_Click(object sender, EventArgs e) { accessRotate = !accessRotate; if (!accessRotate) { button2.Text = "назад"; Model = new anModelLoader(); Model.LoadModel("C:\\Roman\\study\\4K8S\\PKG\\lab14\\Kuppe_Roman_PRI-117_lab_14\\Kuppe_Roman_PRI-117_KP\\bin\\Debug\\model\\KP2.ASE"); RenderTimer.Start(); } else { button2.Text = "в тир"; Model = null; } }
private void Form1_Load(object sender, EventArgs e) { // инициализация Glut Glut.glutInit(); Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH); // настройка параметров OpenGL для визуализации // Gl.glEnable(Gl.GL_CULL_FACE); Gl.glCullFace(Gl.GL_BACK); Gl.glFrontFace(Gl.GL_CCW); comboBox1.SelectedIndex = 0; ViewMode.SelectedIndex = 0; SurfacePick.SelectedIndex = 0; label1.Text = ("Rotation speed: ") + rotationSpeed; // Запуск таймера RenderTimer.Start(); }
public static void Main(string[] args) { Version = ReleaseInformations.GetVersion(); if (OperatingSystem.IsWindows() && !OperatingSystem.IsWindowsVersionAtLeast(10, 0, 17134)) { MessageBoxA(IntPtr.Zero, "You are running an outdated version of Windows.\n\nStarting on June 1st 2022, Ryujinx will only support Windows 10 1803 and newer.\n", $"Ryujinx {Version}", MB_ICONWARNING); } PreviewerDetached = true; Initialize(args); RenderTimer = new RenderTimer(); BuildAvaloniaApp().StartWithClassicDesktopLifetime(args); RenderTimer.Dispose(); }
public frmNewProfilePict2(string originalImagePath, Bitmap rotatedImage, Vector2 mouthRelative, Vector2 eyeRelative, Vector2 originalMouthRelative, Vector2 originalEyeRelative, float angle, Rectangle faceRectangle) { InitializeComponent(); textName.Text = originalImagePath; originalPath = originalImagePath; Angle = angle; FaceRectangle = faceRectangle; MouthRelative = mouthRelative; EyeRelative = eyeRelative; using (var bmp = new Bitmap(rotatedImage)) pictureTemplate.Image = (Bitmap)bmp.Clone(); RecalcRealTemplateImagePosition(); RenderTimer.Start(); }
public Form1() { RC = new RenderControl(); RC.Dock = DockStyle.Fill; Label L = new Label(); L.Location = new Point(20, 700 - L.Height * 5); L.AutoSize = true; L.Text = "Управление: W, S - вверх/вниз\nA, D - управление незакрепленным рычагом\nQ, E - поворот установки вокруг oY\nNum8, Num2 - поворот установки вокруг oX\n+, - для изменения масштаба"; L.BackColor = RC.BackColor; this.Controls.Add(L); this.Controls.Add(RC); KeyPreview = true; InitializeComponent(); RenderTimer.Start(); }
// событие загрузки формы private void Form1_Load(object sender, EventArgs e) { // инициализация бибилиотеки glut Glut.glutInit(); // инициализация режима экрана Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE); // инициализация библиотеки openIL Il.ilInit(); Il.ilEnable(Il.IL_ORIGIN_SET); // установка цвета очистки экрана (RGBA) Gl.glClearColor(255, 255, 255, 1); // установка порта вывода Gl.glViewport(0, 0, AnT.Width, AnT.Height); // активация проекционной матрицы Gl.glMatrixMode(Gl.GL_PROJECTION); // очистка матрицы Gl.glLoadIdentity(); // установка перспективы Glu.gluPerspective(30, AnT.Width / AnT.Height, 1, 100); // установка объектно-видовой матрицы Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); // начальные настройки OpenGL Gl.glEnable(Gl.GL_DEPTH_TEST); Gl.glEnable(Gl.GL_LIGHTING); Gl.glEnable(Gl.GL_LIGHT0); // активация таймера RenderTimer.Start(); }
private void Form1_Load(object sender, EventArgs e) { // инициализация Glut Glut.glutInit(); Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH); // очитка окна Gl.glClearColor(255, 255, 255, 1); // установка порта вывода в соотвествии с размерами элемента anT Gl.glViewport(0, 0, AnT.Width, AnT.Height); // настройка проекции Gl.glMatrixMode(Gl.GL_PROJECTION); Gl.glLoadIdentity(); Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 200); Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); // настройка параметров OpenGL для визуализации Gl.glEnable(Gl.GL_DEPTH_TEST); Gl.glEnable(Gl.GL_LIGHTING); Gl.glEnable(Gl.GL_LIGHT0); // количество элементов последовательности геометрии, на основе которых будет строится тело вращения count_elements = 8; // непосредственное заполнение точек. // после изменения данной геометрии мы сразу получим новое тело вращения. GeometricArray[0, 0] = 0; GeometricArray[0, 1] = 0; GeometricArray[0, 2] = 0; GeometricArray[1, 0] = 0.7; GeometricArray[1, 1] = 0; GeometricArray[1, 2] = 1; GeometricArray[2, 0] = 1.3; GeometricArray[2, 1] = 0; GeometricArray[2, 2] = 2; GeometricArray[3, 0] = 1.0; GeometricArray[3, 1] = 0; GeometricArray[3, 2] = 3; GeometricArray[4, 0] = 0.5; GeometricArray[4, 1] = 0; GeometricArray[4, 2] = 4; GeometricArray[5, 0] = 3; GeometricArray[5, 1] = 0; GeometricArray[5, 2] = 6; GeometricArray[6, 0] = 1; GeometricArray[6, 1] = 0; GeometricArray[6, 2] = 7; GeometricArray[7, 0] = 0; GeometricArray[7, 1] = 0; GeometricArray[7, 2] = 7.2f; // по умолчанию мы будем отрисовывать фигуру в режиме GL_POINTS comboBox1.SelectedIndex = 0; // построение геометрии тела вращения // принцип сводится к 2м цилкам - на основе первого перебираются // вершины в геометрической последовательности // второй использую параметр Iter производит поворот последней линии геометрии вокруг центра тела вращения // при этом используется заранее определенный угол angle который определяется как 2*Pi / количество медиан объекта // за счет выполнения этого алгоритма получается набор вершин описывающих оболочку тела врещения. // остается только соединить эти точки в режиме рисования примитивов для получения // визуализированного объекта // цикл по последовательности точек кривой, на основе которой будет построено тело вращения for (int ax = 0; ax < count_elements; ax++) { // цикла по медианам объекта, заранее определенным в программе for (int bx = 0; bx < Iter; bx++) { // для всех (bx > 0) элементов алгоритма используются предыдушая построенная последовательность // для ее поворота на установленный угол if (bx > 0) { double new_x = ResaultGeometric[ax, bx - 1, 0] * Math.Cos(Angle) - ResaultGeometric[ax, bx - 1, 1] * Math.Sin(Angle); double new_y = ResaultGeometric[ax, bx - 1, 0] * Math.Sin(Angle) + ResaultGeometric[ax, bx - 1, 1] * Math.Cos(Angle); ResaultGeometric[ax, bx, 0] = new_x; ResaultGeometric[ax, bx, 1] = new_y; ResaultGeometric[ax, bx, 2] = GeometricArray[ax, 2]; } else // для построения первой мидианы мы используем начальную кривую, описывая ее нулевым значением угла поворота { double new_x = GeometricArray[ax, 0] * Math.Cos(0) - GeometricArray[ax, 1] * Math.Sin(0); double new_y = GeometricArray[ax, 1] * Math.Sin(0) + GeometricArray[ax, 1] * Math.Cos(0); ResaultGeometric[ax, bx, 0] = new_x; ResaultGeometric[ax, bx, 1] = new_y; ResaultGeometric[ax, bx, 2] = GeometricArray[ax, 2]; } } } // активация таймера RenderTimer.Start(); }