Skip to content

AlexanLee/CSharpGL

 
 

Repository files navigation

CSharpGL

纠集整理SharpGL,GLM,SharpFont等开源库,努力做一个更好用的纯C#版OpenGL。

CSharpGL(0)一个易学易用的C#版OpenGL

CSharpGL是我受到SharpGL的启发,在整理了SharpGL,GLM,SharpFont等开源库的基础上,做的一个新的C#版OpenGL库,希望它能做到易学易用,简化OpenGL开发,减少低级错误,帮助初学者更快地由入门到精通。

CSharpGL有什么?

下面是目前CSharpGL的一部分示例。你可以:

绘制模型

你可以用legacy opengl(glVertex)或modern opengl(VBO+Shader)绘制模型。当然这是最基本的功能。CSharpGL提供一个GLCanvas控件供你进行绘制。

使用纹理(贴图)

你可以用legacy opengl(glVertex)或modern opengl(VBO+Shader)为模型贴上贴图。例如下面是用一个含有ASCII码的贴图贴在一个Quad上实现的。(此例还含有Blend相关的操作)

用Shader实现光照效果

CSharpGL集成了一些《OpenGL Programming Guide》的Demo。例如在GLSL中实现光照效果。

用Shader制作Fur效果

下图所示的模型数据中只有蓝色的人物,外层的白色毛毛是geometry shader根据模型顶点信息制作出来的。这也是从redbook转换到C#的Demo之一。

Particle Simulator

ParticleSimulator用Compute Shader和glMapBufferRange实现了一个简单的例子效果。这也是从redbook转换到C#的Demo之一。

绘制文字

CSharpGL提供一个PointSpriteStringElement类型实现绘制文字的功能。你可以加载任何TTF/TTC文件中的字形来绘制文字。

PointSprite示例

CSharpGL提供了多个使用PointSprite进行绘制的Demo。CSharpGL还提供了很多其他OpenGL功能的用法的示例代码。你可以在CSharpGL.Winforms.Demo项目中找到所有的Demo。

对VBO内的图元的拾取

CSharpGL提供IColorCodedPicking接口用以实现拾取功能。你可以在下面的Demo程序中了解如何使用IColorCodedPicking及其辅助类型。

绘制UI控件

在上面的示例中你看到有的窗口左下角有一个坐标系,这就是一种UI元素。下面是另一个UI元素(色标)。UI元素可以指定其大小、是否绑定到上下左右边框等属性。只需实现IUILayout接口即可自动实现UI布局。你可以从示例代码中看到这一布局机制是如何实现的。这一布局机制对legacy OpenGL和modern OpenGL的效果相同。

其它

CSharpGL还提供了很多其他的Demo,如对基础类型UnmanagedArray的使用、Debugging的使用、MapBuffer、Feedback、Instanced Rendering、3D纹理等。我会继续添加新的功能和Demo。你既可以通过CSharpGL来学习OpenGL,也可以用CSharpGL来编写OpenGL程序。

CSharpGL为了降低出错可能,为OpenGL各项功能提供了针对性的枚举类型、重载方法和易于理解的对象。例如等BufferTarget、BufferUsage、GetTarget、PolygonMode、PrimitiveMode、ShadeModel等枚举类型,Camera、ShaderProgram、SceneElementBase、RenderContext、Texture2D等通用的类型,IColorCodedPicking、IUILayout、IMVP、IRenderable等包含着各自的功能机制的接口。

CSharpGL将为每项功能、机制编写文档,讲解其原理和实现,并提供Demo。为了让我能在未来多少年后都能顺利地重拾OpenGL,我一定会尽心地把文档做好。

CSharpGL还拿来了GLM、SharpFont等开源项目,用于计算矩阵、获取字形贴图等操作。

计划

我计划针对所有实现了的功能、机制逐个写一篇随笔。本篇算是开篇。

总结

学OpenGL有2年了,从NEHE到SharpGL,从《3D Math Primer for Graphics and Game Development》到《OpenGL Programming Guide》,算是对OpenGL有了初级的认识。最近我纠集整理了SharpGL,GLM,SharpFont等开源库,想做一个更好用的纯C#版OpenGL。欢迎对OpenGL有兴趣的同学加入。

About

纠集整理SharpGL,GLM,SharpFont等开源库,努力做一个更好用的纯C#版OpenGL。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 77.7%
  • HTML 21.9%
  • GLSL 0.4%