private void comboBoxTypeFigure_SelectedIndexChanged(object sender, EventArgs e) { _typeObjectCreate = ((ComboboxDataSourceTypeFigure)comboBoxTypeFigure.SelectedItem).TypeFigure; if (_typeObjectCreate == TypeObjectCreate.SolidCube) { labelAngelX.Enabled = false; labelAngelY.Enabled = false; labelAngelZ.Enabled = false; numericUpDownAngelX.Enabled = false; numericUpDownAngelY.Enabled = false; numericUpDownAngelZ.Enabled = false; labelColBreakX.Enabled = false; labelColBreakY.Enabled = false; labelCoeffSX.Enabled = false; labelCoeffSY.Enabled = false; textBoxColBreakX.Enabled = false; textBoxColBreakY.Enabled = false; textBoxCoeffSX.Enabled = false; textBoxCoeffSY.Enabled = false; } if (_typeObjectCreate == TypeObjectCreate.Plane) { labelAngelX.Enabled = true; labelAngelY.Enabled = true; labelAngelZ.Enabled = true; numericUpDownAngelX.Enabled = true; numericUpDownAngelY.Enabled = true; numericUpDownAngelZ.Enabled = true; labelColBreakX.Enabled = false; labelColBreakY.Enabled = false; labelCoeffSX.Enabled = false; labelCoeffSY.Enabled = false; textBoxColBreakX.Enabled = false; textBoxColBreakY.Enabled = false; textBoxCoeffSX.Enabled = false; textBoxCoeffSY.Enabled = false; } if (_typeObjectCreate == TypeObjectCreate.Sphere) { labelAngelX.Enabled = false; labelAngelY.Enabled = false; labelAngelZ.Enabled = false; numericUpDownAngelX.Enabled = false; numericUpDownAngelY.Enabled = false; numericUpDownAngelZ.Enabled = false; labelColBreakX.Enabled = true; labelColBreakY.Enabled = true; labelCoeffSX.Enabled = true; labelCoeffSY.Enabled = true; textBoxColBreakX.Enabled = true; textBoxColBreakY.Enabled = true; textBoxCoeffSX.Enabled = true; textBoxCoeffSY.Enabled = true; } }
public GeometricInfo(Vector4 locColorObj, float shiftx = 0, float shifty = 0, float shiftz = 0, float locSide = 1.0f, int locColBreakX = 1, int locColBreakY = 1, int locCoeffSX = 1, int locCoeffSY = 1, int locAngleX = 0, int locAngleY = 0, int locAngleZ = 0, TypeObjectCreate locTypeObjectCreate = TypeObjectCreate.NonTypeObject) { side = locSide; StartPosition = new Vector3(shiftx, shifty, shiftz); colBreakX = locColBreakX; colBreakY = locColBreakY; coeffSX = locCoeffSX; coeffSY = locCoeffSY; StartAngleX = locAngleX; StartAngleY = locAngleY; StartAngleZ = locAngleZ; typeObjectCreate = locTypeObjectCreate; ColorObj = locColorObj; TranslationMatrix = Matrix4.CreateTranslation(StartPosition); RotationMatrix = Matrix4.CreateRotationX(MathHelper.DegreesToRadians(StartAngleX)) * Matrix4.CreateRotationY(MathHelper.DegreesToRadians(StartAngleY)) * Matrix4.CreateRotationZ(MathHelper.DegreesToRadians(StartAngleZ)); }
public GeometricInfo(GeometricInfo geometricInfo) { side = geometricInfo.side; StartPosition = geometricInfo.StartPosition; colBreakX = geometricInfo.colBreakX; colBreakY = geometricInfo.colBreakY; coeffSX = geometricInfo.coeffSX; coeffSY = geometricInfo.coeffSX; StartAngleX = geometricInfo.StartAngleX; StartAngleY = geometricInfo.StartAngleY; StartAngleZ = geometricInfo.StartAngleZ; typeObjectCreate = geometricInfo.typeObjectCreate; ColorObj = geometricInfo.ColorObj; TranslationMatrix = geometricInfo.TranslationMatrix; RotationMatrix = geometricInfo.RotationMatrix; }
public GeometricInfo(Vector3 locStartPosition, float colorR = 0, float colorG = 0, float colorB = 0, float colorA = 0, float locSide = 1.0f, int locColBreakX = 1, int locColBreakY = 1, int locCoeffSX = 1, int locCoeffSY = 1, int locAngleX = 0, int locAngleY = 0, int locAngleZ = 0, TypeObjectCreate locTypeObjectCreate = TypeObjectCreate.NonTypeObject) { side = locSide; StartPosition = locStartPosition; colBreakX = locColBreakX; colBreakY = locColBreakY; coeffSX = locCoeffSX; coeffSY = locCoeffSY; StartAngleX = locAngleX; StartAngleY = locAngleY; StartAngleZ = locAngleZ; typeObjectCreate = locTypeObjectCreate; ColorObj = new Vector4(colorR, colorG, colorB, colorA); TranslationMatrix = Matrix4.CreateTranslation(StartPosition); RotationMatrix = Matrix4.CreateRotationX(MathHelper.DegreesToRadians(StartAngleX)) * Matrix4.CreateRotationY(MathHelper.DegreesToRadians(StartAngleY)) * Matrix4.CreateRotationZ(MathHelper.DegreesToRadians(StartAngleZ)); }
public RenderObject(Vertex[] vertices, Vector3 startPosition, Color4 color, Color4 locСolorСhoice, TypeObjectRenderLight typeObject = TypeObjectRenderLight.SimpleObject, bool plane = false, float locSide = 1, TypeObjectCreate locTypeObjectCreate = TypeObjectCreate.SolidCube, int locColBreakX = 1, int locColBreakY = 1, int locCoeffSX = 1, int locCoeffSY = 1, int locAngleX = 0, int locAngleY = 0, int locAngleZ = 0) { geometricInfo = new GeometricInfo(startPosition, new Vector4(color.R, color.G, color.B, color.A), locSide, locColBreakX, locColBreakY, locCoeffSX, locCoeffSY, locAngleX, locAngleY, locAngleZ, locTypeObjectCreate); trajctoryRenderObject = new TrajctoryRenderObject(); _VerticeCount = vertices.Length; _VertexArray = GL.GenVertexArray(); TypeObject = typeObject; GL.GenBuffers(1, out _Buffer); //PolygonMode.Line GL.BindVertexArray(_VertexArray); GL.BindBuffer(BufferTarget.ArrayBuffer, _Buffer); GL.NamedBufferStorage(_Buffer, Vertex.Size * _VerticeCount, // the size needed by this buffer vertices, // data to initialize with BufferStorageFlags.MapWriteBit); // at this point we will only write to the buffer // create vertex array and buffer here GL.VertexArrayAttribBinding(_VertexArray, 1, 0); GL.EnableVertexArrayAttrib(_VertexArray, 1); GL.VertexArrayAttribFormat( _VertexArray, 1, // attribute index, from the shader location = 0 4, // size of attribute, vec4 VertexAttribType.Float, // contains floats false, // does not need to be normalized as it is already, floats ignore this flag anyway 0); // relative offset, first item GL.VertexArrayAttribBinding(_VertexArray, 2, 0); GL.EnableVertexArrayAttrib(_VertexArray, 2); GL.VertexArrayAttribFormat( _VertexArray, 2, // attribute index, from the shader location = 1 4, // size of attribute, vec4 VertexAttribType.Float, // contains floats false, // does not need to be normalized as it is already, floats ignore this flag anyway 16); // relative offset after a vec4 GL.VertexArrayAttribBinding(_VertexArray, 3, 0); GL.EnableVertexArrayAttrib(_VertexArray, 3); GL.VertexArrayAttribFormat( _VertexArray, 3, // attribute index, from the shader location = 2 4, // size of attribute, vec4 VertexAttribType.Float, // contains floats false, // does not need to be normalized as it is already, floats ignore this flag anyway 32); // relative offset after a vec4 + vec4 _Initialized = true; GL.VertexArrayVertexBuffer(_VertexArray, 0, _Buffer, IntPtr.Zero, Vertex.Size); ColorСhoice.X = locСolorСhoice.R; ColorСhoice.Y = locСolorСhoice.G; ColorСhoice.Z = locСolorСhoice.B; ColorСhoice.W = locСolorСhoice.A; if (plane) { bufferProjectionShadow(vertices); } }
public LightObject(Vertex[] vertices, Color4 color, Color4 color_choice, Vector3 position, Vector4 attribute, Vector3 lighVecNormalized, Vector3 diffusionIntensity, Vector3 angle_speed, int programBlock = -1, string nameBlock = null, float side = 1, TypeObjectCreate locTypeObjectCreate = TypeObjectCreate.SolidCube, int locColBreakX = 1, int locColBreakY = 1, int locCoeffSX = 1, int locCoeffSY = 1, int locAngleX = 0, int locAngleY = 0, int locAngleZ = 0) : base(vertices, position, color, color_choice, TypeObjectRenderLight.LightSourceObject, locSide: side, locTypeObjectCreate: locTypeObjectCreate, locColBreakX: locColBreakX, locColBreakY: locColBreakY, locCoeffSX: locCoeffSX, locCoeffSY: locCoeffSY, locAngleX: locAngleX, locAngleY: locAngleY, locAngleZ: locAngleZ) { Position = position; //Позиция источника StartPosition = position; Angel_speed = angle_speed; //X - Скорость и направление Y и Z - угол поворота по соответствующим осям Attribute = attribute; //Я ещё придумаю зачем я это добавил LightVecNormalized = lighVecNormalized; DiffusionIntensity = diffusionIntensity; ColorRadiation.X = color.R; ColorRadiation.Y = color.G; ColorRadiation.Z = color.B; ColorRadiation.W = color.A; if (programBlock != -1) { if (!string.IsNullOrWhiteSpace(nameBlock)) { InitBufferForBlock(programBlock, nameBlock); } else { InitBufferForBlock(programBlock); } } }
public DlgAddEditAnFigure(GeometricInfo geometricInfo, bool NewFigure = true) { Text = "Изменение аналитической фигуры"; InitializeComponent(); InitComboBox(); _typeObjectCreate = geometricInfo.typeObjectCreate; comboBoxTypeFigure.SelectedItem = ((List <ComboboxDataSourceTypeFigure>)comboBoxTypeFigure.DataSource).Where(x => x.TypeFigure == _typeObjectCreate).FirstOrDefault(); comboBoxTypeFigure.Enabled = !NewFigure; trackBarAlpha.Value = (int)(geometricInfo.ColorObj.W * 10); //Округляем как можем textBoxSide.Text = geometricInfo.side.ToString(); Vector3 translation = geometricInfo.TranslationMatrix.ExtractTranslation(); textBoxShiftX.Text = translation.X.ToString(); textBoxShiftY.Text = translation.Y.ToString(); textBoxShiftZ.Text = translation.Z.ToString(); textBoxColBreakX.Text = geometricInfo.colBreakX.ToString(); textBoxColBreakY.Text = geometricInfo.colBreakY.ToString(); textBoxCoeffSX.Text = geometricInfo.coeffSX.ToString(); textBoxCoeffSY.Text = geometricInfo.coeffSY.ToString(); var anlgeQauternion = geometricInfo.RotationMatrix.ExtractRotation(); var tau = Math.Acos(anlgeQauternion.W); var ax = 0; var ay = 0; var az = 0; if (Math.Abs(tau) > 0) { ax = Convert.ToInt32(Math.Round(anlgeQauternion.X / Math.Sin(tau) * tau / MathHelper.PiOver2 * 180, MidpointRounding.AwayFromZero)); ay = Convert.ToInt32(Math.Round(anlgeQauternion.Y / Math.Sin(tau) * tau / MathHelper.PiOver2 * 180, MidpointRounding.AwayFromZero)); az = Convert.ToInt32(Math.Round(anlgeQauternion.Z / Math.Sin(tau) * tau / MathHelper.PiOver2 * 180, MidpointRounding.AwayFromZero)); } numericUpDownAngelX.Value = ax; numericUpDownAngelY.Value = ay; numericUpDownAngelZ.Value = az; if (_typeObjectCreate == TypeObjectCreate.SolidCube) { labelAngelX.Enabled = false; labelAngelY.Enabled = false; labelAngelZ.Enabled = false; numericUpDownAngelX.Enabled = true; numericUpDownAngelY.Enabled = true; numericUpDownAngelZ.Enabled = true; labelColBreakX.Enabled = false; labelColBreakY.Enabled = false; labelCoeffSX.Enabled = false; labelCoeffSY.Enabled = false; textBoxColBreakX.Enabled = false; textBoxColBreakY.Enabled = false; textBoxCoeffSX.Enabled = false; textBoxCoeffSY.Enabled = false; } if (_typeObjectCreate == TypeObjectCreate.Plane) { labelAngelX.Enabled = true; labelAngelY.Enabled = true; labelAngelZ.Enabled = true; numericUpDownAngelX.Enabled = true; numericUpDownAngelY.Enabled = true; numericUpDownAngelZ.Enabled = true; labelColBreakX.Enabled = false; labelColBreakY.Enabled = false; labelCoeffSX.Enabled = false; labelCoeffSY.Enabled = false; textBoxColBreakX.Enabled = false; textBoxColBreakY.Enabled = false; textBoxCoeffSX.Enabled = false; textBoxCoeffSY.Enabled = false; } if (_typeObjectCreate == TypeObjectCreate.Sphere) { labelAngelX.Enabled = false; labelAngelY.Enabled = false; labelAngelZ.Enabled = false; numericUpDownAngelX.Enabled = true; numericUpDownAngelY.Enabled = true; numericUpDownAngelZ.Enabled = true; labelColBreakX.Enabled = true; labelColBreakY.Enabled = true; labelCoeffSX.Enabled = true; labelCoeffSY.Enabled = true; textBoxColBreakX.Enabled = true; textBoxColBreakY.Enabled = true; textBoxCoeffSX.Enabled = true; textBoxCoeffSY.Enabled = true; } }
public DlgAddEditAnFigure(TypeObjectCreate locTypeObjectCreate = TypeObjectCreate.SolidCube, float locAlphaObject = 1.0f, float locSide = 1.0f, float shiftx = 0, float shifty = 0, float shiftz = 0, int locColBreakX = 1, int locColBreakY = 1, int locCoeffSX = 1, int locCoeffSY = 1, int locAngleX = 0, int locAngleY = 0, int locAngleZ = 0, bool NewFigure = true) { Text = "Изменение аналитической фигуры"; InitializeComponent(); InitComboBox(); comboBoxTypeFigure.SelectedItem = ((List <ComboboxDataSourceTypeFigure>)comboBoxTypeFigure.DataSource).Where(x => x.TypeFigure == locTypeObjectCreate).FirstOrDefault(); comboBoxTypeFigure.Enabled = NewFigure; _typeObjectCreate = locTypeObjectCreate; trackBarAlpha.Value = (int)(locAlphaObject * 10); //Округляем как можем textBoxSide.Text = locSide.ToString(); textBoxShiftX.Text = shiftx.ToString(); textBoxShiftY.Text = shifty.ToString(); textBoxShiftZ.Text = shiftz.ToString(); textBoxColBreakX.Text = locColBreakX.ToString(); textBoxColBreakY.Text = locColBreakY.ToString(); textBoxCoeffSX.Text = locCoeffSX.ToString(); textBoxCoeffSY.Text = locCoeffSY.ToString(); numericUpDownAngelX.Value = locAngleX; numericUpDownAngelY.Value = locAngleY; numericUpDownAngelZ.Value = locAngleZ; if (_typeObjectCreate == TypeObjectCreate.SolidCube) { labelAngelX.Enabled = false; labelAngelY.Enabled = false; labelAngelZ.Enabled = false; numericUpDownAngelX.Enabled = false; numericUpDownAngelY.Enabled = false; numericUpDownAngelZ.Enabled = false; labelColBreakX.Enabled = false; labelColBreakY.Enabled = false; labelCoeffSX.Enabled = false; labelCoeffSY.Enabled = false; textBoxColBreakX.Enabled = false; textBoxColBreakY.Enabled = false; textBoxCoeffSX.Enabled = false; textBoxCoeffSY.Enabled = false; } if (_typeObjectCreate == TypeObjectCreate.Plane) { labelAngelX.Enabled = true; labelAngelY.Enabled = true; labelAngelZ.Enabled = true; numericUpDownAngelX.Enabled = true; numericUpDownAngelY.Enabled = true; numericUpDownAngelZ.Enabled = true; labelColBreakX.Enabled = false; labelColBreakY.Enabled = false; labelCoeffSX.Enabled = false; labelCoeffSY.Enabled = false; textBoxColBreakX.Enabled = false; textBoxColBreakY.Enabled = false; textBoxCoeffSX.Enabled = false; textBoxCoeffSY.Enabled = false; } if (_typeObjectCreate == TypeObjectCreate.Sphere) { labelAngelX.Enabled = false; labelAngelY.Enabled = false; labelAngelZ.Enabled = false; numericUpDownAngelX.Enabled = false; numericUpDownAngelY.Enabled = false; numericUpDownAngelZ.Enabled = false; labelColBreakX.Enabled = true; labelColBreakY.Enabled = true; labelCoeffSX.Enabled = true; labelCoeffSY.Enabled = true; textBoxColBreakX.Enabled = true; textBoxColBreakY.Enabled = true; textBoxCoeffSX.Enabled = true; textBoxCoeffSY.Enabled = true; } }