osgfpdepth例子
来源:互联网 发布:报警电话 知乎 编辑:程序博客网 时间:2024/06/06 08:30
看看这几个handler的作用:
StatsHandler统计场景信息(s键)
WindowSizeHandler窗体大小操作(f键)
ScreenCaptureHandler场景截图(c键)
AppState类,应用程序的状态,在构造函数中添加了几个文本显示,并通过Projection节点实现HUD,Projection这个节点以后我们分专题再进行仔细的研究,setRenderBinDetails(11, "RenderBin");这个我们之前分析过,在渲染树中根据数字排序进行渲染。
setProjectionMatrixAsPerspective(40.0, 1.0, appState->zNear, zFar);重新设置了视锥体。走进setupGC函数,创建图形上下文,WindowingSystemInterface——ScreenIdentifier——Traits——GraphicsContext——GraphicsWindow
double fovy, aspectRatio, zNear, zFar;
viewer.getCamera()->getProjectionMatrixAsPerspective(fovy, aspectRatio,
zNear, zFar);
double newAspectRatio = double(traits->width) / double(traits->height);
double aspectRatioChange = newAspectRatio / aspectRatio;
if (aspectRatioChange != 1.0)
{
viewer.getCamera()->getProjectionMatrix()
*= Matrix::scale(1.0/aspectRatioChange,1.0,1.0);
}防止三维场景出现变形
gc->realize();
gc->makeCurrent();初始化信息,是gc为当前绘制窗体。gc->releaseContext();
释放图形上下文 gc->close(true);关闭图形上下文
每个图形上下文都有一个指定的contextID,这个是在初始化的时候自动构建的,对于GraphicsWindowWin32在初始化的时候getState()->setContextID( osg::GraphicsContext::createNewContextID() );设置了这个contextID,这里很有意思,在Graphicscontext中有static ContextIDMap s_contextIDMap;把所有的contextID都保存起来,保证独一无二,并且把这个数目osg::DisplaySettings::instance()->setMaxNumberOfGraphicsContexts( contextID + 1 );设置给了DisplaySettings。
FBOExtensions帧缓存对象,判断是否支持帧缓存。
又判断了是否支持"GL_ARB_depth_buffer_float"或"GL_NV_depth_buffer_float"
通过getPossibleConfigs这个函数获取了图形上下文支持的颜色深度类型等信息。
createFBO函数创建FBO帧缓冲对象,在这个函数中根据config信息,把相机中的帧缓存信息读入到data中。destroyFBO销毁FBO对象。
设置了重置gc的回调,重新计算视口大小。
makeTexturesAndGeometry创建了一个Switch节点,添加了帧缓冲中的颜色缓冲和两个不同类型的深度缓冲。
makeRttCamera创建一个RTT相机,作为附属相机加入到了视景中。这个RTT相机什么时候使用呢,看看setStateFromConfig这个函数,获取了这个附属相机,通过setAttachmentsFromConfig函数把视景给了colorTexture纹理。又向憧憬中添加了ConfigHandler和DepthHandler用于控制场景的显示。
以上的分析思路有些乱,我们做一个总结,该例子主要是与帧缓存相关的应用,包括颜色缓存、深度缓存,通过OpenGL函数测试支持的值。Camera相机主要的类,它把GraphicContext和Viewer联系在一起,通过自身的变换从不同角度观看场景,附属相机通过视图和投影矩阵可以使场景变形,实现一些特殊效果,相机还可以实现RTT、HUD等等,之所以有这些功能是因为它里面存储了和帧缓存相关的东西,可以通过相机获取帧缓存中的值实现如本例的效果。
StatsHandler统计场景信息(s键)
WindowSizeHandler窗体大小操作(f键)
ScreenCaptureHandler场景截图(c键)
AppState类,应用程序的状态,在构造函数中添加了几个文本显示,并通过Projection节点实现HUD,Projection这个节点以后我们分专题再进行仔细的研究,setRenderBinDetails(11, "RenderBin");这个我们之前分析过,在渲染树中根据数字排序进行渲染。
setProjectionMatrixAsPerspective(40.0, 1.0, appState->zNear, zFar);重新设置了视锥体。走进setupGC函数,创建图形上下文,WindowingSystemInterface——ScreenIdentifier——Traits——GraphicsContext——GraphicsWindow
double fovy, aspectRatio, zNear, zFar;
viewer.getCamera()->getProjectionMatrixAsPerspective(fovy, aspectRatio,
zNear, zFar);
double newAspectRatio = double(traits->width) / double(traits->height);
double aspectRatioChange = newAspectRatio / aspectRatio;
if (aspectRatioChange != 1.0)
{
viewer.getCamera()->getProjectionMatrix()
*= Matrix::scale(1.0/aspectRatioChange,1.0,1.0);
}防止三维场景出现变形
gc->realize();
gc->makeCurrent();初始化信息,是gc为当前绘制窗体。gc->releaseContext();
释放图形上下文 gc->close(true);关闭图形上下文
每个图形上下文都有一个指定的contextID,这个是在初始化的时候自动构建的,对于GraphicsWindowWin32在初始化的时候getState()->setContextID( osg::GraphicsContext::createNewContextID() );设置了这个contextID,这里很有意思,在Graphicscontext中有static ContextIDMap s_contextIDMap;把所有的contextID都保存起来,保证独一无二,并且把这个数目osg::DisplaySettings::instance()->setMaxNumberOfGraphicsContexts( contextID + 1 );设置给了DisplaySettings。
FBOExtensions帧缓存对象,判断是否支持帧缓存。
又判断了是否支持"GL_ARB_depth_buffer_float"或"GL_NV_depth_buffer_float"
通过getPossibleConfigs这个函数获取了图形上下文支持的颜色深度类型等信息。
createFBO函数创建FBO帧缓冲对象,在这个函数中根据config信息,把相机中的帧缓存信息读入到data中。destroyFBO销毁FBO对象。
设置了重置gc的回调,重新计算视口大小。
makeTexturesAndGeometry创建了一个Switch节点,添加了帧缓冲中的颜色缓冲和两个不同类型的深度缓冲。
makeRttCamera创建一个RTT相机,作为附属相机加入到了视景中。这个RTT相机什么时候使用呢,看看setStateFromConfig这个函数,获取了这个附属相机,通过setAttachmentsFromConfig函数把视景给了colorTexture纹理。又向憧憬中添加了ConfigHandler和DepthHandler用于控制场景的显示。
以上的分析思路有些乱,我们做一个总结,该例子主要是与帧缓存相关的应用,包括颜色缓存、深度缓存,通过OpenGL函数测试支持的值。Camera相机主要的类,它把GraphicContext和Viewer联系在一起,通过自身的变换从不同角度观看场景,附属相机通过视图和投影矩阵可以使场景变形,实现一些特殊效果,相机还可以实现RTT、HUD等等,之所以有这些功能是因为它里面存储了和帧缓存相关的东西,可以通过相机获取帧缓存中的值实现如本例的效果。
- osgfpdepth例子
- 例子
- 例子
- 例子
- 例子
- & + 例子
- / 例子
- 例子
- 例子
- 例子
- 例子
- 例子
- 例子
- 例子
- 例子
- 例子
- 例子
- 【例子】
- 爱情从来不是雪中送炭,爱情只是锦上添花。
- 爱情不是必修课
- 知识积累与人格发展
- 按时间计算
- JAVA常量池技术
- osgfpdepth例子
- JavaScript学习资料整理
- 使用 CXF 做 webservice 简单例子
- Primitive values and Objects
- WF4.0 入门系列(八)Custom Activities and Designers 之二
- Linux的下载命令wget详解
- jQuery 入门教程(19): jQuery UI 概述
- 飞思卡尔摄像头组之摄像头调节
- Linux命令(供参考)