|
我继承了osg::GraphicsContext::SwapCallBack结构体,旨在osg场景绘画完成后,绘制我自己写的opengl场景元素,如下:
- struct osg::GraphicdContext::mySwapCallBack{
- virtual void SwapBuffersImplementation(osg::GraphicsContext *gc)
- {
- //////////////////////////////////////
- // 矩阵切换和保存
- glMatrixmode(GL_PROJECTION);
- glPushMatrix();
- glLoadIdentity();
- glOrthro(0,width,height,0,near,far);
- glMatrixMode(GL_MODEVIEW);
- glPushMatrix();
- glViewport(0,0,width,height);
- glLoadIdentity();
- ///////////////////////
- // pengl 场景绘制
- glPushMatrix();
- glTranslatef(width-80,height-60);
- glColor4f(1.0,0.0,0.0,1.0);
- glBegin(GL_QUADS);
- glVertex2i(4,3);
- glVertex2i(72,3);
- glVertex2i(72,54);
- glVertex2i(4,54);
- glEnd();
- glColor4f(1.0,1.0,1.0,1.0);
- glPopMatrix();
- ////////////////////////
- // 还原原矩阵
- glMatrixMode(GL_MODEVIEW);
- glPopMatrix();
- glMatrixmode(GL_PROJECTION);
- glPopMatrix();
- //////////////////////////////////////
- // 最后调用osg的帧交换接口。
- gc->SwapBuffersImplementation();
- }
- }
复制代码
使用opengl在屏幕上绘制一个2d红色矩形框,然后,我将osgViewer::Viewer类对象设置了上述继承结构体。
我工作的计算机是双屏的,如果采用单窗口(跨双屏,反映在osg中也就是一个context),到目前为止还没看到什么怪现象。但是采用双窗体时,在我旋转camera时,在某些情况下可以画出来,某些情况下画不出来。如果在osg场景中在osg视口场景中添加一个2D的图像,那么怪现象就消失了。
所以我觉得可能是osg的自动计算场景元素的远近切面造成的(不好意思我的osg经验不足,可能上述判断有问题,还望见谅)。
请问怎么在我写的SwapCallBack结构体上解决问题(最好不要让我把结构体中的代码转换成osg场景图像,因为太多了,而且不是我写的)。
谢谢! |
|