
OSG
文章平均质量分 59
longlongway2012
今日之事,今日毕。
展开
-
法线可视化
法线针对光照计算有着重要的意义,但有时候,很难直观的检查计算的光照效果是否正确.有时感觉怪怪的,但也不知道是否是错误,我们可以将发现图显示到输出,但更直观的是,直接将法线绘制出来。......原创 2022-07-25 08:40:55 · 618 阅读 · 0 评论 -
osgSimplegl3结合RenderDoc工具
上一篇文章介绍了osg自带的osgSimple3例子,现在对它进行一定的修改,使其运行在gl3.3core模式下。原创 2022-07-18 17:28:50 · 709 阅读 · 0 评论 -
osgSimplegl3例子分析
前面完成了osgGL3环境的搭建,这里主要分析下osg下如何结合gl3进行开发工作。原创 2022-07-17 16:32:21 · 368 阅读 · 0 评论 -
01-01-osg GL3 环境搭建
osg 进阶示例 - osg gl3 配置原创 2022-07-10 08:36:22 · 1193 阅读 · 1 评论 -
osg进阶-序
OSG高级进阶:基于OpengGL 3.3以后版本的osg相关例子研究原创 2022-07-10 06:55:08 · 414 阅读 · 0 评论 -
osg3.6.5编译freetype失败
osg3.6.5编译freetype失败编译osgfreetype失败,需要对freetype单独设置png的静态链接:如图:原创 2022-05-29 18:30:30 · 300 阅读 · 0 评论 -
OSG 常见问题
from: http://www.cnblogs.com/lyggqm/p/6222341.htmlOpenSceneGraph FAQ1、地球背面的一个点,计算它在屏幕上的坐标,能得到吗? 不是被挡住了吗?答:计算一个空间点的屏幕坐标,使用osgAPEx::GetScreenPosition函数。当空间点处于相机视空间内(不管它是否被别的物体遮挡)时,都是可以得到它对应的屏幕坐标的。如何判断一个...转载 2018-06-28 14:03:35 · 3978 阅读 · 0 评论 -
OpenThreads之block使用
对于Block类的使用,需要在两个线程中配合使用:1.线程1 中 调用block,进入等待,2. 线程2 中调用release 进行释放 3.同时必须在 线程1执行block结束,或线程2 release结束后,调用reset ,重置阻塞器状态。实例代码如下:#include <iostream>#include <string>#include <sstream...原创 2018-06-26 17:20:32 · 3477 阅读 · 0 评论 -
osg setRenderBinDetails 使用
StateSet::setRenderBinDetails 用于控制对象绘制的顺序,函数第一个参数表示绘制优先级,比如我们需要绘制文字:HUDStateSet->setRenderBinDetails(1000, "RenderBin"); // 表示绘制文字显示在屏幕最前端程序默认的优先级为0,该函数可以设置不同的优先级,大于0,表示最后绘制,小于0,表示优先绘制(显示在底层)从osg论坛...原创 2018-06-25 20:46:07 · 4134 阅读 · 0 评论 -
OSG场景图状态和状态集第1部分
from:http://www.bricoworks.com/articles/stateset/stateset.html## 你一直想直到的关于StateSet的一切(但不敢来问作者: Tim Moore翻译:longlongwaytogo 一些名词翻译: Open Scene Graph: OSG scene graph :场景树 XXgraph state :状态树对于OSG的优化策略,最...翻译 2018-06-14 13:05:07 · 1912 阅读 · 0 评论 -
OSG 数据预加载
osg 默认数据是被cull到,才会加载的,如果需要在程序启动时就加载,但启动后并不一定需要看到该模型,这种需求,怎么实现? 查了大量资料,还是国外的OpenSceneGraph论坛比较强大,有人问到,国内论坛已经死掉了,不再维护。大致的解决方法,就是使用osgUtil::IncrementalCompileOperation,来预编译资源。大体步骤:1. 从Viewer获取 os...原创 2018-05-25 23:09:12 · 1549 阅读 · 3 评论 -
OSG 3.6.3 版本编译一些问题
编译OSG最新版本3.6.3,本以为没什么问题(因为曾经便已过N多次),但还是遇到些棘手问题,在这里做一总结。 1. 编译出现 osg库正常编译,osgDB编译提示找不到glColor4fv、 glLoadMatrix等基础函数。查明原因:gl.h引用出现错乱解决方法:打开include/osg/GL头文件,找到包含#include<GL/gl.h> 替换为本机绝...原创 2018-11-01 08:57:41 · 2274 阅读 · 0 评论 -
gl_NormalMatrix理解:
法线矩阵:G 模型视图矩阵:M 则: G: = M逆矩阵的转置矩阵 若: M是正交矩阵,M的逆矩阵= M的转置矩阵 所以,当没有Scale变换时,(只存在Rotate、Transform变换) ModelView = G OSG中计算 gl_NormalMatrix: ...原创 2018-11-01 10:58:28 · 1117 阅读 · 0 评论 -
OSG图元重启动绘制
1.OpenGL图元重启动图元重启功能,是OpenGL3.1版本以后支持的一项,快速绘制重复图元的技术。当需要处理较大的顶点数据集的时候,我们可能会被迫执行大量的OpenGL绘制操作,并且每次绘制的内容总是与前一次图元的类型相同(例如GL_TRIANGLE_STRIP)。当然,我们可以使用glMultiDraw*()形式的函数,但是这样需要额外去管理图元的起始索引位置和长度的数组。OpenG...原创 2018-11-05 17:22:49 · 1540 阅读 · 0 评论 -
使用HudCamera绘制坐标轴
1. 前言最初一位Ortho2D投影矩阵下,后来想到它也是三维投影,只不过没有透视效果,绘制三维模型完全可以。2.实现思路创建相机,设置为POST_RENDER模式,并设置ClearMask为:GL_DEPTH_BUFFER_BIT(表示与场景绘制结果进行叠加)使用MatrixTransform节点进行组织axes模型,用于变换处理创建MatrixTransform节点的更新回调处理,...原创 2018-11-08 17:46:55 · 1191 阅读 · 0 评论 -
OpenMW宣布切换到OpenSceneGraph的原因(2015)
自我们第一次发布以来,Ogre3D是OpenMW使用的渲染引擎。现在,OpenMW团队正在宣布远离这个引擎。在我们的alpha版本中,Ogre3D已证明非常有用,可实现快速开发。感谢Ogre3D,你今天已经可以在OpenMW中玩一个或多或少完整的Morrowind游戏,这本身就是一个令人难以置信的壮举。然而,为了让OpenMW进入抛光状态并添加最后几个缺失的功能,我们面临着艰巨的任务,要么...翻译 2019-03-12 09:06:46 · 590 阅读 · 0 评论 -
OpenMW移植为OpenSceneGraph后的第一版(2015-06-07)
在过去三个月中,OpenMW团队一直在努力将代码库从Ogre3D引擎移植到OpenSceneGraph渲染工具包。在以前的文章对我们的动机会谈。我们很高兴地宣布移植工作终于取得成果 - 因为所有游戏玩法必不可少的功能已被移植,因此用户可以在OpenMW-osg开发分支中享受Morrowind的合法游戏。一些高级功能 - 着色器,远距离地形,阴影和水反射 - 尚未移植。然而,即使是这么早,可...翻译 2019-03-12 09:22:18 · 568 阅读 · 0 评论 -
osg3.0 集成 CEGUI 0.8.7
集成的关键是从Drawable派生子类,在子类内部执行cegui绘制,同时需要注意CEGUI的初始化,需要放到realize()函数之后,否则无法拿到OpenGL HRC。核心代码如下:CEGUILayer.h#ifndef CEGUI_LAYER_H#define CEGUI_LAYER_H#include <CEGUI/System.h> #include <C...原创 2019-06-17 18:27:35 · 612 阅读 · 0 评论 -
CEGUI界面无法显示问题处理
使用CEGUI+osg进行集成,照着网上的例子抄了抄,在osg3.0版本下运行没有问题,但切换到3.6 版本就怎么都无法出现界面,后来发现,是自己使用过程中,对代码的理解不够清晰,仅限于抄代码,而没有去理解为什么这样写,知其然,不知其所以然,肯定是不行的,为此付出了大量宝贵事件,特以此为警戒。出现错误的代码为:···C++void CeGuiMainWindow::drawImplement...原创 2019-07-03 11:00:33 · 345 阅读 · 0 评论 -
OSG中矩阵和向量相乘
OSG中,Matrix可以前乘Vec3,也可以后乘,但意义不同。V*M: 表示向量V经过矩阵变化得到新的矩阵,因为OSG是按行来进行矩阵变换的:V * Scale * Rotate * Translate。M*V则没有这样的意义,但 V*M = M逆*V 成立。...原创 2018-04-26 21:02:03 · 1779 阅读 · 0 评论 -
OSG 自定义事件使用问题
在osg3.4下,使用自定义事件userEvent接口,添加事件时间参数使用默认值,程序运行正常,但移植到3.0版本,发现事件相应延迟好几帧,甚至一直不能触发,最后阅读源码发现,3.0和3.4中takeEvents算法修改比较大,导致参数错误而事件无法正常执行。userEvent的时间默认值为获取当前时间。但3.0版本中,获取当前时间会导致时间无法及时执行,执行将时间参数设置为0,即可解决问题。3...原创 2018-04-26 20:52:25 · 671 阅读 · 0 评论 -
每日一练(五)变换节点
PositionAttitudeTransform MatrixTransform 使用:#include "stdafx.h"#include "../include/LoadLib.h"#include #include #include #include #include #include #include #include #include #include原创 2014-01-18 23:06:44 · 800 阅读 · 0 评论 -
每日一练(三) pointSprite(点精灵)
点精灵实现:1、创建点集合osg::Node* PointSpriteImpl::MakeGalaxy(int nVertices){ osg::Geode* geode = new osg::Geode(); osg::Geometry* galaxy = new osg::Geometry(); osg::Vec3Array* vertices = new原创 2014-01-16 23:55:35 · 1495 阅读 · 0 评论 -
每日一练(四) Billboard (布告牌)
1、简介:BillBoard 用于实现没有实心表面的物体,如树、烟火、雾、雨等特效。2、示例:1.1:创建BillBoard节点原创 2014-01-17 23:41:15 · 773 阅读 · 0 评论 -
每日一练(十)pageLod
#include #include #include #include #include #include #include #include #include #include #include "../include/LoadLib.h"osg::ref_ptr CreatePageLod(){ osg::ref_ptr pag原创 2014-01-23 22:40:13 · 2462 阅读 · 0 评论 -
每日一练(二) animationPath
1、创建棋盘纹理: 棋盘纹理,就是在一个二维空间创建一个网格,在这个网格的四角为一个区域,进行颜色填充。采用QUADS方式绘制改棋盘。osg::Node* OSGAnimateImpl::CreateBase(osg::Vec3 center,float radius){ // 1. 创建棋盘纹理 // 网格数 int numTileX = 10;原创 2014-01-15 23:35:40 · 825 阅读 · 0 评论 -
每日一练 (九)LOD切换
#include "stdafx.h"#include "../include/LoadLib.h"#include #include #include #include #include #include #include #include #include osg::ref_ptr CreateLodNode(){原创 2014-01-22 22:09:15 · 996 阅读 · 0 评论 -
每日一练(一) the cow's world
1.预备工作: (1).编译osg3.0 (2)配置系统环境变量 (3)写下最简单的osg:include#include #include#includeint _tmain(int argc, _TCHAR* argv[]){ // creat viewer osg::ref_ptr viewer = new osgViewe原创 2014-01-14 22:48:34 · 730 阅读 · 0 评论 -
osg每一练——start 序
图形开发,一直是自己最大的兴趣,却一直没有机会写图形代码,整日写了些通信、界面、甚至‘该死’的C#、js、com、mfc 乱七八糟。现在只想重拾自己昨日的梦,开始我的图形之旅。 刚开始工作时就接触osg,觉得很好用,也很不错,虽然公司产品用到osg很多的思想,但一直没有机会去从事底层引擎开发,只能做些界面、功能等其他工作。一直痴迷的心却一次次的被消磨,已经工作4年了,问问自己,是否原创 2014-01-14 22:37:34 · 742 阅读 · 0 评论 -
每日一练(六)多窗口显示
1. 创建两个视图bool WindowImpl::Init(){ m_offx = 40; m_offy = 40; // window one { osg::ref_ptr traits = new osg::GraphicsContext::Traits(); traits->x = m_offx + 0;原创 2014-01-19 22:54:31 · 804 阅读 · 0 评论 -
每日一练(七)自动变换节点
1. 创建变换函数: osg::ref_ptr CreateAutoTransform(osg::Vec3& position,float nSize,std::string&lable, osg::AutoTransform::AutoRotateMode mode,osgText::Text::AxisAlignment alignment) {原创 2014-01-20 23:01:53 · 1347 阅读 · 0 评论 -
osg 60Hz帧率限制
对于osg程序,程序内部会使用两种方式进行帧率限制,一种是通过算法实现帧率限制在60Hz,另一种是使用显卡垂直同步限制在60Hz,为什么是60Hz呢,因为大部分显示器都是60Hz的刷新频率运行。一下分别演示两种限制如何取消。软件算法设置的帧率限制,可以通过设置setRunMaxFrameRate来设置需要将帧率限制在某一个数值,不过这个限制只能将帧率提高到显示器的刷新频率60Hz。如果程序原创 2018-03-27 22:12:07 · 2754 阅读 · 0 评论 -
osg Image 保存图片测试
// test for read imageosg::ref_ptr<osg::Texture2D> texture2d = new osg::Texture2D;osg::ref_ptr<osg::Image> img = new osg::Image;img=osgDB::readImageFile("C:\\Users\\Public\\Pictures\\Sa...原创 2018-02-26 14:37:16 · 3990 阅读 · 1 评论 -
osg Nofity使用
osg底层支持调试信息输出,主要功能包括:日志的分级输出 日志的重定向输出 日志的dbgView输出1. 分级输出: osg::setNotifyLevel(osg::INFO);2. 重定向输出,默认输出到consle控制台:定义全局对象: static std::ofstream g_log("out.log"); 设置日志重定向: std::ost原创 2017-08-14 16:24:15 · 561 阅读 · 0 评论 -
Osg getLookAt 函数
使用OSG的人都知道,OSG的坐标系数为:右手系,+z 向上。但若不设置Camera朝向,相机是俯看地面的。原因就在于OSG的相机将初始方向设置为:+y 向上,+z 向前。OSG 相机坐标系:+y +Z| /| / | / | / |/__________ +xOSG 世界坐标系:+z +y| /| / | /原创 2017-08-10 08:56:48 · 1131 阅读 · 0 评论 -
OSG矩阵运算 (转载)
link:http://www.cnblogs.com/indif/archive/2011/05/13/2045106.htmlOSG矩阵运算 我们都知道,OpenGL规定矩阵使用列主序存储,即glLoadMatrix等函数要求输入的数组是按列主序存储的矩阵。然而,一个很奇怪的事实是,OSG中矩阵存储是使用的标准C二维数组(行主序),并且也是直接将行主序存储的矩阵元素作为参数传原创 2017-08-09 11:29:48 · 2034 阅读 · 0 评论 -
osg 相机操作
setViewMatrixAsLookAt: 在世界坐标系中设置相机的位置和姿态信息。setViewMatrix: 设置相机坐标系下,设置三维世界的位置。这两个函数传递的matrix 互为逆矩阵,因为,对于修改相机位置和修改三维世界,都可以达到相同的效果。假定,相机不动,我们要看到人前进的效果,那就是不停的移动三维世界;如果,认为世界不动,我们要看到人前进的效果,需要移动相原创 2017-07-31 11:52:52 · 2710 阅读 · 0 评论 -
OSGB 文件格式
OSGB 节点父子关系拓扑: MatrixTransform (通过ProxyNode关联PageLod) || PageLod || PageLod || PageLod原创 2017-06-23 15:27:32 · 33109 阅读 · 13 评论 -
osg名词解释
osg:: ClearNode;颜色清除节点;用于设置清除颜色缓存的相关选项,它的子节点将在场景中首先渲染,以确保正确执行颜色缓存的设置;osghangglideosg:: ClipNode;剪切平面节点;定义场景中的剪切平面并剪切所有可剪切的子节点。注意,ClipNode能够剪切的节点不一定是它的子节点,详见第七章有关LightSource类的部分;osgcliposg:转载 2017-06-20 10:47:46 · 1219 阅读 · 0 评论 -
每日一练( 八)切换节点
1. 切换节点int _tmain(int argc, _TCHAR* argv[]){ // osg::ref_ptr node1 = osgDB::readNodeFile("cow.osg"); osg::ref_ptr node2 = osgDB::readNodeFile("glider.osg"); osg::ref_ptr sw =原创 2014-01-21 22:06:48 · 743 阅读 · 0 评论