Vega Prime 桌面教程(四)

运动与视点 

运动、视点离不开坐标系,VP坐标系如下图所示:

变换:是一个动态坐标系,我们在场景中设置的位置由对象、特效、光照以及另外的变换表示,这就意味着变换的值和它的父项目相关,这部分我们把变换作为相对视点的偏移,这个视点位于汽车的后面,视点的位置随汽车的运动而运动。

1、打开上面的ACF文件。

2、新建一个Transform实例,名为carTransform。

3、在其视图中,把car作为其父项目,位置定位(0,-30,5).把acf文件保存为chapter3.acf.

4、转到MyServer试图,确保Look at 列表为空,Look from列表选carTransform,把Update position区的Eanble的选择去掉。这样视点便可以随汽车的移动而移动了。

5、保存为chapter3.acf,预览。场景如下:

导出CPP文件如下:

//
// This file was automatically generated from D:/Program Files/MultiGen-Paradigm1.2/MyACF/chapter2.acf
//
#include "vpModule.h"
#include "vpKernel.h"
#include "vpSearchPath.h"
#include "vpPipeline.h"
#include "vpWindow.h"
#include "vpChannel.h"
#include "vpObserver.h"
#include "vpScene.h"
#include "vpTransform.h"
#include "vpObject.h"
#include "vpEnv.h"
#include "vpEnvSun.h"
#include "vpEnvMoon.h"
#include "vpEnvSkyDome.h"
#include "vpEnvCloudLayer.h"
#include "vpMotionUFO.h"

//
// Define a static list to hold the instances we create, so that we
// can unref them when unconfigure is called
//
typedef vuVector< vuField< vuBase* > > InstancesList;
static InstancesList* s_pInstancesToUnref = NULL;

 

void define( void )
{
    // Create static instances list that we use to track what we create
    s_pInstancesToUnref = new InstancesList;

    //
    // Initialize all modules
    //

    vpModule::initializeModule( "vpEnv" );
    vpModule::initializeModule( "vpMotion" );


    //
    // Create all instances
    //

    vpKernel* pKernel_myKernel = vpKernel::instance();
    pKernel_myKernel->setNotifyLevel( vuNotify::LEVEL_WARN );
    pKernel_myKernel->setNotifyColorEnable( false );
    pKernel_myKernel->setPriority( vuThread::PRIORITY_NORMAL );
    pKernel_myKernel->setProcessor( -1 );
    pKernel_myKernel->setDesiredFrameRate( 0.000000 );
    pKernel_myKernel->setNotifyClassTypeMode( vuNotify::CLASS_TYPE_MODE_INCLUSIVE );

    vpSearchPath* pSearchPath_mySearchPath = vpSearchPath::instance();
    pSearchPath_mySearchPath->append( "$(MPI_INSTALL_RESOURCE_DEFAULT)/resources/data/databases/town" );
    pSearchPath_mySearchPath->append( "D:/Program Files/MultiGen-Paradigm1.2/resources/tutorials/vegaprime/desktop_tutor/tornado/data/land" );
    pSearchPath_mySearchPath->append( "D:/Program Files/MultiGen-Paradigm1.2/resources/tutorials/vegaprime/desktop_tutor/tornado/data/farmhouse" );
    pSearchPath_mySearchPath->append( "D:/Program Files/MultiGen-Paradigm1.2/resources/tutorials/vegaprime/desktop_tutor/tornado/data/dirtyesprit" );
    pSearchPath_mySearchPath->append( "D:/Program Files/MultiGen-Paradigm1.2/resources/tutorials/vegaprime/desktop_tutor/tornado/data/grainstorage" );

    vpPipeline* pPipeline_myPipeline = new vpPipeline();
    pPipeline_myPipeline->setName( "myPipeline" );
    pPipeline_myPipeline->setMultiThread( vsPipeline::MULTITHREAD_INLINE );
    pPipeline_myPipeline->setId( 0 );
    pPipeline_myPipeline->setNumCullThreads( 0 );
    pPipeline_myPipeline->setCullThreadPriority( vuThread::PRIORITY_NORMAL );
    pPipeline_myPipeline->setCullThreadProcessor( -1 );
    pPipeline_myPipeline->setDrawThreadPriority( vuThread::PRIORITY_NORMAL );
    pPipeline_myPipeline->setDrawThreadProcessor( -1 );

    s_pInstancesToUnref->push_back( pPipeline_myPipeline );

    vpWindow* pWindow_myWindow = new vpWindow();
    pWindow_myWindow->setName( "myWindow" );
    pWindow_myWindow->setLabel( "Vega Prime Window" );
    pWindow_myWindow->setOrigin( 0 ,  0 );
    pWindow_myWindow->setSize( 1024 ,  768 );
    pWindow_myWindow->setFullScreenEnable( false );
    pWindow_myWindow->setBorderEnable( true );
    pWindow_myWindow->setInputEnable( true );
    pWindow_myWindow->setCursorEnable( true );
    pWindow_myWindow->setStereoEnable( false );
    pWindow_myWindow->setAntiAliasEnable( true );
    pWindow_myWindow->setNumColorBits( 8 );
    pWindow_myWindow->setNumAlphaBits( 0 );
    pWindow_myWindow->setNumDepthBits( 24 );
    pWindow_myWindow->setNumStencilBits( 0 );
    pWindow_myWindow->setNumAccumColorBits( 0 );
    pWindow_myWindow->setNumAccumAlphaBits( 0 );
    pWindow_myWindow->setNumMultiSampleBits( 0 );

    s_pInstancesToUnref->push_back( pWindow_myWindow );

    vpChannel* pChannel_myChannel = new vpChannel();
    pChannel_myChannel->setName( "myChannel" );
    pChannel_myChannel->setOffsetTranslate( 0.000000 ,  0.000000 ,  0.000000 );
    pChannel_myChannel->setOffsetRotate( 0.000000 ,  0.000000 ,  0.000000 );
    pChannel_myChannel->setCullMask( 0x0FFFFFFFF );
    pChannel_myChannel->setRenderMask( 0x0FFFFFFFF );
    pChannel_myChannel->setClearColor( 0.000000f ,  0.500000f ,  1.000000f ,  0.000000f );
    pChannel_myChannel->setClearBuffers( 0x03 );
    pChannel_myChannel->setDrawArea( 0.000000 ,  1.000000 ,  0.000000 ,  1.000000 );
    pChannel_myChannel->setFOVSymmetric( 45.000000f ,  -1.000000f );
    pChannel_myChannel->setNearFar( 1.000000f ,  35000.000000f );
    pChannel_myChannel->setLODVisibilityRangeScale( 1.000000 );
    pChannel_myChannel->setLODTransitionRangeScale( 1.000000 );
    pChannel_myChannel->setCullThreadPriority( vuThread::PRIORITY_NORMAL );
    pChannel_myChannel->setCullThreadProcessor( -1 );
    pChannel_myChannel->setGraphicsModeEnable( vpChannel::GRAPHICS_MODE_WIREFRAME ,  false );
    pChannel_myChannel->setGraphicsModeEnable( vpChannel::GRAPHICS_MODE_TRANSPARENCY ,  true );
    pChannel_myChannel->setGraphicsModeEnable( vpChannel::GRAPHICS_MODE_TEXTURE ,  true );
    pChannel_myChannel->setGraphicsModeEnable( vpChannel::GRAPHICS_MODE_LIGHT ,  true );
    pChannel_myChannel->setGraphicsModeEnable( vpChannel::GRAPHICS_MODE_FOG ,  true );
    pChannel_myChannel->setLightPointThreadPriority( vuThread::PRIORITY_NORMAL );
    pChannel_myChannel->setLightPointThreadProcessor( -1 );

    s_pInstancesToUnref->push_back( pChannel_myChannel );

    vpObserver* pObserver_myObserver = new vpObserver();
    pObserver_myObserver->setName( "myObserver" );
    pObserver_myObserver->setStrategyEnable( false );
    pObserver_myObserver->setTranslate( 2300.000000 ,  2500.000000 ,  15.000000 );
    pObserver_myObserver->setRotate( -90.000000 ,  0.000000 ,  0.000000 );
    pObserver_myObserver->setLatencyCriticalEnable( false );

    s_pInstancesToUnref->push_back( pObserver_myObserver );

    vpScene* pScene_myScene = new vpScene();
    pScene_myScene->setName( "myScene" );

    s_pInstancesToUnref->push_back( pScene_myScene );

    vpTransform* pTransform_carTransform = new vpTransform();
    pTransform_carTransform->setName( "carTransform" );
    pTransform_carTransform->setCullMask( 0x0FFFFFFFF );
    pTransform_carTransform->setRenderMask( 0x0FFFFFFFF );
    pTransform_carTransform->setIsectMask( 0x0FFFFFFFF );
    pTransform_carTransform->setStrategyEnable( true );
    pTransform_carTransform->setTranslate( 0.000000 ,  -30.000000 ,  5.000000 );
    pTransform_carTransform->setRotate( 0.000000 ,  0.000000 ,  0.000000 );
    pTransform_carTransform->setScale( 1.000000 ,  1.000000 ,  1.000000 );
    pTransform_carTransform->setStaticEnable( false );

    s_pInstancesToUnref->push_back( pTransform_carTransform );

    vpObject* pObject_terrain = new vpObject();
    pObject_terrain->setName( "terrain" );
    pObject_terrain->setCullMas

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值