精华内容
下载资源
问答
  • sharpgl学习笔记
    2021-08-25 10:14:32

    SharpGL学习笔记(十二) 光源例子:解决光源场景中的常见问题

    参考文章:

    (1)SharpGL学习笔记(十二) 光源例子:解决光源场景中的常见问题

    (2)https://www.cnblogs.com/hackpig/p/5824745.html


    备忘一下。


    更多相关内容
  • SharpGL学习笔记

    2020-03-10 14:11:02
    (一) 平台构建与Opengl的hello World https://www.cnblogs.com/hackpig/p/5770458.html (二) 模型变换(几何变换) https://www.cnblogs.com/hackpig/p/5781944.html (三) 投影变换和视点变换 ...

    (一) 平台构建与Opengl的hello World

    https://www.cnblogs.com/hackpig/p/5770458.html

    (二) 模型变换(几何变换)

    https://www.cnblogs.com/hackpig/p/5781944.html

    (三) 投影变换和视点变换

    https://www.cnblogs.com/hackpig/p/5788442.html

    (四) 正射投影

    https://www.cnblogs.com/hackpig/p/5790379.html

    (五) 视口变换

    https://www.cnblogs.com/hackpig/p/5790728.html

    (六) 裁剪变换

    https://www.cnblogs.com/hackpig/p/5795915.html

    (七) OpenGL的变换总结

    https://www.cnblogs.com/hackpig/p/5796412.html

    (八) 矩阵堆栈和变换的综合例子: 机器人

    https://www.cnblogs.com/hackpig/p/5798208.html

    (九) OpenGL的光照模型, 术语解释

    https://www.cnblogs.com/hackpig/p/5799804.html

    (十) 常见的光源类型,创建光源

    https://www.cnblogs.com/hackpig/p/5800967.html

    (十一) 光源创建的综合例子:光源参数可调节的测试场景

    https://www.cnblogs.com/hackpig/p/5811922.html

    (十二) 光源例子:解决光源场景中的常见问题

    https://www.cnblogs.com/hackpig/p/5824745.html

    (十三) 光源例子:环绕二次曲面球体的光源

    https://www.cnblogs.com/hackpig/p/5825865.html

    (十四) 材质:十二个材质球

    https://www.cnblogs.com/hackpig/p/5833137.html

    (十五) 纹理映射

    https://www.cnblogs.com/hackpig/p/5834058.html

    (十六) 多重纹理映射

    https://www.cnblogs.com/hackpig/p/5836470.html

    (十七) 立体文字和平面文字

    https://www.cnblogs.com/hackpig/p/5843860.html

    (十八) 解析3ds模型并显示

    https://www.cnblogs.com/hackpig/p/5846901.html

    (十九) 摄像机漫游

    https://www.cnblogs.com/hackpig/p/5847307.html

     

     

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

    (一)平台构建与Opengl的hello World

     

    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都可以选择。

    复制代码
     对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)
    复制代码

     

     

     

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

     

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

     

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

     

     

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

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

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

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

     

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

    复制代码
     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 }
    复制代码

     

    openGLControl1_OpenGLInitialized,
    openGLControl1_Resiz,
    openGLControl1_OpenGLDraw
    这三个都是控件 openGLControl1 的自带标准事件。
    效果就像下图这样了。

     

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

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

     

     

     本例虽然简单,还是附上源代码吧! 免得搞不出来影响心情。 ^_^

     

    本节源代码下载

     

    原创文章,出自"博客园, 猪悟能'S博客" : http://www.cnblogs.com/hackpig/

    转载于:https://www.cnblogs.com/xihong2014/p/11011016.html

    展开全文
  • SharpGL学习笔记(二) 模型变换(几何变换) SharpGL学习笔记(三) 投影变换和视点变换 SharpGL学习笔记(四) 正射投影 SharpGL学习笔记(五) 视口变换 SharpGL学习笔记(六) 裁剪变换   但是这些概念是零散的...

    笔者接触OpenGL最大的困难是: 经常调试一份代码时, 屏幕漆黑一片, 也不知道结果对不对,不知道如何是好!

    这其实就是关于OpenGL"变换"的基础概念没有掌握好, 以至于对"将三维体正确的显示在屏幕上指定位置"这样的操作都无法完成.

     

    OpenGL变换包括计算机图形学中最基本的三维变换,即几何变换、投影变换、裁剪变换、视口变换,以及针对OpenGL的特殊变换概念理解和用法,如相机模拟、矩阵堆栈等,这些基础是开始真正走进三维世界无法绕过的基础.

    所以笔者在前面花了5篇的篇幅详细讲解了这些基础概念.

     

    SharpGL学习笔记(二) 模型变换(几何变换)

    SharpGL学习笔记(三) 投影变换和视点变换

    SharpGL学习笔记(四) 正射投影

    SharpGL学习笔记(五) 视口变换

    SharpGL学习笔记(六) 裁剪变换

     

    但是这些概念是零散的, 你可能感觉在实际应用中无法把它们有机的串联起来吧? 本节就是想把这些基础知识点按照应用时的逻辑关系理清楚, 并且要彻底搞清楚这些功能之间的关系.

     

    我们拿日常使用相机的例子打个比方:

    实际上,从三维空间到二维平面,就如同用相机拍照一样,通常都要经历以下几个步骤 (括号内表示的是相应的图形学概念):
    第一步,将相机置于三角架上,让它对准三维景物(视点变换,Viewing Transformation)。
    第二步,将三维物体放在适当的位置(模型变换(几何变换),Modeling Transformation)。
    第三步,选择相机镜头并调焦,使三维物体投影在二维胶片上(投影变换,Projection Transformation)。
    第四步,决定二维像片的大小(视口变换,Viewport Transformation)。
    这样,一个三维空间里的物体就可以用相应的二维平面物体表示了,也就能在二维的电脑屏幕上正确显示了。

    下面的示意图,表达了上面的意思。

     

    三维图形世界中的还有几个特殊坐标系的概念。
    显示三维图形的这个坐标系称为世界坐标系
    要在图形显示器上显示,这就要在图形显示器屏幕上定义一个二维直角坐标系,这个坐标系称为屏幕坐标系。这个坐标系坐标轴的方向通常取成平行于屏幕的边缘,坐标原点取在左上角,长度单位常取成一个象素的长度,大小可以是整型数。
    为了使三维休能在二维显示器上显示出来,必须要通过投影进行降维处理。投影的方法有两种,即正射投影和透视投影
    正射投影和透视投影定义一个三维视景体(Viewing Volume)正射投影时一般是一个长方体的视景体,透视投影时一般是一个棱台似的视景体。只有视景体内的物体能被投影在显示平面上,其他部分则不能。

    在绘画3D图形的屏幕窗口内可以定义一个矩形,称为视口Viewport,视景体投影后的图形就在视口内显示,三维图形根据视口变换后, 即可以显示满屏,也可以只显示一部分。
    为了适应物理设备坐标和视口所在坐标的差别,还要作一适应物理坐标的变换。这个坐标系称为物理设备坐标系

    根据上面所述,三维图形的显示流程应如下图所示。

     

    上面所有这些步骤,在OpenGL中,需要好几条语句才能完成。但在3dsmax中,只是使用变换工具,摄像机工具, 这两个工具就可以全部完成了。

    其中“移动,旋转,缩放”工具如果对三维模型做操作就是模型变换

    调节摄像机位置与目标点,还有旋转摄像机就是在做 视点变换

    顶视图,前视图,左视图, 是三个 正射投影视图, 而Camera01视图是一个透视投影视图, 并且这三个视图加上Camera01视图一起是四个视口

    摄像机工具中的一个功能选项“手工剪切”, 就是裁剪变换

    顶,前,左,Camera01四个视图中的横竖黑线就是世界坐标系的XY轴, 而屏幕坐标系的原点是在每个视图左上角,水平方向是X,垂直方向是Y。

     

     

    如果仍然有疑惑,可以回复本贴,笔者再加以补充。

    原创文章,出自"博客园, 猪悟能'S博客" : http://www.cnblogs.com/hackpig/

     

    展开全文
  • SharpGL; 10 11 namespace clipPlane 12 { 13 14 public partial class SharpGLForm : Form 15 { 16 17 public SharpGLForm() 18 { 19 InitializeComponent(); ...
  • translateSample(SharpGL.OpenGL gl) 81 { 82 gl.LoadIdentity(); 83 gl.Translate(0f, 0f, - 3f); 84 drawPT(gl); 85 86 gl.LoadIdentity(); 87 gl.Translate(0f, 1f, - 3f); 88 ...
  • 事实证明, 有了3dsmax这样的工具, 可以有效的实践一些原理上的东西, 确实对学习OpenGL很有帮助.  请看下面的实验, 它帮助笔者理解了什么是正射投影? 它的效果是怎么样的? 这样的疑惑.    下图是在3dsmax...
  • 如果你新建项目时,没有看到下面的SharpGL项目,那么请事先在SharpGL源代码中找到一个叫 ”SharpGL 2.0 Visual Studio Extension“目录 ,安装名为 SharpGL.vsix的vs2010扩展, 然后重启你的vs2010.   利用上面...
  • SharpGL.SceneGraph.Assets.Texture[] textrue; 18 float [] fLightPosition = new float [ 4 ] { 0.0f , 0.0f , 0.0f , 1.0f }; // 5f, 8f, -8f, 1f }; // 光源位置 19 float [] fLightAmbient...
  • SharpGL.SceneGraph.Assets.Texture[] textureAry = new SharpGL.SceneGraph.Assets.Texture[ 4 ]; 18 float [] fLightPosition = new float [ 4 ] { 0.0f , 0.0f , 8.0f , 1.0f }; // 光源位置 ...
  • SharpGL学习笔记(十五) 纹理映射  , 那里的box指定了法线,效果就很好了。(2016/9/4) 还有,界面上灯光位置是 -1,5,1,1 前三个是x,y,z, 后面的一个1不是坐标,它取值0或者1,表示灯光是 定向光源(directonal),...
  • 今天突然想到读下SharpGL的Demo,突然发现文字输出原来如此简单,搞不懂上面两本书上怎么搞得如此复杂! 怎么回事?难道是OpenGL新版本的函数提供了对文字的支持? 还是SharpGL的独特支持? 笔者感觉貌似下面的...
  • 首先,把 下载的SharpGL里面的3个dll(除serialization.dll)引入C#,然后“选择项” 选择SharpGL.Winforms.dll , 就可以在面板上看到4个控件。其中OpenGLControl就可以把它播放到Form上去。它相当于Opengl的画板。 ...
  • 笔者设想的3D仿真中的... SharpGL; 10 using Model3D; 11 using System.IO; 12 13 14 namespace SharpGLWinformsApplication1 15 { 16 //原创文章,出自"博客园, 猪悟能'S博客" :  ...
  • 笔者当初学习3dsmax的时候,总不知道法线是什么,后来学会了3dsmax的法线对齐功能的用法,突然就明白了法线是什么了。   这个法线对齐要求先在要被对齐的对象(下图是长方体) 的某个面点一下, 系统确定了这个面...
  • 在OpenGL中,使用光源的特性组合,如颜色,位置,方向等等,可以创建多种不同类型的灯光。 常见的几种灯光类型有:  定向光源(directonal) 定位光源(positional) ...下面我们用3dsmax中的光源模拟出OpenGL对应...
  • SharpGL; 10 11 namespace SharpGLWinformsApplication1 12 { 13 public partial class SharpGLForm : Form 14 { 15 public SharpGLForm() 16 { 17 InitializeComponent...

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
热门标签
关键字:

sharpgl学习笔记