1、下载visual studio 2017并安装,安装选项要包括C#编程语言。下载地址https://visualstudio.microsoft.com/
2、建立项目,选择c#语言->windows桌面->windows窗体应用,并确认。
3、选择工具->Nuget包管理器->管理解决方案的Nuget包->浏览->SharpGL和SharpGl.WinForms->安装。
4、添加SharpGL pannel。1:(图1)在工具栏底部点击鼠标右键打开菜单,点击 选择项2:(图2)选择浏览,并找到 (你的项目地址)\packages\SharpGL.WinForms.2.4.0.0\lib\net40\SharpGL.WinForms.dll 添加3:(图3)将openGLControl控件拖动到Form面板上,所有初步工作就已经完成了。
5、这里开始OpenGL初始化工作点击OpenGlControl控件,点击属性,建立3个函数,分别是OpenGLdraw(循环作图函数),OpenGLInitialized(初始化函数),Resized(窗体改变回调函数)。初始化函数较为复杂,这里用最简单的初始化方法,在函数内写入gl.Enable(OpenGL.GL_TEXTURE_2D);gl.Enable(OpenGL.GL_BLEND);gl.ShadeModel(OpenGL.GL_FLAT);gl.BlendFunc(OpenGL.GL_SRC_ALPHA, OpenGL.GL_ONE_MINUS_SRC_ALPHA);在resized函数内写入 gl.MatrixMode(OpenGL.GL_PROJECTION); gl.LoadIdentity(); gl.Ortho2D(0, openGLControl1.Width, openGLControl1.Height, 0); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Viewport(0, 0, openGLControl1.Width, openGLControl1.Height);至此,OpenGl的所有初始化工作已经完成,这里是初始化的2D渲染框架,3D稍有不同,这里不多做介绍。
6、现在开始初始化Shader程序SharpGL.VertexBuffers.VertexBuffer VBO = new VertexBuffer(); SharpGL.VertexBuffers.VertexBufferArray VAO = new VertexBufferArray(); VertexShader VertexShaderT = new VertexShader(); FragmentShader FragmeShaderT = new FragmentShader(); public ShaderProgram program = new ShaderProgram(); public void InitShader(SharpGL.OpenGL gl, SharpGL.SceneGraph.Assets.Texture[] texturepic) { gl.Enable(OpenGL.GL_DEPTH_TEST); gl.ShadeModel(OpenGL.GL_SMOOTH); VertexShaderT.CreateInContext(gl); VertexShaderT.SetSource(textFileRead("Shader\\顶点着色器程序.vert")); FragmeShaderT.CreateInContext(gl); FragmeShaderT.SetSource(textFileRead("Shader\\片段着色器程序.frag")); program.CreateInContext(gl); // Compile them both. VertexShaderT.Compile(); FragmeShaderT.Compile(); // Build a program. program.CreateInContext(gl); // Attach the shaders. program.AttachShader(VertexShaderT); program.AttachShader(FragmeShaderT); program.Link(); gl.UseProgram(program.ProgramObject); }至此,着色器程序初始化完成
7、着色器程序,这里用最简单的程序,方便理解。顶点着色器程序void main(){gl_TexCoord[0] = gl_MultiTexCoord0;gl_Position = ftransform();}片段着色器程序void main(){gl_FragColor = vec4(1,1,1,1);}着色器程序编辑完成
8、开始使用SHADER_PROGRAM.program.Push(gl, null);gl.BindFramebufferEXT(OpenGL.GL_FRAMEBUFFER_EXT, SHADER_PROGRAM2.fboname[1]);//FBO渲染gl.BindTexture(OpenGL.GL_TEXTURE_2D, SHADER_PROGRAM2.imageID[0]);//使用上一次渲染到纹理的缓存gl.ClearColor(0, 0, 0, 0);gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);DRAW_POLYGON();//画你想画的东西SHADER_PROGRAM.program.Pop(gl, null);//显示合成图像SHADER_PROGRAM2.program.Push(gl, null);gl.BindFramebufferEXT(OpenGL.GL_FRAMEBUFFER_EXT, 0);//渲染到屏幕 gl.ClearColor(0, 0, 0, 0);gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);DRAW_POLYGON();//作图SHADER_PROGRAM2.program.Pop(gl, null);这就是使用Shader和FBO的完整流程。