array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Visual Studio 中配置 SharpGL库环境 - 爱码网

OpenGL就是3d绘图的API,微软针和它竞争推出D3D,也就是玩游戏时最常见的DirectorX组件中的3d功能。 所以不要指望windows提供对Opengl提供最新的什么支持。

C#的开发环境也没有封装Opengl的组件,Opengl的官方的dll是供C,C++开发用的。要想用在C#中你得自己导入DLL函数。但我相信你不会这样做的,还是引入第三方的Opengl库来得方便。

 

SharpGL就是C#用的OpenGL库,之所以选择它,是因为它最后更新的时间较近,网上的C++教程也最多,而且这个库是有成功的商业开发应用的,可以放心使用。

源码下载地址:

http://www.oschina.net/p/sharpgl

 

引用网上对SharpGL的评价,笔者说几句:

对于第1点,能支持wpf程序,笔者很赞。

对于第2点,显然是以讹传讹,笔者为此跑了一个sharpgl程序几个小时,也没看到有什么内存增长。所以应该是当前版本把以前的内存泄露问题给解决了。至于是最早哪个版本给解决的,我就不得而知了。

对于第4点,显然对笔者无所谓。

许多人去选择OpenTK,如果他不是去开发OpenGL ES的话,那么多半是害怕内存泄露而不选择SharpGL。

显然说来说去还是需求来确定你该选择什么,如果开发OpenGL ES,你只能选择OpengTK,否则如果只是做windows平台的开发,SharpGL和OpengTK都可以选择。

Visual Studio 中配置 SharpGL库环境
 对SharpGL的总结如下:

    (1)安装部署方便,可以非常容易的集成到Windows Forms和WPF中去使用;

    (2)存在内存泄露的问题,即使运行一个简单的程序,内存在不断增长,当增长到了一定时就不会有太多的增长,由于例程都有这样的问题,对于我们自己编写程序,应作适当考虑;

    (3)目前SharpGL已经支持到OpenGL4.2(http://sharpgl.codeplex.com/discussions/431042),在所有的第三方库中,其支持的OpenGL版本应该是最高的;
4)不支持Linux和Mac平台(http://sharpgl.codeplex.com/discussions/356490)
Visual Studio 中配置 SharpGL库环境

 

 

 

 至于OpenGL能干嘛? 对于博主来说,学它是出于需要,想做3D仿真, 也许你很年青,有大把业余时间,那就可以用它来写个CS来爽爽。但博主还是认为学东西要以经济效益和工作需要两种力量为驱动力,否则就不要学,在这个知识爆表的年代,其实很有必须提倡节约时间,尽量把时间用在刀刃上的。

 

 我们用vs2010的C#,构建一个空白的windows窗体应用程序

 

首先,把 下载的SharpGL里面的3个dll(除serialization.dll)引入C#,然后“选择项” 选择SharpGL.Winforms.dll , 就可以在面板上看到4个控件。其中OpenGLControl就可以把它播放到Form上去。它相当于Opengl的画板。

Visual Studio 中配置 SharpGL库环境

 

Visual Studio 中配置 SharpGL库环境

 

如果你把OpenGLControl拖放到Form上时不幸出现下面这样的画面。

Visual Studio 中配置 SharpGL库环境

那么多半是因为你用的vs2010,默认框架是.Net Framework 4 Client profile, 请切换为.Net Framework 4就好了。

Visual Studio 中配置 SharpGL库环境

如果不是这个原因,那么你运行程序看看有没有问题,如果能看到黑色的OpenGLControl控件,那么你保存下这个工程,重新打开应该就好了。

至于为什么会这样,笔者也不清楚。

 

源代码如下:已经做了详细解释

Visual Studio 中配置 SharpGL库环境
 1 using System;
 2 using System.Windows.Forms;
 3 using SharpGL;
 4 
 5 namespace blankTest
 6 {
 7     public partial class Form1 : Form
 8     {
 9         
10         public Form1()
11         {
12             InitializeComponent();
13 
14         }
15 
16         private void Form1_Load(object sender, EventArgs e)
17         {
18 
19         }
20 
21         private void openGLControl1_OpenGLInitialized(object sender, EventArgs e)
22         {
23             OpenGL gl = openGLControl1.OpenGL;
24             gl.ClearColor(0, 0, 0, 0);
25         }
26 
27         private void openGLControl1_Resize(object sender, EventArgs e)
28         {
29             OpenGL gl = openGLControl1.OpenGL;
30 
31             //  设置当前矩阵模式,对投影矩阵应用随后的矩阵操作
32             gl.MatrixMode(OpenGL.GL_PROJECTION);
33 
34             // 重置当前指定的矩阵为单位矩阵,将当前的用户坐标系的原点移到了屏幕中心
35             gl.LoadIdentity();
36 
37             // 创建透视投影变换
38             gl.Perspective(30.0f, (double)Width / (double)Height, 5, 100.0);
39 
40             // 视点变换
41             gl.LookAt(-5, 5, -5, 0, 0, 0, 0, 1, 0);
42 
43             // 设置当前矩阵为模型视图矩阵
44             gl.MatrixMode(OpenGL.GL_MODELVIEW);
45         }
46 
47         private void openGLControl1_OpenGLDraw(object sender, PaintEventArgs e)
48         {
49             SharpGL.OpenGL gl = this.openGLControl1.OpenGL;
50             //清除深度缓存 
51             gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
52 
53             //重置当前指定的矩阵为单位矩阵,将当前的用户坐标系的原点移到了屏幕中心
54             gl.LoadIdentity();
55 
56             //坐标轴变换位置到(-1.5,0,-6)
57             gl.Translate(-1.5f, 0f, -6f);
58 
59             gl.Begin(OpenGL.GL_TRIANGLES);
60             {
61                 //顶点 
62                 gl.Vertex(0.0f, 1.0f, 0.0f);
63                 //左端点      
64                 gl.Vertex(-1.0f, -1.0f, 0.0f);
65                 //右端点       
66                 gl.Vertex(1.0f, -1.0f, 0.0f);
67             }
68             gl.End();
69 
70             //把当前坐标系右移3个单位,注意此时是相对上面(-1.5,0,-6)点定位 
71             gl.Translate(3f, 0f, 0f);
72 
73             gl.Begin(OpenGL.GL_QUADS);
74             {
75                 gl.Vertex(-1.0f, 1.0f, 0.0f);
76                 gl.Vertex(1.0f, 1.0f, 0.0f);
77                 gl.Vertex(1.0f, -1.0f, 0.0f);
78                 gl.Vertex(-1.0f, -1.0f, 0.0f);
79             }
80             gl.End();
81             gl.Flush();   //强制刷新
82 
83         }
84     }
85 }
Visual Studio 中配置 SharpGL库环境

 

openGLControl1_OpenGLInitialized,
openGLControl1_Resiz,
openGLControl1_OpenGLDraw

这三个都是控件 openGLControl1 的自带标准事件。


效果就像下图这样了。

 Visual Studio 中配置 SharpGL库环境

 整这许多代码,却看到画出这个东西,是不是有些小失望? 不知道和GDI+有什么不同,对吧?

其实,不同的是,GDI+是纯2D的, 而上面这两个基础图形可不是2D,而是在3D空间的,虽然它只是一个片,但是也可以在x,y,z方向任意旋转哦。


转载地址: http://www.cnblogs.com/hackpig/p/5770458.html



相关文章: