
OSG
文章平均质量分 95
allenjiao
深耕计算机图形学、BIM数字孪生、大数据可视化、物联网+GIS等领域,拥有多项软件著作权和发明专利。
展开
-
OpenSceneGraph实现的NeHe OpenGL教程 - 第二十一课
简介本节课实现了一个填满格子的小游戏,有点类似于小时候玩的吃豆子的游戏。本课并没有使用什么新的技术,但是实现的过程比较繁琐,不喜欢深入细节的读者可以跳过本课。实现首先我们需要创建文字,下面的代码是其中一些文字的创建方式,其他的与之类似:[cpp] view plain copy osg::Group* createGr转载 2016-08-17 10:46:50 · 687 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十六课
简介这节课NeHe课程向我们介绍了如何读取帧缓存中的像素值,并把 它作为场景中的纹理加载到几何体上。也就是我们常说的渲染到纹理(Render To Texture)功能,也称纹理烘培。这一功能主要有两个作用:第一是实现场景离屏渲染之后的后置处理;第二是实现多种不同场景的融合显示效果。实现首先创建我们场景中需要显示的Helix模型,代码如下:转载 2016-08-17 14:18:47 · 809 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十五课_附录1
简介在OSG中支持动态纹理,因此不需要我们对视频文件进行大量的解析工作,这些内容都已经在osgPlugins中完成了,在OSG中通过纹理osg::Image的派生类支持这一特性有了以上内容,在OSG中实现就十分简单了,使用过程类似于我们常见的添加osgTexture2D的过程:[cpp] view plain copy转载 2016-08-17 14:16:37 · 554 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十五课
简介这节课介绍了如何在三维场景中类似播放一段视频的效果。我们都知道视频实际上是由一帧帧的图片来构成的,因此我们将视频中的图片解析成图片格式,并将这些图片赋给几何体表面,让它们在很短的间隔内进行切换就实现了动态的效果。实现本课中使用了Windows解析视频格式AVI文件的API,代码中这部分内容都来自NeHe课程中的相应代码,读者可以查阅MSDN了解这些内容:转载 2016-08-17 14:15:17 · 661 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十四课
简介NeHe教程在这节课向我们介绍了如何从一个2D的灰度图创建地形。这节课的内容比较简单,只是从一个2D灰度图中读取灰度数据,然后将灰度数据转换成高度数据,最后将这些数据显示出来就可以了。实现首先读取raw格式的图片,将里面的灰度值转换成Y值:[cpp] view plain copy void LoadR转载 2016-08-17 14:13:02 · 776 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十三课
简介这节课主要是介绍了怎样读取TGA格式的文件,TGA格式分为压缩和未压缩两种。在OSG中这两种方式的TGA格式都是支持的,因此没有必要像NeHe课程那样去解析。实现首先创建两种类型的Group节点用来保存使用压缩格式纹理的节点以及未使用压缩格式纹理的节点,实现如下:[cpp] view plain copy转载 2016-08-17 14:11:04 · 564 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十二课
简介本节课NeHe课程主要想我们介绍了OpenGL中的拾取(Selection)的方式来和场景中的物体进行交换,在OSG中并没有封装OpenGL中的拾取方式,而是用了更高效的一种方式来实现与场景中的模型进行求交的操作,对于OSG这样处理的原因可以参考OSG中的这个MailList: New to OSG, some questions (selection buffer, para转载 2016-08-17 14:09:57 · 478 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十一课
简介本节课实现了加载Milkshape3D建模生成的文件,本课的大部分内容主要是分析Milkshape3D的模型文件格式实现本课中的读取文件的内容大部分来自NeHe课程中的代码:主要加载文件的代码在以下函数之中:[cpp] view plain copy virtual bool loadModel转载 2016-08-17 14:08:00 · 642 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十课
简介这节课NeHe课程实现了在场景中进行碰撞检测以及简单的物理作用(碰撞之后的反弹),碰撞检测三维图形学中一个比较高级的主题,本课只涉及了简单的规则几何体之间的碰撞检测,更复杂的实例需要读者去更深入的学习。实现本课中碰撞检测的算法包括线与平面的求交检测、线与圆柱体的求交、以及球体之间的碰撞检测,这些碰撞检测的原理可以参考NeHe中的介绍。具体实现在如下几转载 2016-08-17 14:06:49 · 659 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第二十九课
简介这节课NeHe课程教我们如何读取一张raw格式的图片,并且对两张raw格式图片进行处理生成了一张纹理图片。整个过程并不是十分复杂,文中大部分内容涉及到图片数据的操作。实现首先我们创建需要显示的立方体:[cpp] view plain copyosg::Geode* createCubeGeode(osg转载 2016-08-17 14:05:02 · 608 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第二十八课
简介NeHe教程在这节课中向我们介绍了贝塞尔曲面,贝塞尔曲面是一种可以只使用很少的参数就可以描述出复杂曲面的一种数学工具。关于贝塞尔曲线的内容可以参考Bézier surface实现本课的实现过程非常简单,在理解了贝塞尔曲面之后利用贝塞尔曲面的计算公式计算出控制点和插值点坐标:控制点线条的代码如下:[cpp] view pla转载 2016-08-17 14:03:58 · 562 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第二十七课
简介NeHe教程这节课向我们介绍了怎样在场景中绘制阴影效果,正如NeHe课程中所说,这节课是OpenGL中的一个高级主题。NeHe课程中实现阴影的效果采用的是一种称为阴影锥(ShadowVolume)的方法,更确切地说采用的是ShadowVolume中的z-pass方法,通过使用模板缓冲区完成阴影的绘制。关于阴影锥的介绍可以参考Efficent Shadow Volume Re转载 2016-08-17 14:01:50 · 1018 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十七课
简介这节课NeHe教我们实现了卡通纹理。卡通渲染(英语:Cel-shading或者Toon Shading)是一种去真实感的渲染方法,旨在使电脑生成的图像呈现出手绘般的效果。为了使图像可以与漫画或者卡通达到形似的效果,专业人员通常使用卡通渲染着色器进行处理。卡通渲染是在大约21世纪初期,作为计算机图形学的副产物出现的新技术,并且主要应用于电子游戏中;然而,它可以呈现出如手绘动画一样简洁转载 2016-08-17 14:20:08 · 723 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十九课
简介这节课NeHe课程主要向我们展示了将物理运动规律引入到三维场景中,模拟真实物体的位置变化过程。这节课分别模拟了如下几种运动方式:(1)在重力作用下的抛物线运动;(2)匀速运动(3)一种类似于弹簧一样的来回运动这些运动的方程在Physics.h头文件中描述的很清楚,稍有物理知识应该不难理解。实现首先我们在场景中添加各种几何体:转载 2016-08-18 10:04:28 · 586 阅读 · 0 评论 -
OSG开发环境搭建
国庆出去了几天,今天有点时间,把上次承诺要写的osgNeHe环境搭建过程写一下,方便还不熟悉的朋友们。安装准备进行osg的开发需要安装如下的一些软件:Visual Studio 2008或者更高版本(其他版本也可以,但是考虑到Qt需要自己编译有点麻烦,建议使用VS08以上版本)Qt 4.8系列(Qt5也可以,本文以4.8系列为例)CMake 2.8.12或更高版本O转载 2016-08-18 10:20:41 · 3119 阅读 · 1 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四十八课
简介NeHe教程在这节课向我们介绍了轨迹球技术。轨迹球技术可以让用户使用鼠标直接旋转物体,这是所有交互式3D软件必须提供的最基本的功能。在OSG中已经提供了功能强大的漫游器,包括TrackballManipulator、FirstPersonManipulator、DriveManipulator等等,具体实现的代码可以参看osgGA库中的源码部分。实现转载 2016-08-18 10:19:34 · 733 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四十七课
简介NeHe教程在这节课向我们介绍了Cg编程技术。Gg是nVidio公司面向GPU的语言,类似的语言还有微软的HLSL,OpenGL的GLSL,ATI的shaderMonker。关于可编程的着色语言可以在网络上找到很多的学习资源,这也是新式OpenGL的特点之一。可以预见未来随着GPU的发展,越来越多的固定管线部分可以被可编程的部分所替代。考虑到在OSG中使用GLSL比较方便,本课使用转载 2016-08-18 10:17:37 · 796 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四十六课
简介NeHe教程在这节课向我们介绍了OpenGL的扩展(ARB_MULTISAMPLE)多重采样技术。利用这种技术可以实现全屏反走样。这样可以使图形看起来更美观。在OSG中多重采样是作为节点的StateSet来开启和关闭的,实现过程十分简单。实现首先添加四边形到场景中,这一过程前面已经重复很多遍了,代码如下:[cpp] view转载 2016-08-18 10:16:25 · 719 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四十五课
简介这节课NeHe课程主要向我们演示了怎么使用OpenGL中的VertexBufferObject,VBO的介绍可以参考另一篇文章VA VAO和VBO API备忘在OSG中默认绘制Drawable的时候采用了显示列表的方式,另外也可以通过virtual void setUseVertexBufferObjects (bool flag)来转载 2016-08-18 10:15:25 · 660 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四十四课
简介这节课NeHe教我们怎么在场景中实现3D光晕的效果,光晕会在摄像机镜头对准太阳的时候就会出现,实现的原理是在光源与摄像机视点之间绘制一系列贴好纹理的四边形,并且让这些四边形正对着视点(Billboard)实现在OSG中的实现与OpenGL中有一些不同,在OpenGL中很容易得到屏幕上某一点的深度值从而判断遮挡,在OSG中需要在获取到OpenGL RC的时候才转载 2016-08-18 10:13:46 · 861 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四十三课
简介这节课NeHe教我们怎么使用FreeType字体库来创建字体,在OSG中通过FreeType的插件已经支持FreeType字体了,前面很多课程中的字体就是使用FreeType字体库创建的。实现本课的实现过程十分的简单,创建字体,然后再回调中修改字体显示:创建字体代码如下:[cpp] view plain copy转载 2016-08-18 10:12:15 · 601 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四十二课
简介这节课NeHe课程教我们怎样使用OpenGL中的多视口来显示场景,多视口的方式可以用来显示场景中更多的信息。在3DMax中我们经常会看到模型的正视图、侧视图等可以在OpenGL中使用不同的视口达到同样的效果。在OSG中每一个osg::Camera可以用来渲染不同的场景,我们可以使用多个相机并通过给这些相机设置不同的视口来达到这样的效果。在OSG中提供了这样的类来管理多个View视景转载 2016-08-18 10:11:10 · 905 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四十一课
简介这节课也是在场景中添加雾效的效果,与之类似的是第十六课,所不同的是这节课使用了雾坐标来计算雾效。为了能运行这一课,你的显卡必须支持GL_EXT_fot_coord扩展。实现这节课的实现过程比较简单,在OSG中为几何体的顶点封装好了顶点的各项属性,包括顶点坐标、顶点纹理坐标、顶点颜色,当然也包括本课中的雾坐标。首先我们还是添加顶点的各项数据:转载 2016-08-18 10:10:09 · 638 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四十课
简介NeHe教程在这节课向我们介绍了如何模拟一根绳子的运动状态,简单的说,就是把绳子先离散化,把它想象成一个个紧密排列的点,每两个点之间有弹性约束。其实这就是简单的有限元思想。这节课的内容和上节课一样,主要是和物理、数学有关系,和图形图像的关系不大。实现首先我们同样是创建场景中的几何体:[cpp] view plain copy转载 2016-08-18 10:08:43 · 996 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三十八课
简介这节课NeHe教我们怎样把图片作为资源嵌入到exe可执行文件中,这样当我们发布程序的时候就可以不需要附带上图片文件了。由于这部分的内容和OSG并没有关系,主要是使用Windows编程中资源的概念,我对这部分并不是很熟悉,因此本课只实现最后的效果。图片并未处理成NeHe中的这种方式。实现首先创建我们需要的50只蝴蝶的模型,并且加载需要的纹理转载 2016-08-18 10:05:12 · 599 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第二十六课
简介这节课主要介绍了如何使用OpenGL中的模板缓冲区和裁剪平面来产生镜子反射的效果,关于模板缓冲区的内容可以参考另一篇文章OpenGL模板缓冲区---Stencil Buffer实现首先我们需要在模板缓冲区中将地面(类似镜子)绘制出来,同时并不会在颜色缓冲区中绘制出镜面。通过设置颜色掩码glColorMask可以做到这一点[cpp] v转载 2016-08-17 14:00:32 · 707 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第二十五课
简介NeHe教程在这节课中向我们介绍了如何从文件加载3D模型,并且平滑的从一个模型变换为另一个模型。这个过程又称为逐点动画,点之间的变化过程算法十分简单,采用的是线性的算法。实现首先我们仿照NeHe课程中定义了表示点的结构体以及读取文件的结构体OBJECT并读取文件[cpp] view plain copy转载 2016-08-17 13:59:19 · 847 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第十一课
简介这节课我们将创建一个以正弦波方式飘动的旗帜。本课所用到的知识在前面的课程中都有讲解,并没有什么新的内容实现首先创建我们的场景,关于旗帜的顶点坐标在NeHe教程中已经有非常详细的介绍,本文就不在赘述了。[cpp] view plain copy float points[45][45][3];转载 2016-08-16 13:42:56 · 653 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第十课
简介本文实现从外部文件中加载场景,并进行简单的场景漫游操作。一般来说,场景都是通过外部建模工具生成的,然后再通过osg进行读取加载,一方面直接通过顶点生成场景对程序员来说十分困难,另一方面通过外部建模的方式加载场景使得程序变得十分灵活。像我们玩的CS游戏就是通过加载一些地图文件实现在不同的场景之中战斗。实现在NeHe教程中实现的过程介绍的非常清楚,不熟悉转载 2016-08-16 13:41:57 · 766 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第九课
简介本课实现在场景中绘制旋转的星星,主要的内容包括使用Blend方式设置纹理图片的颜色,在场景中操作物体实现简单的动画效果。本课中描述的内容在前面的课程中已经有比较详细的介绍,本课综合运用了前面课程所学内容。实现首先同NeHe教程中设置的一样,我们先创建50颗星星,代码如下[cpp] view plain copy转载 2016-08-16 13:40:48 · 670 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第八课
简介本课是在第七课的基础上实现将立方体变透明的效果,其中用到了OpenGL中的混合(Blend)实现在OpenGL中如何实现混合以及混合实现的原理和过程在NeHe教程中已经解释的很清楚了,在这里就不在赘述,本课主要探讨在OSG中实现混合的效果,混合同样是作为一种StateSet的方式来进行处理的,OSG中的混合主要涉及到一下几个类BlendFunc、BlendE转载 2016-08-16 13:39:53 · 522 阅读 · 1 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第七课
简介这节课我们将讨论如何在OSG中使用键盘和灯光。我们将会学习指定三种纹理过滤方式,学习如何使用键盘来移动场景中的立方体。在osg中通过osgGA库来实现与用户的交互,在用户端,通常使用GUIEventAdapter类作为系统交互事件和OSG交互事件的适配接口。实现首先定义一个类用来查找场景中我们需要的节点,这个类会遍历场景子节点,返回第一个查找到与输入转载 2016-08-16 13:38:48 · 626 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第六课
简介本节课要实现的内容是为立方体的六个面添加纹理纹理映射(Texture Mapping)是OpenGL程序开发中的一个重要概念。纹理是一个数组的概念,其中每一个数据(RGB颜色以及Alpha值,或者其他系统及用户定义的类型)称为一个纹素(texel)。在描绘具有真实感物体时,使用一幅真实拍摄的照片作为纹理贴到几何体的表面,可以大大丰富物体的表现效果。OSG使用派生自S转载 2016-08-16 13:37:37 · 502 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第五课
简介这节课将在第四课的基础上进行扩展,创建3D物体。我们将三角形变为3D的三棱锥形,把四边形变为立方体。同时三棱锥沿Y轴旋转,四边形沿着(1,1,1)方向旋转。实现本课与第二课十分类似,只需要多绘制几个面即可,三棱锥的绘制代码如下[cpp] view plain copy osg::Geometry *tr转载 2016-08-16 13:36:53 · 937 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四课_附录1
简介在第四课中我们使用节点更新回调的方式实现了对场景中节点的旋转,在OSG中还有更简便的方法实现这种效果,下面用另一种方式实现第四课的内容。我们使用OSG中自带的AnimationPathCallback实现旋转的效果实现要理解osg::AnimationPathCallback我们首先需要知道什么是AnimationPath?OSG通过Animat转载 2016-08-16 13:35:40 · 479 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第四课
简介本课要实现的效果是让三角形绕自身的轴线Y轴进行旋转, 四边形绕自身X轴进行旋转。在osg中实现这种效果有很多种方法可以做到,无论哪种方法总体的思路是定时地去修改场景中的空间变换节点,本文采用最简单的一种方式进行修改:使用场景中节点的回调来修改空间变换节点从而达到旋转的效果。实现首先我们先定义一个场景节点的Callback类,OSG中的节点主要使用回调转载 2016-08-16 13:35:02 · 613 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第三课
简介这节课将在第二课的基础上讨论如何使用颜色。与OpenGL类似,OSG也提供了两种色彩模式。我们将对四边形只使用一种颜色显示,对三角形则要对每个顶点设置一个颜色。事实上在第二课中我们已经设置颜色了,只是我们设置的都是单一的白色,按照本课的要求,我们只需要在第二课的基础上修改少量的代码。修改颜色OpenGL是一个状态机,在OpenGL中需要设置很多状态量,一转载 2016-08-16 13:33:48 · 614 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第二课
这节课主要工作是在场景中添加一个三角形和一个四边形。本节新增加一个函数buildScene,这个函数将在场景中创建一个三角形和一个四边形。osg场景介绍在添加场景之前,先对osg的场景结果有一个了解,osg采用场景树的方式来组织场景,如下图所示:场景已节点(Node)的方式来组织,包括组节点Group(用来管理节点),空间变换节点(MatrixTransfo转载 2016-08-16 11:31:39 · 1395 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第十二课
简介本课NeHe教程主要是使用了OpenGL中的显示列表。OpenGL的显示列表是加速OpenGL性能的一种重要的手段。OpenGl的几何体绘制方法主要包括立即模式、顶点数组、显示列表和VBO。在OSG中显示列表是大部分OSG程序所使用的默认绘制优化行为,因此不需要我们去像OpenGL那样进行设置。实现首先创建整个场景,本课中我使用了OSG中预定义的几种基本形体转载 2016-08-16 13:43:53 · 448 阅读 · 0 评论 -
OpenSceneGraph实现的NeHe OpenGL教程 - 第十三课
简介NeHe这节课主要讨论如何使用OpenGL显示2D文字。OpenGL显示2D文字是通过wglUseFontBitmaps函数创建了一系列的显示列表来实现的。通过阅读NeHe教程,读者应该能感觉到在OpenGL中显示文字还是比较麻烦的。在OSG中显示2D文字相对来说比较简单,OSG提供了专门用来处理文字的库osgText(包括二维和三维字体)实现首先创建文字节转载 2016-08-16 13:44:37 · 400 阅读 · 0 评论