Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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();
        }
Ejemplo n.º 4
0
 public override void Render(RenderEventArgs e, Shaders.ShaderProgram shaderProgram)
 {
     GL.DrawArrays(this.Mode, this.FirstVertex, this.VertexCount);
 }
Ejemplo n.º 5
0
 /// <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();
 }
Ejemplo n.º 6
0
        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
        }
Ejemplo n.º 7
0
 /// <summary>
 /// 执行此VBO的渲染操作。
 /// </summary>
 /// <param name="e"></param>
 /// <param name="shaderProgram">此VBO使用的shader program。</param>
 public abstract void Render(RenderEventArgs e, Shaders.ShaderProgram shaderProgram);
Ejemplo n.º 8
0
 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);
 }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
 internal void BindAttribLocation(Shaders.ShaderProgram program)
 {
     GL.BindAttribLocation(program.Ptr, UsageIndex, Name);
 }