OSG
花海_
一个不务正业的程序员
展开
-
无法启动此程序,因为计算机中丢失 zlibd.dll【OSG】
在配置OSG的过程中遇到了这个问题。记录一下。zlibd.dll这个DLL可以在第三方库3rdParty里面找到。找到之后复制到OSG的bin目录下即可。原创 2017-06-05 10:34:01 · 3759 阅读 · 2 评论 -
shader language学习(1)——shader language简介背景
shader language,称为着色语言,shade在英语是阴影、颜色深浅的意思。shader language基于物体本身属性和光照条件,计算美格橡塑的颜色值。实际上这种解释具有明显的时代局限性,在GPU编程发展的早期,shader language的提出目标是加强对图形处理算法的控制,所以对该语言的定义也针对于此。但随着技术的进步,目前的shader language早已经用于通用计算研究翻译 2017-07-14 08:30:36 · 386 阅读 · 0 评论 -
OSG学习:转动的小汽车示例
由于只是简单的示例,所以小汽车的模型也比较简单,是由简单的几何体组成。代码如下:#include #include #include #include#includeosg::MatrixTransform* createTransformNode(osg::Drawable* shape, const osg::Matrix& matrix){ osg::ref_ptr原创 2017-07-06 09:28:43 · 920 阅读 · 0 评论 -
OSG学习:位置变换节点示例
osg::PositionAttitudeTransform节点。#include #include #include #include #include #include #include #include int main(){ //创建Viewer对象,场景浏览器 osg::ref_ptr viewer = new osgViewer::Viewer(原创 2017-06-28 10:18:09 · 1089 阅读 · 0 评论 -
OSG学习:用多通道(multiple passes)实现透明度
osgFX库提供了一个用于多通道渲染(multi-pass rendering)的框架。每个你想要渲染的子图都应该被添加到osgFX::Effect节点,多通道技术的定义和使用都可以在这个节点中完成。你可能已经熟悉一些预定义的效果,例如osgFX::Scribe和osgFX::Outline。但是在这个教程中,我们的任务是我们自己设计一个多通道技术。这就是所谓的多通道透明度,当我们在透明模式(tra翻译 2017-07-17 17:48:03 · 880 阅读 · 1 评论 -
OSG学习:使用OSG中预定义的几何体
常用的内嵌几何体包括:osg::Box //正方体osg::Capsule //太空舱osg::Cone //椎体osg::Cylinder //柱体osg::HeightField //高度图osg::InfinitePlane原创 2017-07-22 15:49:58 · 1336 阅读 · 0 评论 -
【OSG】运行OSG示例出现的奶牛不完整问题
发现一个很奇怪的问题:我用笔记本运行OSG里面的示例,出现的图案总是不完整显示的,以经典的奶牛图案为例,如图。图一是我电脑上的情况,正常情况应该是图二。不知道这是什么原因,难道是我电脑显卡的原因吗?有谁碰到了类似的问题吗?有谁能解释一下吗?原创 2017-06-25 22:23:24 · 3502 阅读 · 2 评论 -
OSG学习:LOD、数据分页、动态调度
LOD(level of detail):是指根据物体模型的结点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。在OSG的场景结点组织结构中,专门提供了场景结点osg::LOD来表达不同的细节层次模型。其中,osg::LOD结点作为父节点,每个子节点作为一个细节层次,设置不同的视域,在不同的视域下显示相应的子节点。 数据分页:在城市三原创 2017-07-24 09:49:52 · 4640 阅读 · 0 评论 -
OSG学习:裁剪变换(1)
在OSG中,默认了6个裁剪平面以去除没有必要显示的物体。也可以自己定义其他的裁剪平面来确定裁剪。 osg::ClipPlane类继承自osg::StateAttribute类,封装了OpenGL中的glClipPlane()函数。 在类的成员函数中,设置裁剪平面的有下面几个函数:void setClipPlane(const Plane &plane)void setClipPlane(dou原创 2017-07-24 22:33:16 · 1362 阅读 · 0 评论 -
OSG学习:裁剪变换(2)
接着上一篇博客说。 还有一种裁剪的方法:osg::Scissor类。 这个类封装了OpenGL中的glScissor()函数。 该类主要用于设置一个视口裁剪平面举行。设置裁剪平面举行的函数如下:void setScissor(int x, int y, int width, int height)//参数表示一个平面举行的信息(左下角坐标、宽度和高度)上面的代码同样只是设置了一个视口裁剪平面原创 2017-07-24 23:19:00 · 708 阅读 · 0 评论 -
【OSG】将显示的图形窗口化
窗口化原理有时为了方便控制场景渲染,需要设置一个合适的图形环境窗口(即窗口化)。 创建图形环境的主要步骤如下: (1)通过WindowingSystemInterface类得到系统窗口接口,该系统接口主要是为了关联窗口系统与图形环境。 (2)下面是OSG中图形环境的主要特性,但在实际应用的过程中,没有必要设置每一个参数,只需根据实际需要来设置合理的参数即可。x,y,width,height;/原创 2017-07-25 09:38:10 · 4022 阅读 · 0 评论 -
OSG学习:计算纹理坐标
在很多时候,直接指定纹理坐标是非常不方便的,如曲面纹理坐标,只有少数的曲面(如圆锥、圆柱等)可以在不产生扭曲的情况下映射到平面上,其他的曲面在映射到表面时都会产生一定程度的扭曲。一般而言,曲面表面的曲率越大,纹理所需要的扭曲度就越大。这时,直接指定纹理坐标可能是一件非常困难的事情了。 下面的示例,通过一个纹理坐标生成器(继承自osg::NodeVisitor访问器)遍历模型的所有顶点及法线,然后根原创 2017-07-24 15:20:13 · 1986 阅读 · 0 评论 -
OSG动态调度DatabasePager,pagedLOD
使用动态调度的原因当用户需要浏览的数据量很大,比如地形模拟、虚拟小区和城市等的时候,会对计算机系统产生极大的负担。 在内存中可能要存储海量数据,这些海量数据指的是数百GB甚至TB级别的数据(例如中国境内的山形地貌等),这些不可能全部载入内存中,就算未来的计算机能够将它们一次性读入,也已经损耗了太多的系统性能。动态调度的原理在显示当前视域中的场景元素(可见元素)的同时,预判断下一步可能载入的数据(预原创 2017-08-15 08:34:04 · 8446 阅读 · 3 评论 -
【OSG运行错误】Unhandled exception at 0x7709B872 in XXXX.exe:Microsoft C++exception:std::bad_alloc
1.问题描述学习OSG过程中碰到这样一个问题,如图: 2.错误原因这是由于解决方案的配置模式与使用的OSG中lib版本不一致导致的。我的原因是因为我使用的debug模式,而OSG中的lib是分为debug版本和release版本的,我使用的OSG的lib是release版本,所以导致出现这个错误。3.解决方法项目属性-配置属性-链接器-输入-附加依赖项。 把附加依赖项中,你所添加的lib版本从r原创 2017-11-15 16:43:18 · 2562 阅读 · 0 评论 -
OSG学习:阴影代码示例
效果图: 代码示例:#include <osgViewer/Viewer>#include <osg/Node>#include <osg/Geode>#include <osg/Group>#include <osg/Camera>#include <osg/ShapeDrawable>#include <osg/ComputeBoundsVisitor>#include <osg/原创 2017-07-12 14:17:56 · 2007 阅读 · 0 评论 -
OSG学习:使用已有回调示例
回调的类型有很多种,一般很容易就想到的是UpdateCallBack,或者EventCallBack,回调的意思就是说,你可以规定在某件事情发生时启动一个函数,这个函数可能做一些事情。这个函数就叫做回调函数。#include#include#include#include#include#include#include//创建一条路径osg::AnimationPath* c原创 2017-07-03 08:38:22 · 1399 阅读 · 0 评论 -
【OSG】 报错:丢失osg100-osgDB.dll
如果你bin目录已经添加到了环境变量的path里面,还报这个错的话。或许你重启一下电脑就可以了。。我就这么解决的。原创 2017-06-05 11:42:31 · 1369 阅读 · 0 评论 -
OSG配置失败解决方案
这连续三天都在台式机上配置OSG,总是报各种各样的错。后来换到笔记本上配置,结果一次性就配置成功了。笔记本和台式机都是WIN10系统,都是VS2013。或许有时候出错就可以换台电脑或者重装系统试试。简单的一些感想,仅供娱乐。原创 2017-06-06 16:59:29 · 695 阅读 · 0 评论 -
无法打开mfc120.lib
今天在用VS2013编译OSG的时候报错:无法打开mfc120.lib。仔细查了下资料。我是这么解决的:安装Multibyte MFC Library for Visual Studio 2013。下载地址。原创 2017-06-03 07:32:33 · 5777 阅读 · 0 评论 -
OSG学习:矩阵变换节点示例
#include#include#include#include#include#include#include#includeint main(){ //创建Viewer对象,场景浏览器 osg::ref_ptr viewer = new osgViewer::Viewer(); //创建场景组节点 osg::ref_ptr root = new osg::G原创 2017-06-28 19:30:22 · 483 阅读 · 0 评论 -
OSG学习:自动对齐节点示例
/***********************************************************Write by FlySky*zzuxp@163.com http://www.OsgChina.org**********************************************************/#include #include #原创 2017-06-28 20:43:38 · 875 阅读 · 0 评论 -
OSG学习:基本几何体绘制示例
绘制并渲染几何体主要有如下3大步骤:1.创建各种向量数据,如顶点、纹理坐标、颜色和法线等。需要注意的是,添加顶点数据时主要按照逆时针顺序添加, 以确保背面剔除的正确。2.实例化一个几何体对象(osg::Geometry),设置顶点坐标数组、纹理坐标数组、颜色数组、法线数组、绑定方式及数据解析。3.加入叶节点绘制并渲染。代码:#include #include #i原创 2017-06-30 21:33:46 · 2499 阅读 · 0 评论 -
osg::Vec2 Vec3 Vec4
osg::Vec2可以用于保存2D纹理坐标。 osg::Vec3是一个三维浮点数数组。 osg::Vec4用于保存颜色数据。原创 2017-07-10 22:27:01 · 9151 阅读 · 0 评论 -
OSG配置捷径,VS2013+WIN10
在自己电脑上用CMAKE已经编译好了,上传到百度云里面了。环境是WIN10+VS2013。链接:http://pan.baidu.com/s/1hrO7GFE 密码:fwkw解压之后放在C盘或者D盘,然后把配置一下环境变量即可。例如:放在C盘根目录,那么环境变量配置如下:OSG_FILE_PATH: C:\OSG\dataPATH:C:\OSG\bin;原创 2017-06-21 17:29:07 · 4225 阅读 · 0 评论 -
OSG学习:多重纹理映射
#include#include#include#include#include#include#include#include#include#includeint main(){ osg::ref_ptr viewer = new osgViewer::Viewer(); osg::ref_ptr root = new osg::Group(); osg原创 2017-07-02 09:53:38 · 3094 阅读 · 0 评论 -
OSG学习:移动/缩放/旋转模型
移动和缩放以及旋转都是对矩阵进行操作,这些操作如果要叠加直接矩阵相乘就可以了。下面的示例代码中,加入了四个bignathan,一个是默认加入在最中间,一个向上移2单位,一个是向下移2单位且缩放0.5倍,另一个是向右4单位,缩放0.5且平躺45度。#include#include#include#includevoid main(){ osgViewer::V原创 2017-07-02 16:28:55 · 929 阅读 · 0 评论 -
OSG数学基础:坐标系统
坐标系是一个精确定位对象位置的框架,所有的图形变换都是基于一定的坐标系进行的。三维坐标系总体上可以分为两大类:左手坐标系和右手坐标系。常用的坐标系:世界坐标系、物体坐标系和摄像机坐标系。世界坐标系 世界坐标系是一个特殊的坐标系,它建立了描述其他坐标系所需要的参考框架。从另一方面说,能够用世界坐标系来描述其他坐标系的位置,而不能用更大的、外部的坐标系来描述世界坐标系。世界坐标系原创 2017-07-11 21:04:24 · 557 阅读 · 0 评论 -
OSG数学基础:坐标系变换
三维实体对象需要经过一系列的坐标变换才能正确、真实地显示在屏幕上。在一个场景中,当读者对场景中的物体进行各种变换及相关操作时,坐标系变换是非常频繁的。坐标系变换通常包括:世界坐标系-物体坐标系变换、物体坐标系-世界坐标系变换和世界坐标系-屏幕坐标系变换(一个二维平面坐标系,即显示器平面,是非常标准的笛卡尔坐标系的第一象限区域)。世界坐标系-物体坐标系变换 它描述的问题主要是关于物体本身的原创 2017-07-11 21:54:30 · 1348 阅读 · 0 评论 -
OSG学习:响应键盘鼠标示例
示例功能:示例里面有两个模型,一个是牛,另一个是飞机。鼠标右键时牛和飞机都隐藏,鼠标左键双击时牛和飞机都显示,按键盘上面的LEFT键,显示牛,按键盘上面的RIGHT键显示飞机。其中显示与隐藏节点使用的是setNodeMask(bool)。bool的值为1的时候是隐藏,0的时候是显示。#include#include#includeclass UseEventHandler :publi原创 2017-07-02 17:17:16 · 2006 阅读 · 0 评论 -
【OSG】error LNK2019: 无法解析的外部符号 该符号在函数 中被引用 解决方案
需要添加lib或者dll库。项目-属性-配置属性-链接器-输入-附件依赖项,添加需要的lib。例如我在运行OSG程序的时候,忘记添加了附件依赖项就会报这个错。解决方案如图。原创 2017-06-28 10:10:26 · 4126 阅读 · 0 评论