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(); }
/// <summary> /// 在使用<see cref="VertexArrayObject"/>后,此方法只会执行一次。 /// </summary> /// <param name="e"></param> /// <param name="shaderProgram"></param> public override void Render(RenderEventArgs e, Shaders.ShaderProgram shaderProgram) { uint location = shaderProgram.GetAttributeLocation(this.VarNameInVertexShader); GL.BindBuffer(BufferTarget.ArrayBuffer, this.BufferID); GL.VertexAttribPointer(location, this.DataSize, this.DataType, false, 0, IntPtr.Zero); GL.EnableVertexAttribArray(location); }
/// <summary> /// 在OpenGL中创建VAO。 /// 创建的过程就是执行一次渲染的过程。 /// </summary> /// <param name="e"></param> /// <param name="shaderProgram"></param> public void Create(RenderEventArgs e, Shaders.ShaderProgram shaderProgram) { if (this.ID != 0) { throw new Exception(string.Format("ID[{0}] is already generated!", this.ID)); } uint[] buffers = new uint[1]; GL.GenVertexArrays(1, buffers); this.ID = buffers[0]; this.Bind(); foreach (var item in this.bufferRenderers) { item.Render(e, shaderProgram); } this.Unbind(); }
public override void Render(RenderEventArgs e, Shaders.ShaderProgram shaderProgram) { GL.DrawArrays(this.Mode, this.FirstVertex, this.VertexCount); }
/// <summary> /// 执行一次渲染的过程。 /// </summary> /// <param name="e"></param> /// <param name="shaderProgram"></param> public void Render(RenderEventArgs e, Shaders.ShaderProgram shaderProgram) { this.Bind(); this.indexBufferRenderer.Render(e, shaderProgram); this.Unbind(); }
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 }
/// <summary> /// 执行此VBO的渲染操作。 /// </summary> /// <param name="e"></param> /// <param name="shaderProgram">此VBO使用的shader program。</param> public abstract void Render(RenderEventArgs e, Shaders.ShaderProgram shaderProgram);
public override void Render(RenderEventArgs e, Shaders.ShaderProgram shaderProgram) { GL.BindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, this.BufferID); GL.DrawElements(this.Mode, this.ElementCount, (uint)this.Type, IntPtr.Zero); }
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); }
internal void BindAttribLocation(Shaders.ShaderProgram program) { GL.BindAttribLocation(program.Ptr, UsageIndex, Name); }