MFC绘图_OSG窗口调用

4 篇文章 1 订阅
2 篇文章 0 订阅

之前在新浪博客上写过几篇图形学方面的博客,但是可能不是专门为技术博客设计,很多代码的显示,在新浪博客上不是那么尽如人意,所以,决定在这个博客上试验一下~

本人是非计算机专业研究生小菜鸟,因有做虚拟现实的需求,看过FreeSouth的几个录像,很感兴趣,就接触了一下OSG,不过刚接触OSG一周不到,希望有感兴趣的人一同学习,共同进步。

这里给出在MFC窗口中调用OSG的步骤和展示:


大家一般展示都用cow.osg啊,确实很经典,不过这里面我稍稍小改动了一下, 放上了一个我自己做的场景。

现在说操作步骤:

一、首先,要有配置时候用Cmake生成的例子,对于配置的教程网上就太多了,不过最近我可能会转载一篇,怕以后我自己忘记了。。。我提几点配置时候的注意事项:

1、英文路径,我自己也不是很确定是否有关系,不过之前我用了中文路径,没有生成成功。

2、要选择生成例子。

3、最好生成chm的帮助文档,很有用,html的帮助文档也不错,不过用着很乱。

二、在例子"examples"中选择项目"osgviewerMFC",导出我们接下来可能需要的MFC_OSG.h与MFC_OSG.cpp这里你可以在自己创建的项目中直接添加现有项目,或者把这两个文件拷到自己的项目目录中,若是直接添加现有项目,别忘记在"c/c++"的附加包含目录中把MFC_OSG.h的目录路径添加进来。

三、如果只是想直接用Viewer显示如"cow.osg"的示例文件,

1、将编译好的OSG库装载到项目里:

如果用的是Debug库就将下面的项加入到"链接器"的"输入"中的"附加依赖项"里(如果是Release则是没有"d"的lib):

OpenThreadsd.lib
osgd.lib
osgDBd.lib
osgUtild.lib
osgGAd.lib
osgViewerd.lib
osgTextd.lib

2、现在view头文件中添加:

#include "MFC_OSG.h"
public:
cOSG* myOSG;
HANDLE myThreadHandle;
3、在你所创建工程的View中添加:

int CosgmfcView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
myOSG=new cOSG(m_hWnd);
return 0;
}
void CosgmfcView::OnInitialUpdate()
{
CView::OnInitialUpdate();	
myOSG->InitOSG("cow.osg");
myThreadHandle=(HANDLE)_beginthread(&cOSG::Render,0,myOSG);

}

注:这里生成的时候可能会报错,说AfxMessageBox参数不配套?我感觉是以前Vc++的类和现在的类中参数设定改变了,只要注销掉就好了。

这样生成项目会出现经典的"牛":


四、如过想展示自己制作的图像,就在MFC_OSG.cpp中添加并修改代码,我改的局部代码如下:

osg::ref_ptr<osg::Node> cOSG::MatrixOperation()
{
osg::ref_ptr<osg::Group>group=new osg::Group;
return group;
}
然后找到下面函数:

void cOSG::InitCameraConfig(void)
修改代码:

mViewer->setSceneData(MatrixOperation().get());
这时候就能显示出自己的图了:


注:
错误原因1:我在网上看到一个类似的博客,里面写到在stdafx.h里添加

#include <process.h>
不过我在做的时候没记得添加过这个,好像也能运行,若是有运行失败的添加一下此头文件试试。

错误原因2:平台换为X64。

错误原因3:若是找不到如"cow.osg"请看是否在配置的时候环境路径没加或者加错了。




  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值