查看: 2870|回复: 7

多个相机设置问题

[复制链接]

该用户从未签到

发表于 2008-9-8 09:38:36 | 显示全部楼层 |阅读模式
#include "stdafx.h"
#include <osgUtil/Optimizer>

#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osgDB/Registry>

#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>

#include <osg/Geode>
#include <osg/Camera>
#include <osg/ShapeDrawable>
#include <osg/Sequence>
#include <osg/PolygonMode>
#include <osg/io_utils>

#include <osgText/Font>
#include <osgText/Text>

osg::Group* createHUDText()
{

    osg::Geode* geode  = new osg::Geode;

////////////////////////////////////////////////////////////////////////////////////////////////////////
//   
// Examples of how to set up axis/orientation alignments
//
    osg::Vec3 pos(10,10,10);
        osg::Vec4 color(1,1,1,1);
    osgText::Text* text7 = new osgText::Text;
    text7->setColor(color);
    text7->setFont("fonts/times.ttf");
    text7->setCharacterSize(30);
    text7->setPosition(pos);
    text7->setAxisAlignment(osgText::Text::SCREEN);
        text7->setCharacterSizeMode(osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT);
    text7->setText("CharacterSizeMode OBJECT_COORDS (default)");
    geode->addDrawable(text7);
        //一下应该是创建一个球
    osg::ShapeDrawable* shape = new osg::ShapeDrawable(new osg::Sphere(pos,100));
    shape->getOrCreateStateSet()->setMode(GL_LIGHTING,osg::StateAttribute::ON);
    geode->addDrawable(shape);
        //geode->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
        //geode->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);

    osg::Group* rootNode = new osg::Group;
    rootNode->addChild(geode);

    return rootNode;   
}

int main(int argc, char** argv)
{
        osgViewer::Viewer  *viewer = new osgViewer::Viewer ;
       
       
        osg::Group* group = new osg::Group;
        osg::Camera* camera = new osg::Camera ;
        camera->setReferenceFrame (osg::Transform ::ABSOLUTE_RF );
        camera->setProjectionMatrixAsOrtho2D (0,1280,0,1024);
        camera->setViewMatrix (osg::Matrix::identity());
        camera->setClearMask(GL_DEPTH_BUFFER_BIT);
        camera->addChild(createHUDText());
        camera->getOrCreateStateSet()->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
       
        group->addChild(camera);
        group->addChild(osgDB::readNodeFile("D:\\3Ddata\\moxigd.ive"));
        viewer->setSceneData(group);
        viewer->run();


}
那位大哥帮我看看上面的代码有什么问题??为什么我看不见我的文字呢?但是我把mian函数中的
group->addChild(camera);改成group->addChild(createHUDText());就能看见文字
把createHUDText()函数中的osg::Vec3 pos(10,10,10)改成osg::Vec3 pos(0,0,0);也能看见文字
但是这样文字就不能放大或缩小?这是为什么啊 ??是我的相机设置问题??
高手帮忙啊!!!先谢过了。

该用户从未签到

 楼主| 发表于 2008-9-8 09:52:04 | 显示全部楼层
是不是camera->setProjectionMatrixAsOrtho2D (0,1280,0,1024);这句话有问题啊

该用户从未签到

发表于 2008-9-8 11:44:42 | 显示全部楼层
原帖由 zhangqiang 于 2008-9-8 09:52 发表
是不是camera->setProjectionMatrixAsOrtho2D (0,1280,0,1024);这句话有问题啊


setProjectionMatrixAsOrtho2D的四个参数依次是:左,右,下,上。您的设置的确是有点问题(上下好像反了)

该用户从未签到

 楼主| 发表于 2008-9-8 12:57:40 | 显示全部楼层
我想我设置的不应该是反的 如果按照array大哥的说的那样做,当设置osg::Vec3 pos(0,0,0)时 那字显示是倒着的,设置osg::Vec3 pos(10,10,10)时字一样是没有的。那位高手能给个在同时用两个相机在一个场景下使用的例子啊,急 啊

该用户从未签到

发表于 2008-9-8 13:19:01 | 显示全部楼层
原帖由 zhangqiang 于 2008-9-8 12:57 发表
我想我设置的不应该是反的 如果按照array大哥的说的那样做,当设置osg::Vec3 pos(0,0,0)时 那字显示是倒着的,设置osg::Vec3 pos(10,10,10)时字一样是没有的。那位高手能给个在同时用两个相机在一个场景下使用的例子 ...


osghud,很现成的例子。
正交矩阵的设置确实没什么问题,投影出来的Y方向底部坐标确实应该小于顶部。那个是我糊涂了

该用户从未签到

 楼主| 发表于 2008-9-8 14:13:51 | 显示全部楼层
那个例子我看过了,他的那些文本是不随车动的,我想要那中随车动的,比如车虽小文本也缩小,我该如何做??我想把车和文本放在不同的相机中。array麻烦在看看啊

该用户从未签到

 楼主| 发表于 2008-9-8 14:15:17 | 显示全部楼层
我将camera->setAllowEventFocus(true);也不行

该用户从未签到

发表于 2008-9-8 14:35:35 | 显示全部楼层
原帖由 zhangqiang 于 2008-9-8 14:13 发表
那个例子我看过了,他的那些文本是不随车动的,我想要那中随车动的,比如车虽小文本也缩小,我该如何做??我想把车和文本放在不同的相机中。array麻烦在看看啊


那样的话,摄像机可以设置为车的子节点;或者根据车的位置变化,实时改变摄像机的观察矩阵(或者给文字加上PAT节点,实时改变它的位置矩阵)
setAllowEventFocus与您的要求好像没什么关系
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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