public ColorScale(float min, float max, int width, int height) { this.width = width; this.height = height; this.min = min; this.max = max; length = 400.0f; barHeight = 25.0f; bottom = -height / 2.0f + 30.0f; left = -length / 2.0f; NumOfVertices = 0; cm = new Dictionary<float, Vector3>(); popis_txt = new Text2D(width,height); popis_dic = new Dictionary<string, Vector4>(); VAO = new int[1]; VBO = new int[2]; projectionMatrix = Matrix4.Identity; modelViewMatrix = Matrix4.Identity; VertexShader = new Shaders.Shader(); FragmentShader = new Shaders.Shader(); spMain = new Shaders.ShaderProgram(); SetColorScale(); SetText(); Init(); }
public Surface(int w, int h, string pathToFile, System.Windows.Forms.ToolStripProgressBar bar = null, System.Windows.Forms.ToolStripLabel label = null, Form1 form = null, bool shaderOption = false) { this.shaderOption = shaderOption; this.form = form; toolStripBar = bar; toolStripLabel = label; WhatToDraw = 1; Status = colrscl = rotate = false; minX = minY = min = float.MaxValue; maxX = maxY = max = float.MinValue; scale = 1.0f; angleX = angleY = 0.0f; width = w; height = h; NumOfIndexes = NumOfVertices = Xwidth = Ywidth = 0; //svetlo - smer,ambient,specular,diffuse light = new DirectionalLight(new Vector3(0.0f, 0.0f, -1.0f), new Vector3(1.0f, 1.0f, 1.0f), new Vector3(1.0f, 1.0f, 1.0f), new Vector3(1.0f, 1.0f, 1.0f)); //material - ambient,specular,diffuse,koeficienty - ambient, specular, diffuse, shininess material = new Material(0.29f, 0.86f, 0.57f, 128); //BigBrother = new Kamera(new Vector3(0.0f, 0.0f, 3.5f), new Vector3(0.0f, 0.0f, 0.0f), new Vector3(0.0f, 1.0f, 0.0f)); coords = new List<Vector3>(); VBO = new int[4]; VAO = new int[1]; VertexShader = new Shaders.Shader(); FragmentShader = new Shaders.Shader(); spMain = new Shaders.ShaderProgram(); var bw = new System.ComponentModel.BackgroundWorker(); bw.DoWork += (sender, args) => { // do your lengthy stuff here -- this will happen in a separate thread LoadData(pathToFile); if (Status = SetWidth()) { vertices = new Vector3[NumOfVertices]; color = new Vector3[NumOfVertices]; normals = new Vector3[NumOfVertices]; Indices = new List<int>(); Indexes = new int[NumOfIndexes]; //SetIndices(); SetIndexes(); if (Ywidth > Xwidth) { rotate = true; MatrixStore_Rotations = Matrix4.CreateFromAxisAngle(new Vector3(0.0f, 0.0f, 1.0f), -90.0f * (float)Math.PI / 180.0f); } } else { //dorobit sem este resetovanie progressBaru/labelu System.Windows.Forms.MessageBox.Show("Súbor " + pathToFile + " nemá podporu!", "Vnimanie!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); label lab = new label(SetToolStripLabel); progres progres = new progres(SetProgressBar); form.statusStrip1.Invoke(lab, "Súbor nemá podporu..."); form.statusStrip1.Invoke(progres, 0); } }; bw.RunWorkerCompleted += (sender, args) => { if (args.Error != null) // if an exception occurred during DoWork, System.Windows.Forms.MessageBox.Show(args.Error.ToString()); // do your error handling here if (Status) { colorScale = new ColorScale(min, max, width, height); CalculateColor(); ScaleHeights(10.0f); CalculateNormals(); InitScene(false); FirstDraw(); form.SetBoolean_surface(true); } else form.SetMenuStrip_Enabled(true); }; bw.RunWorkerAsync(); // starts the background worker }
private void LoadShaders() { VertexShader = new Shaders.Shader(); FragmentShader = new Shaders.Shader(); spMain = new Shaders.ShaderProgram(); if (!VertexShader.LoadShaderS(Kocka.Properties.Resources.textShaderVert, ShaderType.VertexShader)) System.Windows.Forms.MessageBox.Show("Nepodarilo sa nacitat vertex sahder (font rendering)!"); if (!FragmentShader.LoadShaderS(Kocka.Properties.Resources.textShaderFrag, ShaderType.FragmentShader)) System.Windows.Forms.MessageBox.Show("Nepodarilo sa nacitat fragment sahder (font rendering)!"); spMain.CreateProgram(); spMain.AddShaderToProgram(VertexShader); spMain.AddShaderToProgram(FragmentShader); spMain.LinkProgram(); //teraz mozem detachnut shadere a znicit ich VertexShader.DetachShader(spMain.GetProgramHandle()); FragmentShader.DetachShader(spMain.GetProgramHandle()); VertexShader.DeleteShader(); FragmentShader.DeleteShader(); // //toto staci raz, pozicia sa nebude menit spMain.UseProgram(); spMain.SetUniform("gSampler", 0); spMain.SetUniform("projectionMatrix", projectionMatrix); spMain.SetUniform("modelViewMatrix", modelViewMatrix); spMain.UseProgram(0); }