我要发帖 回复

正式会员

12

主题

35

积分

0

专家分

[img]http://wpa.qq.com/pa?p ..

:

私信
发表时间 : 2006-9-4 09:20:59 | 浏览 : 23747    评论 : 154
这是我开始学VP按照例子写的一个基本控制代码,对初学者很有帮助!

[cpp]#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions
#include <afxdisp.h>        // MFC Automation classes
#include <afxdtctl.h>                // MFC support for Internet Explorer 4 Common Controls
#include <afxcmn.h>               
#include <vsgu.h>
#include <vp.h>
#include <vpApp.h>
#include <gl\gl.h>
#include <vpObject.h>
#include "vpWindow.h"
#include <GL\glu.h>
#include "math.h"
#include "vrStateMgr.h"
#include "vsChannel.h"
#include "vpMotionDrive.h"
#include "vuAllocTracer.h"
const float piover180 = 0.01745329251994f;
vuAllocTracer m_allocTracer;
static double x,y,z,RotateH,yrot ;
static vpObject *car;
vpMotionDrive *motion;


//Created by Kmustty.
//This example illstruate that we can use keyboard or mousewheel to control the 3d scene,the path of lynx
//file you should have altered. When you open the dd.acf file you should change the model path otherwise
//can not display correctly.
class myApp : public vpApp


{

public:
         
         vpWindow *window;
         bool a ;
         
    /**
     * Constructor
     */
    myApp()
    {}

    /**
     * Destructor
     */
    ~myApp()
    {
        // unreference member variables which cache Vega Prime class instances
        
    }
       
        bool ChangeResolution(int w, int h,int bitdepth);

        virtual void onKeyInput(vrWindow::Key key, int mod)
    {         
                bool controlKey = ( mod == vrWindow::MODIFIER_LEFT_CTRL||mod == vrWindow::MODIFIER_RIGHT_CTRL );
        switch (key)
        {
                         
            case vrWindow::KEY_UP:
                {
                                  if(controlKey)
                                  {
                          x+= (float)sin(RotateH*piover180)*2;
                                  y+= (float)cos(RotateH*piover180)*2;
                                  car->setTranslate(x,y,z);
                                  }
                       
                }
                break;
                        case vrWindow::KEY_DOWN:
                {
                 
                                  x-= (float)sin(RotateH*piover180)*2;   //参数2是一个速度系数可以改变
                                  y-= (float)cos(RotateH*piover180)*2;
                                  car->setTranslate(x,y,z);

                }
                break;
                        case vrWindow::KEY_LEFT:
                                {
                               
                                turnleft();
                               
                                }
                                break;
                        case vrWindow::KEY_RIGHT:
                                {   
                               
                                        turnright();
                                                                       
                                }
       
                                break;
                        default:
                                 vpApp::onKeyInput(key, mod);
                 break;
                }
        }
static void  turnleft()
{
           RotateH = RotateH-1.0f;
        yrot = RotateH;
    car->setRotateH(360.0f-yrot);
}

static void turnright()
{
   RotateH = RotateH+1.0f;
   yrot = RotateH;
   car->setRotateH(360.0f-yrot);

}



static bool myVrWinMsgHandler(vrWindow *vrWin, vrWindow::Message id, int param1, int param2, int param3)
{
        bool mousewheel = (param1 == vrWindow::MOUSE_WHEEL_DOWN);  //鼠标滚轮控制
        switch(id)
        {
        case vrWindow::MESSAGE_MOUSE_RIGHT_DOWN:
      
               
                break;

        case vrWindow::MESSAGE_MOUSE_WHEEL:
                if(mousewheel)
                turnleft();
                else
                        turnright();
                break;
   

        default:  break;
}
         vrWin->defaultVrWinMsgHandler(vrWin,id,param1,param2,param3);
    return true;
}




    /**
     * Configure my app
     */
    int configure()
        {
        // pre-configuration
        // configure vega prime system first
        vpApp::configure();
        window = vpWindow::find("myWindow");
                car = vpObject::find("car");
                motion = vpMotionDrive::find("myMotion");
                motion->setSpeedDelta(0, 0);
                motion->setHeadingDelta(0.0);
             window->setUserVrWinMsgHandler(myVrWinMsgHandler);
            x = car->getTranslateX();
            y = car->getTranslateY();
                z = car->getTranslateZ();
                RotateH = car->getRotateH();
                car->setRotateH(360.0f-RotateH);
        if (MessageBox(NULL,"是否选择全屏显示模式?", "全屏方式运行?",MB_YESNO|MB_ICONQUESTION)==IDYES)
           {
                window->setFullScreenEnable(TRUE);
                window->setSize(1280,768);
                window->setBorderEnable(FALSE);               
        ChangeResolution(1280,768,32);

       }
         
        return vsgu::SUCCESS;

    }
};
int main(int argc, char *argv[])
{
        // initialize vega prime
    vp::initialize(argc, argv);

    // initialize addition modules here
    //vpModule::initializeModule(modulename);

    // create a vpApp instance
    myApp *app = new myApp;

    // load acf file
    if (argc <= 1)
        app->define("..\\dd.acf");
    else
        app->define(argv[1]);
        
    // configure my app
    app->configure();

    // runtime loop
    app->run();

   
    // unref my app instance
    app->unref();
   
    // shutdown vega prime
    vp::shutdown();

    return 0;
}


bool myApp::ChangeResolution(int w, int h,int bitdepth)
{
DEVMODE devMode;
int   modeSwitch;
int   closeMode = 0;
EnumDisplaySettings(NULL, closeMode, &devMode);
devMode.dmBitsPerPel = bitdepth;
devMode.dmPelsWidth  = w;
devMode.dmPelsHeight = h;
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
  modeSwitch = ChangeDisplaySettings(&devMode, CDS_FULLSCREEN);
if(modeSwitch == DISP_CHANGE_SUCCESSFUL)
{
return true;
}
else
{
ChangeDisplaySettings(NULL, 0);
return false;
}
}


[/cpp]

dd.rar

60.11 KB, 下载次数: 1064

VP基本控制代码

最近VR访客

土豆沙拉 评论于2006-9-4 11:47:51
谢谢楼主!收藏了先! :victory:
lz6988 评论于2006-9-4 13:38:30
真是好人
kmustty 评论于2006-9-5 15:08:51
你看一下网站说明
skying 评论于2006-9-5 18:01:00
原帖由 czj9211 于 2006-9-5 09:55 AM 发表
怎么下不了???

我的也是下不来 不是权限的问题 还编译的问题吧
湖面之舟 评论于2006-9-5 21:24:48
收藏了
lhw_liven 评论于2006-9-10 11:50:50

非常感谢

非常感谢
hawaiii 评论于2006-9-12 22:07:16
thanx
sky3380 评论于2006-9-19 09:31:23
多谢了
lazyflyer 评论于2006-9-22 11:55:23
3ks!
jingyunlei616 评论于2006-9-27 19:06:53
谢谢!!
chengbin 评论于2006-9-30 06:44:12
好好学习,天天向上:lol
oceantu 评论于2006-10-11 10:47:40
:( 下载权限是否高了一点.新用户无法下载.
碧峤 评论于2006-10-11 15:39:38

收藏

非常感谢!
一棹何时归去,扁舟终要江湖。
hjh 评论于2006-10-25 16:00:27
先下了再说,谢谢啊
cp_yang 评论于2006-11-7 10:02:01
好东东
leeothere 评论于2006-11-23 17:23:06
下了,谢谢!!
sihang 评论于2006-12-19 16:26:48
怎么都看不到啊
wahaha_2000 评论于2006-12-19 19:43:40
thanks
liuhaiyang2004 评论于2006-12-27 09:43:28
谢谢搂主!!!

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

GMT+8, 2021-3-3 11:36 PM

返回顶部