osg下用DrawPixels显示图片


#include<osg/Geometry>
#include<osg/Geode>
#include<osgViewer/Viewer>
#include<osgViewer/ViewerEventHandlers>
#include <osg/Node>
#include <osg/Geode>
#include <osg/Group>
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include<osg/DrawPixels>
#include<osg/PositionAttitudeTransform>
int main(int argc, char *argv[])
{
	osg::ref_ptr<osg::Group> root = new osg::Group;
	osg::ref_ptr<osg::Geode> geode = new osg::Geode;

	osg::ref_ptr<osg::DrawPixels> image = new osg::DrawPixels;
	image->setPosition(osg::Vec3(10.0, 0.0, 0.0));
	//裁剪区域
	image->setSubImageDimensions(320, 320, 320, 320);
	image->setImage(osgDB::readImageFile("test.png"));

	geode->addChild(image);
	root->addChild(geode);

	osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
	viewer->addEventHandler(new osgViewer::WindowSizeHandler());
	viewer->setSceneData(root.get());

	viewer->realize();
	viewer->run();
}

效果如下: 

存在的问题:

  •   image->setPosition(osg::Vec3(10.0, 0.0, 0.0));不起作用,无论设置图片从哪个点显示都不起作用,貌似只能从(0, 0, 0)点显示,用PositionAttitudeTransform也不行,难道图片就只能在osg::Vec3(0.0, 0.0, 0.0)处?(说明:我上面显示效果不是全图,全图太大,只是截的小图,从小图看好像图片显示点不是在(0, 0, 0),这是截图造成的,实际确实是在(0, 0, 0)点)。
  •  图片不支持鼠标操作,即不支持鼠标放大、缩小、旋转操作。
  • 上面的第22行setSubImageDimensions函数中的第1、2个参数是图片左上角的横坐标和纵坐标,第3、4个参数是要显示的图片宽度和高度,必须保证:第1参数值 + 第3参数值 <= 图片总宽度;且必须保证:第2参数值 + 第4参数值 <= 图片总高度,否则程序会崩溃,报:帧不在模块中,有点类似C++中的内存越界。
  •  必须确保相应类型图片的第三方库存在,否则读取图片不会成功 ,如:如果是PNG图片,libPng.lib或类似的库文件、动态库等在指定的目录下存在。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值