第一日:
-
eventTraversal 处理鼠标、键盘事件,以及摄像机与场景图形的事件回调
-
updateTraversal 负责遍历所有的更新回调,以及更新DatabasePager与ImagePager两个重要的分页数据处理租组件
-
randeringTraversals 使用复杂的线程处理方法,完成场景的筛选(cull)和绘制(draw)工作
-
_eventQueue 是用于存储该视景器的事件队列
-
osgGA::GUIEventAdapter 是osg中代表事件的类
-
osgGA::GUIEventHandler 我们通过继承该类,并实现他的handle() 方法,来获取实时的键盘/鼠标输入,并进而实现相应的用户代码
-
_cameraManipulator 它就是视景器中使用的场景漫游器实例
-
osgGA::MatrixManipulator 新版osg已改名为osgGA::CameraManipulator, 如果想要实现自定义的场景漫游器,就覆写该类的handle方法和init方法
第二日:
-
osg::GraphicsContext 图形设备上下文。要将osg嵌入GUI系统,需要设置一下三步:
1. 设置窗口特性osg::GraphicsContext::Traits traits;
2. 根据窗口特性,创建图形设备上下文(gc = osg::GraphicsContext::createGraphicsContext(traits));
3. 将创建的图形设备上下文(gc),赋予场景所用的摄像机。
第三日:
1. WindowingSystemInterface::createGraphicsContext 是纯虚函数,由osgViewer/GraphicsWindowWin32.cpp中的静态变量osg::WindowingSystemInterfaceProxy<Win32WindowingSystem> s_proxy_Win32WindowingSystem("win32") 实现对该虚函数的实现
第四日:
1. osgViewer::Viewer::realize() 获取所有的图形上下文contexts,如果contexts为空,调用相关函数创建图形上下文;遍历contexts,执行图形上下文gc的realize(),makeCurrent(),releaseContext()
2. 视景器Viewer的主/从摄像机均需要setGraphicsContext设置图形上下文,实际上也就是对应的显示窗口
3. 如果窗口特性(Traits)中,开启了pbuffer选项,则osg将尝试创建osgViewer::PixelBufferWin32设备,以实现离屏渲染(Offscreen Render),纹理烘焙(Render To Texture)等工作,否则只建立通常的OpenGL窗口
第五日:
1. osgViewer::Viewer::realize() 尾部执行设置线程
1. SingleThread
2. CullDrawThreadPerContext
3. DrawThreadPerContext
4. CullThreadPerCameraDrawThreadPerContext
2. setUpThreading() 他的工作主要是处理单线程模式下,多处理器系统的数据线程分配方式
1. 使用CUP0来处理用户更新,筛选和渲染等一切事务
2. 使用CUP1来处理场景的两个分页数据库(DatabasePager)线程(他们分别用于处理本地和网络上的场景数据)
3. Viewer::getScene() 获取当前视景器对应的osgViewer::Scene对象, 也就是场景。一个场景包含了唯一的场景图形跟节点,分页数据库(DatabasePager),以及分页图像库(ImagePager)
4. getOrCreateCompileContext()
第六日:
1. ViewerBase::getStats 获取osg::Stats对象,用以进行帧状态的保存和显示
2. DeleteHandler 垃圾回收机制
3. 视景器、摄像机与场景的关系
第七日:
1. _eventHandlers 事件处理器组,每个视景器中都有一个事件处理器组,而不是一个事件处理器
2. 事件队列的状态事件 事件队列是由GUIEventAdapter对象组成的链表,事件之间可能共同的参数和状态就是状态事件,比如坐标位置等
3. VPW矩阵
1. V 表示摄像机的观察矩阵(View Matrix),他的作用是把对象从世界坐标系转到摄像机坐标系;
localCoord = worldCoord * VM
观察矩阵可以理解为“摄像机在世界坐标系下的变换矩阵的逆矩阵”,他的实际意义表示摄像机在世界坐标系下的位置
2. P 表示投影矩阵(Projection Matrix),当我们使用setProjectionMatrixAsPerspective之类的函数设置摄像机的投影矩阵时,相当于我们创建了一个视截锥体,并尝试将包含在其中的场景对象投影到镜头平面上来