CSharpGL(17)重构CSharpGL
CSharpGL(17)重构CSharpGL
CSharpGL用起来我自己都觉得繁琐了,这是到了重构的时候。
下载
CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入(https://github.com/bitzhuwei/CSharpGL)
核心N合一
为了解耦,我把CSharpGL核心拆分为5个DLL。然后发现这只会带来麻烦。用的时候要引用多个DLL,开发的时候也没有益处。于是全部N合一,成为一个CSharpGL.dll。

现在的版本内容如上图所示。
Demo:GLCanvas
这个demo每秒随机更换一个背景色。演示了如何使用GLCanvas(drag-drop即可),清晰展示了GLCanvas最基本的渲染功能。


Demo:北斗七星(Big Dipper)
这个demo演示了如何用CSharpGL进行modern rendering。
北斗七星模型的顶点位置如下:
[] {-2.5000, +1.0000, +0.0000}
[] {-1.5000, +1.0000, +0.0000}
[] {-0.5000, +0.5000, +0.0000}
[] {+0.5000, +0.2500, +0.0000}
[] {+1.0000, -1.0000, +0.0000}
[] {+2.0000, -1.0000, +0.0000}
[] {+2.5000, +0.0000, +0.0000}
北斗七星模型的顶点颜色是由红色逐渐过度到紫色。
旋转、缩放
通过camera和satelliteRotator实现旋转和缩放模型的功能。


拾取
鼠标移动到北斗七星模型上,会在BulletinBoard窗口上显示出拾取到的图元。

GLSwitch
有时候你需要用GL.LineWidth();设置线宽度;有时候需要用GL.PointSize();设置点的大小。CSharpGL提供GLSwitch对象,可以为各个IRenderable对象动态增删这些功能。
北斗七星Demo里,你可以在PropertyGrid窗口动态增删GLSwitch。

UniformVariables
CSharpGL提供类似GLSwitch的可视化编辑方式,来动态增删改shader中的uniform变量。

DrawMode
还可以动态修改渲染模式。




其他类型就不贴图了。
另外,不同的DrawMode下,拾取到的图元也是不同的。

Demo:Geometry Shader(EmitNormalLine)
用geometry shader自动渲染出模型顶点的法线是目前我找到的geometry Shader的最好的应用。
下图中的白色针状就是各个顶点的法线。
Teapot

Sphere

Cube

总结
原CSharpGL的其他功能(UI、3ds解析器、TTF2Bmp、CSSL等),我将逐步加入新CSharpGL。
欢迎对OpenGL有兴趣的同学关注(https://github.com/bitzhuwei/CSharpGL)
CSharpGL(17)重构CSharpGL的更多相关文章
- CSharpGL(3)使用CSharpGL.vsix插件
CSharpGL(3)使用CSharpGL.vsix插件 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更 ...
- CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)
CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...
- BIT祝威博客汇总(Blog Index)
+BIT祝威+悄悄在此留下版了个权的信息说: 关于硬件(Hardware) <穿越计算机的迷雾>笔记 继电器是如何成为CPU的(1) 继电器是如何成为CPU的(2) 关于操作系统(Oper ...
- CSharpGL(1)从最简单的例子开始使用CSharpGL
CSharpGL(1)从最简单的例子开始使用CSharpGL 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo ...
- CSharpGL(49)试水OpenGL软实现
CSharpGL(49)试水OpenGL软实现 CSharpGL迎来了第49篇.本篇内容是用C#编写一个OpenGL的软实现.暂且将其命名为SoftGL. 目前已经实现了由Vertex Shader和 ...
- 说说Shell在代码重构中的应用
说说Shell在代码重构中的应用 出处信息 出处:http://blogread.cn/it/article/3426?f=wb 代码重构(Code refactoring)有时是很枯燥的,字符 ...
- Visual Studio 简单使用常识操作
Visual Studio 简单使用个人总结 转载请注明来源:www.cnblogs.com/icmzn(后续会持续更新) 可以查看一下链接,官方关于visual studio 2010 的介绍 ...
- selenium2-元素管理方式及解析
1.管理文件格式:yaml 2.Yaml里面的内容格式: 3.格式说明: baidu_input后面接上":",直接回车,然后空两格 type与value这两个key是固定 ...
- CSharpGL(15)用GLSL渲染2种类型的文字
CSharpGL(15)用GLSL渲染2种类型的文字 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合 ...
随机推荐
- MVVM模式解析和在WPF中的实现(三)命令绑定
MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- 参考bootstrap中的popover.js的css画消息弹框
前段时间小颖的大学同学给小颖发了一张截图,图片类似下面这张图: 小颖当时大概的给她说了下,其实小颖也不知道上面那个三角形怎么画嘻嘻,给她说了DOM结构,具体的css让她自己百度,今天小颖自己参考boo ...
- MyEclipse生成注册码
今天正在使用的MyEclipse出现了使用过期,在网上发现一个可以生成注册码的程序,现在分享给各位. /** * myEclipse生成注册码 * 点击顶部:MyEclipse --> subs ...
- Yeoman 官网教学案例:使用 Yeoman 构建 WebApp
STEP 1:设置开发环境 与yeoman的所有交互都是通过命令行.Mac系统使用terminal.app,Linux系统使用shell,windows系统可以使用cmder/PowerShell/c ...
- NET Core-TagHelper实现分页标签
这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...
- Effective前端2:优化html标签
div { float: left; } .keyboard > div + div { margin-left: 8px; } --> div{display:table-cell;ve ...
- pandas基础-Python3
未完 for examples: example 1: # Code based on Python 3.x # _*_ coding: utf-8 _*_ # __Author: "LEM ...
- 5.0 JS中引用类型介绍
其实,在前面的"js的六大数据类型"文章中稍微说了一下引用类型.前面我们说到js中有六大数据类型(五种基本数据类型 + 一种引用类型).下面的章节中,我们将详细讲解引用类型. 1. ...
- jQuery中取消后续执行内容
<html xmlns="http://www.w3.org/1999/xhtml"><head> <title></title&g ...
- 录像时调用MediaRecorder的start()时发生start failed: -19错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...