public void Init(object sender, OpenGLEventArgs args) { SceneControl = sender as OpenGLControlJOG; // Set up the view. MvpBuilder.FovRadians = (float)Math.PI / 2f; // Set FOV to 90° MvpBuilder.Far = 100f; MvpBuilder.Near = 0.01f; MvpBuilder.Width = (int)SceneControl.ActualWidth; MvpBuilder.Height = (int)SceneControl.ActualHeight; MvpBuilder.TranslationZ = -10; MvpBuilder.BuildPerspectiveProjection(); MvpBuilder.BuildTurntableModelview(); // Create a shader program. NmProgram = new NormalMaterialProgram(GL); ProjectionMatrix = MvpBuilder.ProjectionMatrix; ModelviewMatrix = MvpBuilder.ModelviewMatrix; NormalMatrix = mat3.identity(); NmProgram.LightPosition = new vec3(5, 10, 15); AddData(GL); GL.Enable(OpenGL.GL_DEPTH_TEST); GL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); }
public void PrepareVAO(OpenGL gl, NormalMaterialProgram program) { var vertArrIds = new uint[1]; gl.GenVertexArrays(1, vertArrIds); Vao = vertArrIds[0]; gl.BindVertexArray(Vao); BindVBOs(gl, program); gl.EnableVertexAttribArray(0); gl.BindVertexArray(0); }
public void BindVBOs(OpenGL gl, NormalMaterialProgram program) { var attribPos = program.Attribs["Position"]; gl.BindBuffer(_vboTarget, Position); gl.VertexAttribPointer(attribPos, 3, OpenGL.GL_FLOAT, false, 0, IntPtr.Zero); gl.EnableVertexAttribArray(attribPos); attribPos = program.Attribs["Normal"]; gl.BindBuffer(_vboTarget, Normal); gl.VertexAttribPointer(attribPos, 3, OpenGL.GL_FLOAT, false, 0, IntPtr.Zero); gl.EnableVertexAttribArray(attribPos); attribPos = program.Attribs["AmbientMaterial"]; gl.BindBuffer(_vboTarget, AmbientMaterial); gl.VertexAttribPointer(attribPos, 3, OpenGL.GL_FLOAT, false, 0, IntPtr.Zero); gl.VertexAttribDivisor(attribPos, 1); gl.EnableVertexAttribArray(attribPos); attribPos = program.Attribs["DiffuseMaterial"]; gl.BindBuffer(_vboTarget, DiffuseMaterial); gl.VertexAttribPointer(attribPos, 3, OpenGL.GL_FLOAT, false, 0, IntPtr.Zero); gl.VertexAttribDivisor(attribPos, 1); gl.EnableVertexAttribArray(attribPos); attribPos = program.Attribs["SpecularMaterial"]; gl.BindBuffer(_vboTarget, SpecularMaterial); gl.VertexAttribPointer(attribPos, 3, OpenGL.GL_FLOAT, false, 0, IntPtr.Zero); gl.VertexAttribDivisor(attribPos, 1); gl.EnableVertexAttribArray(attribPos); attribPos = program.Attribs["ShininessValue"]; gl.BindBuffer(_vboTarget, ShininessValue); gl.VertexAttribPointer(attribPos, 1, OpenGL.GL_FLOAT, false, 0, IntPtr.Zero); gl.VertexAttribDivisor(attribPos, 1); gl.EnableVertexAttribArray(attribPos); gl.BindBuffer(_iboTarget, Ibo); }