![0e64fb9f1390bcccb4c8faea1b910907.png](https://img-blog.csdnimg.cn/img_convert/0e64fb9f1390bcccb4c8faea1b910907.png)
一、前言
最近需要在项目的软件中增加一个功能,根据连续测斜数据展示三维的井眼轨迹图,由于购买的厂商的图件效果不理想,所以研究自己写代码实现类似的功能。
井眼轨迹的计算内容繁杂涉及了大量的钻井工程专业专业知识。由于笔者是信息技术专业出身,所以只能依照自己的行业经验研究井眼轨迹的三维技术实现。其中涉及到钻井工程细节部分可能不准确或错误,本文内容仅供技术实现方面参考。
支持3D绘图方面的技术框架很多,本文介绍使用SharpGL这个开源项目来实现三维井眼轨迹图。
一、开源SharpGL项目介绍
SharpGL 可以让你在 Windows Forms 或者 WPF 应用中轻松的使用 OpenGL 开发图形应用。从核心内容来说,SharpGL是一个OpenGL API的封装。一般来说,OpenGL API可以直接用于C/C++应用的开发,但是使用起来比较复杂, SharpGL直接提供了OpenGL全部的功能和扩展。SharpGL将所有的函数和一组丰富的对象,以及高级功能的对象集合放到一个包装器中,你可以使用SharpGL执行opengl绘图。不过SharpGL也包括一些不属于OpenGL的内容,针对WinForms和WPF的用户控件用户控件提供了OpenGL渲染界面和用于处理类似于shader和纹理等复杂问题能力。甚至提供了一个高级类SceneGraph可以更好的使用面向对象的思想创建各类场景。
SharpGL背后的原理是OpenGL in .NET, SharpGL并不是一个需要重新学习的新框架,它只不过是封装的OpenGL。
为什么不直接使用OpenGL,而是使用SharpGL呢?
首先是我喜欢做.Net开发,可以使用托管代码轻松调用C API,Dlllmport可以方便的调用这些API。但是必须要为所有的函数创建签名。如果发生错误,整个错误将是非常庞大的,并且很难分析错误。
另外一个使用SharpGL的原因是SharpGL可以作为标准平台调用来调用多数OpenGL函数,而不用创建外部方法的签名。OpenGL扩展函数在运行时被夹在-这就没有一个固定的进入点进入DLL,这样就增加了工作量。
在OpenGL中获得一个RD是比较困难的,底层的Win32代码有大量的函数获得像素格式,这些工作是大量重复和痛苦的,好在这一切SharpGL帮我做了。
最后一个选择使用SharpGL的原因是,在OpenGL中大量的很痛苦的重复的工作如加载信息等,但是这些工作在.NET中是非常容易处理的。
OpenGL内容很多,而且非常成熟,相应的SharpGL内容也很多, 我不会在本文中写出太多细节,我们只是用了其中很简单(小)的一部分内容,在写代码过程中发现网上SharpGL的中文资料很有限。谷歌的原因英文资料找起来也很费劲,SharpGL缺少一个官方技术社区,值得一说的是官方提供了比较详细的示例代码,说实话其中很多代码都是参考官方示例写的。
SharpGL中的主要对象介绍:
SharpGL - 包含主OpenGL对象- 这个对象包装所有的OpenGL函数,枚举和扩展。
SharpGL.SceneGraph 包含OpenGL对象和场景元素光。材质。纹理。NURBs。着色器和其他对象的所有包装。
SharpGL.