osg::Camera example】的更多相关文章

#ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include<iostream> #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers> #include <osgViewer/CompositeViewer> #include <osgDB/ReadFile> #include <osg…
#ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include<iostream> #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers> #include <osgViewer/CompositeViewer> #include <osgDB/ReadFile> #include <osg…
这个例子演示了在多个窗口中创建多个相机,函数的代码如下: void multiWindowMultipleCameras(osgViewer::Viewer& viewer,bool multipleScreens) { osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface(); if (!wsi) { osg::notify(osg::NOT…
在学习OSG提供的例子osgCamera中,由于例子很长,涉及很多细节,考虑将其分解为几个小例子.本文介绍实现在一个窗口中添加多个相机的功能. 此函数接受一个Viewer引用类型参数,设置图形上下文的特征变量traits,并由它建立图形上下文.根据需要差创建的相机数量,循环创建相机变量,并将其添加到观察器变量中,作为从相机.每次创建相机,都需要获取当前图形上下文,并设置相机的起点(左下角)坐标和相机的宽度与高度.相机间的区别仅在于相机起点的不同.完整的程序代码如下. void singleWin…
1.地球背面的一个点,计算它在屏幕上的坐标,能得到吗? 不是被挡住了吗? 答:计算一个空间点的屏幕坐标,使用osgAPEx::GetScreenPosition函数.当空间点处于相机视空间内(不管它是否被别的物体遮挡)时,都是可以得到它对应的屏幕坐标的. 如何判断一个点是否在地球背面?可以通过计算该点处垂直地面的方向UP,与相机方向的夹角,如果夹角为锐角,则可认为该点在地球背面.计算地球上任意点的UP方向使用osgAPEx::ComputeLocalUpVector. 2.OSG中可以播放视频吗…
1.example_osganimate一)演示了路径动画的使用(AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView.MatrixTransform.PositionAttitudeTransform等四种类型的节点上.二)演示了osgSim::OverlayNode的使用 2.example_osganimationeasemotion一)演示了osgAnimation::EaseMotion的使用,EaseMot…
严重注意!!!以下设置必须在viewer.realize();之后,否则不起作用!!!! 设置相机的位置,可以通过CameraManipulator(一般是osgGA::TrackballManipulator)设置, 可以使用setTransformation设置 设置相机的其他参数,ViewMatrix,ProjectionMatrix,Viewport osg::Camera* c=viewer.getCamera(); c.setViewMatrix.... c.setProjectio…
OSG中的HUD 所谓HUD节点,说白了就是无论三维场景中的内容怎么改变,它都能在屏幕上固定位置显示的节点. 实现要点: 关闭光照,不受场景光照影响,所有内容以同一亮度显示 关闭深度测试 调整渲染顺序,使它的内容最后绘制 设定参考贴为绝对型:setReferenceFrame(osg::Transform:ABSOLUTE_RF) 使其不受父节点变换的影响:setMatrix(osg::Matrix::identity()) 使用平行投影,设定虚拟投影窗口的大小,这个窗口的大小决定了后面绘制的图…
osg实例介绍 转自:http://blog.csdn.net/yungis/article/list/1 [原]osgmotionblur例子 该例子演示了运动模糊的效果.一下内容是转自网上的:原理:引用内容对于运动画面,将当前帧画面与上一帧画面进行alpha融合,以产生出残影——运动模糊效果.通过使用累积缓存来完成这项工作.OpenGL提供一个累积缓存,可以用来存储当前指定的颜色缓存里面的内容,并进行一定的运算操作.通过函数glAccum可以对累积缓存进行操作. glAccum介绍如下:引用…
OSG中的示例程序简介 转自:http://www.cnblogs.com/indif/archive/2011/05/13/2045136.html 1.example_osganimate一)演示了路径动画的使用(AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView.MatrixTransform.PositionAttitudeTransform等四种类型的节点上.二)演示了osgSim::OverlayNode…
//NeartestPointNodeVisitor.h #pragma once #include <osg\Matrix> #include <vector> #include <osg\Node> #include <osg\NodeVisitor> #include <osg\Camera> #include <osg\Vec3> #include <osg\MatrixTransform> #include &l…
将OpenGL中的功能与OSG对应功能进行列举: OpenGL function OpenSceneGraph implementation glClear( GLbitfield mask ) osg::Camera::setClearMask(GLbitfield mask)osg::GraphicsContext::setClearMask(GLbitfield mask)osg::ClearNode::setClearMask(GLbitfield mask)osg::RenderSta…
原文:http://blog.csdn.net/tmljs1988/article/details/7562926 可以运行 1.       HUD流程图: 完整源代码如下: /*OSG中的HUD,文字总是显示在最前面*/ #include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osg/Geode> #include <osg/Depth> #include <osg/Camer…
由于需要在3D坐标轴上显示刻度值,所以要用到osgText::Text,这里简单记录一下其常见用法. 一.基本知识 常见设置 设置字体:setFont 设置内容:setText,这里输入参数需要是osgText::String,但它的构造函数可以接收std::string类型的字符串. 设置坐标位置:setPosition 设置文字尺寸:setCharacterSize 设置恒定尺寸还是随视角缩放(与现实一致):恒定为setCharacterSizeMode( osgText::Text::SC…
// draw callback that will tweak the far clipping plane just    // before rendering a drawable.    struct OverrideNearFarValuesCallback : public osg::Drawable::DrawCallback    {        OverrideNearFarValuesCallback(double radius)            : _radius…
OSG中的示例程序简介 1.example_osganimate一)演示了路径动画的使用 (AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView. MatrixTransform.PositionAttitudeTransform等四种类型的节点上.二)演示了osgSim::OverlayNode的使用 2.example_osganimationeasemotion一)演示了osgAnimation::EaseMot…
// testMultiScreen.cpp : Defines the entry point for the console application.// #include "stdafx.h"#include <osg/Camera>#include <osgDB/ReadFile>#include <osgGA/TrackballManipulator>#include <osgViewer/CompositeViewer> os…
测试平台(1)Fedora19 x86 [cc@localhost ~]$ lspci | grep VGA :) :00.0 VGA compatible controller: NVIDIA Corporation GK107M [GeForce GT 645M] (rev a1) (2)Python 2.7(3)Osg 3.2.0(4)cmake 2.8(5)gcc 4.8.2 #include <Python.h> #include <iostream> #include…
1.example_osganimate一)演示了路径动画的使用(AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView.MatrixTransform.PositionAttitudeTransform等四种类型的节点上.二)演示了osgSim::OverlayNode的使用 2.example_osganimationeasemotion一)演示了osgAnimation::EaseMotion的使用,EaseMot…
osg::GraphicsContext::runOperations().我们先来看一下这个函数的执行过程. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 void GraphicsContext::runOperations() {   …
我们继续renderingTraversals()的探究.我们接着上一节的”阻塞渲染线程”后就要遍历所有摄像机的渲染器(Renderer),执行 Renderer::cull 场景筛选的操作.我们在renderingTraversals()中总是遇到这个Renderer类,我们就先补充一下他的介绍. osgViewer::Renderer类为摄像机渲染场景的工作提供了一个公有接口.通常是在View::setCamera(osg::Camera* camera)函数中进行默认绑定的. ? 1 2…
补充 当然细心的你会发现,_scene->updateSceneGraph(*_updateVisitor)中还有一个imagePager::UpdateSceneGraph()还没有进行讲解,这是因为imagePager和DatabasePager是可以对比这理解的,这里imagePager的主要功能就是加载纹理图片文件.但是imagePager只是负责在另一个线程中加载图片,而没有databasePager的分页功能以及去掉过期数据.这样我们就真的可以重新回到Viewer::updateTr…
转自:https://blog.csdn.net/qq_30754211/article/details/61190698 #include <osg/Geometry> #include <osg/Geode> #include <osg/Depth> #include <osg/Texture2D> #include <osgDB/ReadFile> #include <osgViewer/Viewer> int main( in…
由于受够了OE的漫游器,想搞个可以在全球飞行的漫游器,所以就做了一个: 请无视我的起名规则······ 类头文件:EarthWalkManipulator.h #pragma once //南水之源 20180101 #include <osgGA/CameraManipulator> #include <osgEarth/MapNode> #include <osgEarth/Viewpoint> #include <osgEarth/GeoData> c…
相机矩阵变化基础:http://blog.csdn.net/popy007/article/details/5120158 osg漫游器原理:http://blog.csdn.net/csxiaoshui/article/details/51295591 osgGA::CameraManpulator原理:http://blog.csdn.net/csxiaoshui/article/details/51303086 简单的说osgGA::CameraManipulator就是用来修改相机节点姿…
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile("cow.osg"); osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer; { osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; trait…
那我们就开始处理这些事件中得到的所有的交互事件,首先我们要判断这些事件是否包含osg的退出事件,那什么情况下会触发这个退出事件呢?如果您运行过osg中example中的小例子的,聪明的你一定就会发现当按下esc时就会退出osg.所以osg中默认的退出事件就是由esc触发的.当然我们也可以通过ViewerBase::setQuitEventSetsDone 设置是否允许按下某个键之后直接退出这种做法, 同时还可以使用另一个函数 ViewerBase::setKeyEventSetsDone 来设置…
窗口化原理 有时为了方便控制场景渲染,需要设置一个合适的图形环境窗口(即窗口化). 创建图形环境的主要步骤如下: (1)通过WindowingSystemInterface类得到系统窗口接口,该系统接口主要是为了关联窗口系统与图形环境. (2)下面是OSG中图形环境的主要特性,但在实际应用的过程中,没有必要设置每一个参数,只需根据实际需要来设置合理的参数即可. x,y,width,height;//窗口的坐标.高度及宽度,默认值都为0 windowDecration(false), //是否支持…
在很多时候,直接指定纹理坐标是非常不方便的,如曲面纹理坐标,只有少数的曲面(如圆锥.圆柱等)可以在不产生扭曲的情况下映射到平面上,其他的曲面在映射到表面时都会产生一定程度的扭曲.一般而言,曲面表面的曲率越大,纹理所需要的扭曲度就越大.这时,直接指定纹理坐标可能是一件非常困难的事情了. 下面的示例,通过一个纹理坐标生成器(继承自osg::NodeVisitor访问器)遍历模型的所有顶点及法线,然后根据顶点.法线及一定的比例来确定纹理坐标. #include <osgViewer/Viewer>…
同事由于新加了一个屏幕,本来用 osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer(); viewer->setSceneData(groupRoot.get()); return viewer->run(); 就直接可以跑全屏的程序了,然是现在会在两块屏出现全屏,他很苦恼. 于是他: osgViewer::View* createView(int screenNum) { unsigned , height…