查看: 1730|回复: 11

请问:地球为什么 不是很圆,而且 不显示窗体中间

[复制链接]

该用户从未签到

发表于 2010-7-5 10:23:23 | 显示全部楼层 |阅读模式
代码如下:
int main(int argc, _TCHAR* argv[])
{  
    osgViewer::Viewer viewer;

        osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
   

        traits->x = 20;
        traits->y = 20;
        
        traits->width = 800;
        traits->height = 600;
        traits->windowDecoration = true;
        traits->doubleBuffer = true;
        traits->sharedContext = 0;
        osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());

        osg::ref_ptr<osg::Camera> camera = new osg::Camera;
        camera->setGraphicsContext(gc.get());
        camera->setViewport(new osg::Viewport(0,0, traits->width, traits->height));
        GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
        camera->setDrawBuffer(buffer);
        camera->setReadBuffer(buffer);

        // add this slave camra to the viewer, with a shift right of the projection matrix
        viewer.addSlave(camera.get(), osg::Matrixd::translate(-1.0,0.0,0.0), osg::Matrixd());
   

        osg::Group* rootNode = new osg::Group();
        osg::Node* tankNode =osgDB::readNodeFile("d:\\earth.ive");

    rootNode->addChild(tankNode);
    viewer.setSceneData(rootNode);

    viewer.run();
    return 0;


}

该用户从未签到

 楼主| 发表于 2010-7-5 10:56:51 | 显示全部楼层
高手们 能帮忙解决一下,谢谢

该用户从未签到

发表于 2010-7-5 11:29:55 | 显示全部楼层
你搜搜论坛里的帖子,有相关的东东~~~

该用户从未签到

 楼主| 发表于 2010-7-5 11:54:05 | 显示全部楼层
能不能 直接 指点一下 谢谢

该用户从未签到

发表于 2010-7-5 12:16:10 | 显示全部楼层
viewer.addSlave(camera.get(), osg::Matrixd::translate(-1.0,0.0,0.0), osg::Matrixd());
这句话很奇怪?这说明您是有意把场景的观察位置偏移的,因此地球当然不在中间。请使用setCamera即可

此外您需要自己设置一下camera->setProjectionMatrix(),以保证投影矩阵正确

该用户从未签到

 楼主| 发表于 2010-7-5 13:13:35 | 显示全部楼层
谢谢 版主  偏移问题 解决了。但是地球不圆的问题怎么解决啊!!谢谢

该用户从未签到

发表于 2010-7-5 14:18:48 | 显示全部楼层
1、设置正确的Perspective投影矩阵
2、检察您的earth.ive模型是否本身就不圆,以及它是用什么工具产生的,产生过程中是否有什么不当的地方。您可以用osgviewer看一下

该用户从未签到

 楼主| 发表于 2010-7-5 14:51:21 | 显示全部楼层
怎么设置Perspective投影矩阵 能指点一下吗

该用户从未签到

 楼主| 发表于 2010-7-5 14:54:26 | 显示全部楼层
而且 我设置了 camera->setProjectionMatrix(osg::Matrixd());
还是那样 不圆。版主 是什么原因

该用户从未签到

发表于 2010-7-5 16:55:09 | 显示全部楼层
setProjectionMatrix(osg::Matrixd())和不设置投影矩阵的结果一样,您可以尝试使用setProjectionMatrixAsPerspective,例如:
  1. setProjectionMatrixAsPerspective(30.0f, static_cast<double>(width)/static_cast<double>(height/2), 1.0, 10000.0);
复制代码

该用户从未签到

发表于 2010-7-7 09:46:29 | 显示全部楼层
不圆是因为没加高程信息,只是简单地把地球分块,然后每块按平面来做。
我用1KM的高程生成过LV9的地球,破机器花了6天才生成好,结果倒是慢圆的

该用户从未签到

 楼主| 发表于 2010-7-16 10:40:32 | 显示全部楼层
我在问个问题: 地球外光环 应该怎么写代码~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表