我要发帖 回复

中级会员

10

主题

199

积分

0

专家分

:

私信
发表时间 : 2012-9-2 17:10:33 | 浏览 : 1367    评论 : 7
代码如下(参考的网上的一个达人):

#include <vsgu.h>
#include <vp.h>
#include<vpObject.h>
#include<vsDOF.h>
#include <vpApp.h>
#include "vuAllocTracer.h"
vuAllocTracer tracer(true, true);


class myApp : public vpApp
{

public:

    myApp() :
      m_pbox( NULL ),
        m_pboxDOF( NULL )
    {}

    ~myApp()
    {
      
        m_pbox->unref();
        m_pboxDOF->unref();
    }

    int configure()
    {
        vpApp::configure();  
        
                m_pbox = vpObject::find( "boxObj" );
        assert( m_pbox );
               
                m_pboxDOF = static_cast<vsDOF *>(m_pbox->find_named( "boxDOF" ));
                assert( m_pboxDOF );

        return vsgu::SUCCESS;
    }

    virtual void onKeyInput( vrWindow::Key key, int mod )
    {
        switch( key )
        {        

            case vrWindow::KEY_j: // Rotate the turret to the left
            case vrWindow::KEY_J:
                m_pboxDOF->setTranslateZ(1.0f, true);
                break;

            case vrWindow::KEY_l: // Rotate the turret to the right
            case vrWindow::KEY_L:
                m_pboxDOF->setTranslateZ(-1.0f, true);
                break;

            case vrWindow::KEY_i: // Raise the barrel
            case vrWindow::KEY_I:
                 m_pboxDOF->setTranslateY(30.0f, false);
                break;

            case vrWindow::KEY_k: // Lower the barrel
            case vrWindow::KEY_K:
                 m_pboxDOF->setTranslateY(-30.0f, true);
                break;

            default:
                vpApp::onKeyInput(key, mod);
               break;
        }
    }
    virtual void run( void )
    {
        while( beginFrame() != 0 )
        {            
                        endFrame();
        }
    }
private:
    vpObject* m_pbox;
    vsDOF* m_pboxDOF;
};

int main(int argc, char *argv[])
{
    vp::initialize(argc, argv);
    vpApp *app = new vpApp;
    if (argc <= 1)
        app->define("vpstat_sample.acf");
    else
        app->define(argv[1]);
    app->configure();
    app->run();
    app->unref();
    vp::shutdown();

    return 0;
}
creator截图如下:
仅为两个box。
c:\123.jpg
程序可运行,但键盘控制没反应,也勾选了acf里面的那两个loaderpostion选项。还请大家帮帮忙,好久都没进展。

最近VR访客

gongzixiaobai 评论于2012-9-2 17:12:28

creator图片

creator图片


creator结果很简单,难道有错误么?
gongzixiaobai 评论于2012-9-2 18:50:51
#include <vsgu.h>
#include <vp.h>
#include<vpObject.h>
#include<vsDOF.h>
#include <vpApp.h>
#include "vuAllocTracer.h"
vuAllocTracer tracer(true, true);


class myApp : public vpApp
{

public:

    myApp() :
      m_pbox( NULL ),
        m_pboxDOF( NULL )
    {}

    ~myApp()
    {
      
        m_pbox->unref();
        m_pboxDOF->unref();
    }

    int configure()
    {
        vpApp::configure();  
        
                m_pbox = vpObject::find( "boxObj" );
        assert( m_pbox );
               
                m_pboxDOF = static_cast<vsDOF *>(m_pbox->find_named( "boxDOF" ));
                assert( m_pboxDOF );

        return vsgu::SUCCESS;
    }

    virtual void onKeyInput( vrWindow::Key key, int mod )
    {
        switch( key )
        {        

            case vrWindow::KEY_j:
            case vrWindow::KEY_J:
                m_pboxDOF->setTranslateZ(1.0f, true);
                break;

            case vrWindow::KEY_l:
            case vrWindow::KEY_L:
                m_pboxDOF->setTranslateZ(-1.0f, true);
                break;

            case vrWindow::KEY_i:
            case vrWindow::KEY_I:
                 m_pboxDOF->setTranslateY(30.0f, false);
                break;

            case vrWindow::KEY_k:
            case vrWindow::KEY_K:
                 m_pboxDOF->setTranslateY(-30.0f, true);
                break;

            default:
                vpApp::onKeyInput(key, mod);
               break;
        }
    }
    virtual void run( void )
    {
        while( beginFrame() != 0 )
        {            
                        endFrame();
        }
    }
private:
    vpObject* m_pbox;
    vsDOF* m_pboxDOF;
};

int main(int argc, char *argv[])
{
    vp::initialize(argc, argv);
    vpApp *app = new vpApp;
    if (argc <= 1)
        app->define("vpstat_sample.acf");
    else
        app->define(argv[1]);
    app->configure();
    app->run();
    app->unref();
    vp::shutdown();

    return 0;
}
有些注释还是不对的,呵呵。
gongzixiaobai 评论于2012-9-2 20:34:47
int main(int argc, char *argv[])
{
    vp::initialize(argc, argv);
    vpApp *app = new vpApp;
    if (argc <= 1)
        app->define("vpstat_sample.acf");
    else
        app->define(argv[1]);
    app->configure();
    app->run();
    app->unref();
    vp::shutdown();

    return 0;
}
main函数中的vpApp *app = new vpApp;
应改为myApp *app = new myApp;
不然override就没什么意思了。
icelee 评论于2012-9-2 20:35:17
成功调用了吗?
在vp里有一个例子 获取点的 包括obj dof 等
vsdof 貌似不能直接调用 需要调用vsnode 再调用dof
gongzixiaobai 评论于2012-9-3 08:45:21
icelee 发表于 2012-9-2 08:35 PM
成功调用了吗?
在vp里有一个例子 获取点的 包括obj dof 等
vsdof 貌似不能直接调用 需要调用vsnode 再调用 ...

m_pbox = vpObject::find( "boxObj" );
assert( m_pbox );   
m_pboxDOF = static_cast<vsDOF *>(m_pbox->find_named( "boxDOF" ));
assert( m_pboxDOF );
这样就可以。
也有的是这样:
if(m_pbox)
                {
                        myNode = m_pbox->find_named("boxDOF");
                        if(myNode&&myNode->isOfClassType(vsDOF::getStaticClassType()))
                                m_pboxDOF = (vsDOF *)myNode;
                        else
                                printf("There is no DOF node!");

                }
                else
                        printf("There is a error!");  
中间加了一个myNode的vsNode节点。过程应该都是一样的,就是先找到vsNode节点,然后强制转换为vsDOF节点。
两种方法可以成功调用。
gongzixiaobai 评论于2012-9-3 09:26:11
还有一定不能忘了加vsNode.h的头文件,不然也报错。呵呵
icelee 评论于2012-9-3 10:02:55
哦~~嘿嘿~~~不错不错

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

GMT+8, 2021-7-28 06:46 PM

返回顶部