我要发帖 回复

正式会员

2

主题

21

积分

0

专家分

:

私信
发表时间 : 2008-9-4 18:11:35 | 浏览 : 2135    评论 : 4
菜鸟问题:
1、为什么我变换绘制坐标后视图上没反映?
2、若我有一种大地坐标(自定义的)如:81000.000000   16000.016602   2323.798096这种坐标如何与绘制坐标之间转化。

// 绘制个四边形
osg::ref_ptr<osg::Node> createQuad()
{
//  setVertexArray
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
//geom->setVertexArray()
//首先定义四个点
osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array;
geom->setVertexArray( v.get() );
v->push_back( osg::Vec3( -1.f, -10000.f, -0.5f ) );
v->push_back( osg::Vec3( 1.f, -10000.f, -0.5f ) );
v->push_back( osg::Vec3( 1.f, -10000.f, 0.5f ) );
v->push_back( osg::Vec3( -1.f, -10000.f, 0.5f ) );
//定义颜色数组
。。。
//定义法线
。。。
//设置顶点关联方式
。。。
//几何组结点
。。。
return geode.get();
}

// 下面进行初始化
void CCoreOSG::InitManipulators(void)
{
    //创建一个trackball操作器
}

void CCoreOSG::InitSceneGraph(void)
{
    //绘制
}
void CCoreOSG::InitCameraConfig(CRect rect)
{
    // 局部变量存放窗口矩形
    //RECT rect;
    // 创建一个viewer
    mViewer = new osgViewer::Viewer();
    // 加入一个statshandler
    mViewer->addEventHandler(new osgViewer::StatsHandler);
   
    // 得到当前窗口矩形
    //::GetWindowRect(m_hWnd, &rect);

    // 初始化图形描述什么东西,反正就是那么回事
    osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
    // 初始化窗口变量,为OSG所用
    osg::ref_ptr<osg::Referenced> windata = new osgViewer::GraphicsWindowWin32::WindowData(m_hWnd);
    // 设置一些个参数
    traits->x = 0;
    traits->y = 0;
    traits->width = rect.right - rect.left;
    traits->height = rect.bottom - rect.top;
    traits->windowDecoration = true;
    traits->doubleBuffer = true;
    traits->sharedContext = 0;
    traits->setInheritedWindowPixelFormat = true;
    traits->inheritedWindowData = windata;
    // 创建图形上下文
    osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits.get());
    // 初始化一个相机
    osg::ref_ptr<osg::Camera> camera = new osg::Camera;
    // 绑
    camera->setGraphicsContext(gc);
    //相机视口设置
    camera->setViewport(new osg::Viewport(traits->x, traits->y, traits->width, traits->height));
    // 添加相机到VIEWER
    mViewer->addSlave(camera.get());
    // 添加操作器到VIEWER
    mViewer->setCameraManipulator(keyswitchManipulator.get());
    //设置数据
    mViewer->setSceneData(mRoot.get());
    // 实现VIEWER
    mViewer->realize();
}

最近VR访客

xubin 评论于2008-9-5 08:32:43
每人看见,在线等...
FlySky 评论于2008-9-6 02:43:50
你的方式肯定是不对的,,,后视图使用HUD显示就可以了~~~~直接是平面的,何必要弄成三维的,呵呵~~~~~~

OSG中国官方网站:http://www.osgChina.org
OSG中国官方讨论区:http://bbs.osgChina.org

OSG专业群-OSG地形研究者 49668412
      OSG地形专业研究 45763709
xubin 评论于2008-9-6 21:51:28
FlySky我在OSG中国官网的论坛上问了类似的问题.
问题是:
简单的说:若我有一种大地坐标(自定义的)如:81000.000000   16000.016602   2323.798096这种坐标如何与绘制坐标之间转化。
即OSG的窗口怎么进行设置?
具体情况是我现在有一堆上述坐标的点,由8个点组成一个网格。我想把整个地形网格用OSG来绘制。请各位大虾帮忙,小弟不盛感激...

你提示说利用坐标公式对坐标进行转换再绘制.如何利用坐标公式转换,利用什么公式,恕小第愚昧.还望你能再具体赐教一下.最好能给个测试程序什么的.
我油箱:xubin421715@21cn.com .  望知道的朋友也多多指点.
FlySky 评论于2008-9-7 21:10:47
FlySky我在OSG中国官网的论坛上问了类似的问题.
问题是:
简单的说:若我有一种大地坐标(自定义的)如:81000.000000   16000.016602   2323.798096这种坐标如何与绘制坐标之间转化。
即OSG的窗口怎么进行设置?
具体情况是我现在有一堆上述坐标的点,由8个点组成一个网格。我想把整个地形网格用OSG来绘制。请各位大虾帮忙,小弟不盛感激...

你提示说利用坐标公式对坐标进行转换再绘制.如何利用坐标公式转换,利用什么公式,恕小第愚昧.还望你能再具体赐教一下.最好能给个测试程序什么的.
我油箱:xubin421715@21cn.com .  望知道的朋友也多多指点.


这个得根据你的需要来转换,,,你可以参考Coordinate Systems Overview这本英文书籍,,里面有各种转换~~~~~~~~我也没什么测试程序,呵呵~~~~~~

OsgChina已经回复了~~~~~~~~~

OSG中国官方网站:http://www.osgChina.org
OSG中国官方讨论区:http://bbs.osgChina.org

OSG专业群-OSG地形研究者 49668412
      OSG地形专业研究 45763709

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-4-23 09:32 AM

返回顶部