08 2016 档案
摘要:这是根据徐明亮《OpenGL游戏编程》书上光灯一节的一个例子改编的. 从这个例子可以学习到二次曲面的参数设置,程序中提供了两个画球的函数,一个是用三角形画出来的,一个是二次曲面构成的. 你会发现,跟三角形版本不同,二次曲面要做一些设定,否则画出来的球体无法接受光照. 先上代码: 截取了一帧的效果如下
阅读全文
摘要:笔者学到光源这一节,遇到的问题就比较多了,收集了一些如下所述: (1) 导入的3ds模型,如果没有材质光照效果很奇怪.如下图 (2) 导入的3ds模型,有材质,灯光效果发暗,材质偏色,效果也很奇怪.下图中是有灯光的,但效果惨不忍睹. (3) 场景引入灯光后,场景中的物体的颜色就全部消失了,即合引入颜
阅读全文
摘要:序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留列表中指定的信息(ID,进程名) 为了能清楚理解上面代码的内部动作,我们需要介绍几组概念. 1. I
阅读全文
摘要:C# 为支持LINQ添加了许多语言特性: 隐式类型局部变量 对象初始化器 Lambda表达式 扩展方法 匿名类型 了解这些新特性是全面了解LINQ的重要先解条件,因此请不要忽视它们. (一) 隐式类型局部变量 processData这个类中的亮点是 {get;set;} 它是一个新特性, 系统会自动
阅读全文
摘要:灯光的测试例子:光源参数可以调节的测试场景 先看一下测试场景和效果。 场景中可以切换视图, 以方便观察三维体和灯光的位置。环境光,漫射光,镜面反射光都可以在四种颜色间切换。 灯光位置和摄像机位置(LookAt)可以输入数值或者点动调节,也可以按键盘的QEWASD六个键进行调节。 你还会注意到:球体对
阅读全文
摘要:LINQ对于笔者来说, 优美而浓缩的代码让人震惊. 研究LINQ就是在艺术化自己的代码. 之前只是走马观花学会了基本的语法, 但是经常在CSDN看到令人惊讶自叹不如的LINQ代码, 还是让人羡慕嫉妒恨, 真有一种心血来潮想追赶的冲动. 所以, 还是决定系统的学习一下LINQ. (1.4) LINQ
阅读全文
摘要:在OpenGL中,使用光源的特性组合,如颜色,位置,方向等等,可以创建多种不同类型的灯光。 常见的几种灯光类型有: 定向光源(directonal) 定位光源(positional) 衰减光源 聚光灯 下面我们用3dsmax中的光源模拟出OpenGL对应类型的光源,渲染出效果图供大家有个快速的印象。
阅读全文
摘要:在3D场景中,每个像素最终显示出来的颜色都是经过大量计算而得到的,其中一些计算是依赖于场景中的光照以及场景中物体对光线的反射和吸收情况. 例如,对于一个红色的物体, 在白色光(白光是红光,绿光和蓝光等量的光) 的照射下它是红色的, 而在绿色光的照射下它将显示为黑色. 如果场景不存在光源效果,那么就没
阅读全文
摘要:我们先引入关于"矩阵堆栈"的官方说法: OpenGL的矩阵堆栈指的就是内存中专门用来存放矩阵数据的某块特殊区域。实际上,在创建、装入、相乘模型变换和投影变换矩阵时,都已用到堆栈操作。一般说来,矩阵堆栈常用于构造具有继承性的模型,即由一些简单目标构成的复杂模型。例如,一辆自行车就是由两个轮子、一个三角
阅读全文
摘要:笔者接触OpenGL最大的困难是: 经常调试一份代码时, 屏幕漆黑一片, 也不知道结果对不对,不知道如何是好! 这其实就是关于OpenGL"变换"的基础概念没有掌握好, 以至于对"将三维体正确的显示在屏幕上指定位置"这样的操作都无法完成. OpenGL变换包括计算机图形学中最基本的三维变换,即几何变
阅读全文
摘要:在OpenGL中,除了视景体定义的6个裁剪平面(上下左右前后)外, 用户还可以定义一个或者多个附加的裁剪平面,以去掉场景中无关的目标. 附加平面裁剪函数原型如下: ClipPlane(OpenGL.GL_CLIP_PLANEi, double[] equation); equation是一个拥有4个
阅读全文
摘要:视口变换主是将视景体内投影的物体显示到二维的视口平面上. 在计算机图形学中,它的定义是将经过几何变换, 投影变换和裁剪变换后的物体显示于屏幕指定区域内. 前面我们讨论过的透视投影, 正射投影, 它们都会产生一个视景体, 利用Viewport()函数, 就可以把这些视景体内投影的物体显示到屏幕指定的区
阅读全文
摘要:笔者的一台激光测厚设备的软件, 它有一个运动线程, 一个激光数据处理线程. 运动线程做的事就是由A点移动到B点, 然后再由B点移动回A点. 激光处理线程要做的事就是采集指定数量点的激光数据, 随着采集的点数增加, 耗时也会增加. 这两个线程就存在线程同步的问题, 预想的标准流程应该是这样的: A点到
阅读全文
摘要:有一次在生产线上, 有一个显示激光轮廓的软件被操作员最小化了, 结果悲剧了, 轮廓图像都抓不到了. 原先的设想的操作流程是这个软件是不能被操作员最小化的, 但可惜不能指望员工这么能守规矩. 看来只能在技术上做一些限制, 防止员工手贱. 这个需求并不是通过把软件的最小化按钮取消这么简单来实现, 因为这
阅读全文
摘要:上节谈到投影变换分为透视投影(perspective projection)和正射投影(orthographic projection)两种. 透视投影我们已经介绍过了, 现在谈谈正视投影. 正射投影,又叫平行投影.这种投影是一个矩形长方体的平行管道. 它最大的特点是, 无论物体距离相机多远投影后的
阅读全文
摘要:从本节开始,我们使用SharpGL带的VS2010扩展,来直接生成SharpGL工程。 如果你新建项目时,没有看到下面的SharpGL项目,那么请事先在SharpGL源代码中找到一个叫 ”SharpGL 2.0 Visual Studio Extension“目录 ,安装名为 SharpGL.vsi
阅读全文
摘要:这款盈动的线性绝对值编码器型号为: CAPLIN-A-485 其安装好光栅尺后的外型下面这样的. 工作的时候,信号端子和光栅尺是固定的, 滑头由电机带动. 编码器数据由485口主动抛出, IPC可以在适当时机读取. 这款产品的通讯格式如下: 默认的波特率为9600,每桢起始位为0,数据位8位,停止位
阅读全文
摘要:通过这个实验, 触及到了下面的知识点: 基恩士7060蓝色激光的基本操作 halcon算子, FitLineContourXld, 使它们用点拟合出直线 需求描述 最近一个需求测量电池顶凸起面的边线到冶具边缘的宽度, 且需要得到边线的信息, 主要是它的角度信息. 产品外形轮廓如下图所示: 3D曲面显
阅读全文
摘要:这段代码很有意义,用于把一个程序的界面嵌入到我们自己程序的某个指定窗体上. 比如在某个项目里,我需要把基恩士的激光扫描轮廓显示给客户看,但是激光的DLL中并没有这种功能提供. 于是我想先启动激光的官方程序用以显示轮廓, 然后再把这种显示界面嵌入到我自己程序的界面上指定的位置上. 在笔者构想的PLC仿
阅读全文
摘要:实验采用带模拟量,分辨率为1-5V,量程为0--101kpa的真空表 数据采集模块采用DAM-8021, 16位模块 算法描述如下: 真空表读数范围: 0到-101kpa 模拟量输出: 1-5V 一次AD数据采集结果为(由串口助手取得): >+03.921-00.000 此时真空表读数: 74.2
阅读全文
摘要:(二) 模型变换 模形变换就是指的在世界坐标系中(world space)做“移动”,“旋转", "缩放"三种操作。 首先要说明的,在Opengl中,是用4x4矩阵进行坐标变换,OpenGL的4x4矩阵是按列排列的,就像下面这样。 所谓的模型变换,就是对这个矩阵进行变换。 描述三维世界你就得先设计三
阅读全文
摘要:(一)平台构建与Opengl的hello World OpenGL就是3d绘图的API,微软针和它竞争推出D3D,也就是玩游戏时最常见的DirectorX组件中的3d功能。 所以不要指望windows提供对Opengl提供最新的什么支持。 C#的开发环境也没有封装Opengl的组件,Opengl的官
阅读全文
摘要:®版权声明:本文为博主原创文章,未经博主允许不得转载。 一.ODE介绍与平台搭建. 接触到动力学仿真引擎, 是因为笔者的一款PLC仿真软件需要3D仿真.我需要达到的效果是,以3D方式构建出工控行业中常见的元件,比如感应器,气缸,机械手,拉带.这些元件在场景中通过用户的组合摆放,设置好相关的属性后,可
阅读全文
摘要:(三) 优先使用聚合,而不是继承 有一段时间,养猪场的老板雇用了清洁工人来打扫猪舍。但有一天,老板忽然对自己说"不对啊,既然我有机器人,为什么还要雇人来做这件事情?应该让机器人来打扫宿舍!" 于是,这个需求被提交到了机器人的研发小组。看到这个需求,我们敏感地意识到,这是一个潜藏了更多变化的需求,未来
阅读全文
摘要:对于设计模式, 从本质上说, 其最大的用途就是适应需求的变化. 因为有了设计模式,我们可以在设计阶段就为未来可能发生的变化留下足够的空间. 我们通过一个建造现代化养猪场的故事, 来讨论一下设计模式与需要变化之间的关系. (一)设计模式最根本的意图是适应需求的变化 一个机器人研发小组研制了一种能自动喂
阅读全文