private void AnT_Load(object sender, EventArgs e) { GL.Enable(EnableCap.DepthTest); float[] light2_diffuse = { 0.9f, 0.9f, 1.0f }; //цвет появления float[] light2_position = { 0.0f, 5.0f, 30.0f, 0.0f }; GL.Enable(EnableCap.Light2); GL.Light(LightName.Light2, LightParameter.Diffuse, light2_diffuse); GL.Light(LightName.Light2, LightParameter.Position, light2_position); GL.Light(LightName.Light2, LightParameter.ConstantAttenuation, 0.01f); GL.Light(LightName.Light2, LightParameter.LinearAttenuation, 0.000009f); GL.Light(LightName.Light2, LightParameter.QuadraticAttenuation, 0.00009f); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); //Задаем начальные позиции PosCam = solS.position[1]; //камера PosPln = solS.position[11]; //Общая удаленность планет PosFract = solS.position[12]; //Фрактал cmbBoxArea.SelectedIndex = 1; //позиция планеты-гиганты cmbBoxPlanet.SelectedIndex = 0; //планеты - невыбрано cmbRule.SelectedIndex = 0; //управление объектом - камера timer.Interval = 20; timer.Tick += movementObjects; timer.Enabled = true; }
private void chFractal_CheckedChanged(object sender, EventArgs e) { ViewPythagorasTree = chFractal.Checked; chViewAbove.Checked = ViewPythagorasTree; PosCam = ViewPythagorasTree ? solS.position[0] : solS.position[1]; cmbBoxArea.SelectedIndex = ViewPythagorasTree ? 0 : 1; PosCam.Z = ViewPythagorasTree ? -12 : solS.position[1].Z; }
private void hideCometHalley(object sender, EventArgs e) { cometHalleyRun = false; chViewAbove.Checked = cometHalleyRun ? true : false; cometHalley.Image = Bitmap.FromFile(cometHalleyRun ? "images/asteroid-48.png" : "images/pastel-64.png"); PosCam = cometHalleyRun ? solS.position[2] : solS.position[1]; AngleZ = cometHalleyRun ? -5 : -5.6; //в минус влево tmComet.Enabled = false; tmComet = new Timer(); }
private void cometHalley_Click(object sender, EventArgs e) { tmComet.Interval = 20000; //Запуск таймера на 20 секунд tmComet.Tick += hideCometHalley; tmComet.Enabled = true; cometHalleyRun = !cometHalleyRun; chViewAbove.Checked = cometHalleyRun ? true : false; cometHalley.Image = Bitmap.FromFile(cometHalleyRun ? "images/asteroid-48.png" : "images/pastel-64.png"); PosCam = cometHalleyRun ? solS.position[2] : solS.position[1]; AngleZ = cometHalleyRun ? -5 : -5.6; //в минус влево }
private void cmbBoxArea_SelectedIndexChanged(object sender, EventArgs e) { AngleZ = -5.6; PosCam = cmbBoxArea.SelectedIndex == 0 ? solS.position[0] : solS.position[1]; if (cmbBoxArea.SelectedIndex == 0) { viewJupiter = viewSaturn = viewUran = false; } else { viewJupiter = viewSaturn = viewUran = true; } }
private void cmbBoxPlanet_SelectedIndexChanged(object sender, EventArgs e) { orbitsCheck.Checked = cmbBoxPlanet.SelectedIndex != 0 ? false : true; planetView = cmbBoxPlanet.SelectedIndex != 0 ? true : false; chViewAbove.Checked = cmbBoxPlanet.SelectedIndex != 0 ? true : false; //остановка движения планет при просмотре //pause = cmbBoxPlanet.SelectedIndex != 0 ? true : false; //pauseMotion.Image = Bitmap.FromFile(pause ? "images/play 64.png" : "images/pause 64.png"); //totalSpeedStart = pause ? 0 : speedMovement.Value * 0.001; if (cmbBoxPlanet.SelectedIndex == 0) { PosCam = solS.position[1]; } }
private void AnT_Paint(object sender, PaintEventArgs e) { // очистка буферов цвета и глубины GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.LoadIdentity(); GL.Rotate(AngleZ, 0.0, 1.0, 0.0); // поворот изображения GL.Translate(PosCam.X, PosCam.Y, PosCam.Z); //переащаем на нужную позицию //рисуем сферу космоса solS.DrawSpace(solS.Pictures[0], speedSpace); //рисуем солнце if (chExplosion.Checked) { solS.RenderExplosion(); } solS.DrawSun(solS.Pictures[1], PosSun.X, PosSun.Y, PosSun.Z, speedSpace); //рисуем планеты if (viewMercury)// текстура, скорость, скоростьВращения удаленность, радиус { solS.position[3] = solS.DrawPlanet(solS.Pictures[2], totalSpeed / 2, rotateSpeed / 2, 5 + PosPln.X, realSize ? 0.0114 : 0.114); } if (viewVenus) { solS.position[4] = solS.DrawPlanet(solS.Pictures[3], totalSpeed / 3.5, rotateSpeed / 3.5, 6.5 + PosPln.X, realSize ? 0.0295 : 0.295); } if (viewEarth) { solS.position[5] = solS.DrawPlanet(solS.Pictures[4], totalSpeed / 5, rotateSpeed / 5, 8 + PosPln.X, realSize ? 0.03 : 0.3); } if (viewMars) { solS.position[6] = solS.DrawPlanet(solS.Pictures[5], totalSpeed / 6.5, rotateSpeed / 6.5, 9.1 + PosPln.X, realSize ? 0.0174 : 0.174); } if (viewJupiter) { solS.position[7] = solS.DrawPlanet(solS.Pictures[6], totalSpeed / 9, rotateSpeed / 9, 12.1 + PosPln.X, realSize ? 0.1 : 1); } if (viewSaturn) { solS.position[8] = solS.DrawPlanet(solS.Pictures[7], totalSpeed / 12, rotateSpeed / 12, 14.5 + PosPln.X, realSize ? 0.08 : 0.8); } if (viewUran) { solS.position[9] = solS.DrawPlanet(solS.Pictures[8], totalSpeed / 15.5, rotateSpeed / 15.5, 16.9 + PosPln.X, realSize ? 0.07 : 0.7); } if (viewNeptun) { solS.position[10] = solS.DrawPlanet(solS.Pictures[9], totalSpeed / 19, rotateSpeed / 19, 19 + PosPln.X, realSize ? 0.05 : 0.5); } if (cometHalleyRun) { solS.DrawComet(solS.Pictures[10], totalSpeed * 2, 21, 0.094); } if (ViewPythagorasTree) { solS.DrawPythagorasTree(PosFract.X, PosFract.Y, PosFract.Z); } if (chColorsGlob.Checked) { solS.PlayColors(); } //крупный план планет if (planetView) { GL.Rotate(0, 1.0, 1.0, 1.0); // поворот изображения switch (cmbBoxPlanet.SelectedIndex) { case 1: { PosCam = solS.position[3]; PosCam.Z = -0.7; break; } case 2: { PosCam = solS.position[4]; PosCam.Z = -1; break; } case 3: { PosCam = solS.position[5]; PosCam.Z = -1; break; } case 4: { PosCam = solS.position[6]; PosCam.Z = -0.8; break; } case 5: { PosCam = solS.position[7]; PosCam.Z = -2.2; break; } case 6: { PosCam = solS.position[8]; PosCam.Z = -1.8; break; } case 7: { PosCam = solS.position[9]; PosCam.Z = -1.8; break; } case 8: { PosCam = solS.position[10]; PosCam.Z = -1.7; break; } } } GL.Flush(); GL.Finish(); AnT.SwapBuffers(); }
private void планетыгигантыToolStripMenuItem_Click(object sender, EventArgs e) { PosCam = solS.position[1]; AngleZ = -5.6; }
private void планетыЗемнойГруппыMenuItem_Click(object sender, EventArgs e) { PosCam = solS.position[0]; AngleZ = -5.6; }