基于OGRE所實現的高層遊戲引擎框架(3)

附錄

Terrain Example

/*

This source file is part of OGRE

(Object-oriented Graphics Rendering Engine)

For the latest info, see http://www.ogre3d.org/

Copyright ?2000-2003 The OGRE Team

Also see acknowledgements in Readme.html

You may use this sample code for anything you like, it is not covered by the

LGPL like the rest of the engine.

*/

/**

\file

Terrain.h

\brief

Specialisation of OGRE's framework application to show the

terrain rendering plugin

*/

#include "ExampleApplication.h"

#include "OgreStringConverter.h"

#define FLOW_SPEED 0.2

#define FLOW_HEIGHT 0.8

class TerrainListener : public ExampleFrameListener

{

public:

TerrainListener(RenderWindow* win, Camera* cam) :ExampleFrameListener(win, cam) { };

// Override frameStarted event to process that (don't care about frameEnded)

bool frameStarted(const FrameEvent& evt)

{

float moveScale;

float rotScale;

float waterFlow;

static float flowAmount = 0.0f;

static bool flowUp = true;

// local just to stop toggles flipping too fast

static Real timeUntilNextToggle = 0;

if (timeUntilNextToggle = 0)

timeUntilNextToggle -= evt.timeSinceLastFrame;

// If this is the first frame, pick a speed

if (evt.timeSinceLastFrame == 0)

{

moveScale = 1;

rotScale = 0.1;

waterFlow = 0.0f;

}

// Otherwise scale movement units by time passed since last frame

else

{

// Move about 100 units per second,

moveScale = 10.0 * evt.timeSinceLastFrame;

// Take about 10 seconds for full rotation

rotScale = 36 * evt.timeSinceLastFrame;

// set a nice waterflow rate

waterFlow = FLOW_SPEED * evt.timeSinceLastFrame;

}

// Grab input device state

mInputDevice-capture();

SceneNode *waterNode = static_cast<SceneNode*(

mCamera-getSceneManager()-getRootSceneNode()-getChild("WaterNode"));

if(waterNode)

{

if(flowUp)

flowAmount += waterFlow;

else

flowAmount -= waterFlow;

if(flowAmount = FLOW_HEIGHT)

flowUp = false;

else if(flowAmount <= 0.0f)

flowUp = true;

waterNode-translate(0, (flowUp ? waterFlow : -waterFlow), 0);

}

static Vector3 vec;

vec = Vector3::ZERO;

if (mInputDevice-isKeyDown(KC_A))

{

// Move camera left

vec.x = -moveScale;

}

if (mInputDevice-isKeyDown(KC_D))

{

// Move camera RIGHT

vec.x = moveScale;

}

if (mInputDevice-isKeyDown(KC_UP) || mInputDevice-isKeyDown(KC_W))

{

// Move camera forward

vec.z = -moveScale;

}

if (mInputDevice-isKeyDown(KC_DOWN) || mInputDevice-isKeyDown(KC_S))

{

// Move camera backward

vec.z = moveScale;

}

if (mInputDevice-isKeyDown(KC_PGUP))

{

// Move camera up

vec.y = moveScale;

}

if (mInputDevice-isKeyDown(KC_PGDOWN))

{

// Move camera down

vec.y = -moveScale;

}

if (mInputDevice-isKeyDown(KC_RIGHT))

{

mCamera-yaw(-rotScale);

}

if (mInputDevice-isKeyDown(KC_LEFT))

{

mCamera-yaw(rotScale);

}

if( mInputDevice-isKeyDown( KC_ESCAPE) )

{

return false;

}

// Rotate view by mouse relative position

float rotX, rotY;

rotX = -mInputDevice-getMouseRelativeX() * 0.13;

rotY = -mInputDevice-getMouseRelativeY() * 0.13;

// Make all the changes to the camera

// Note that YAW direction is around a fixed axis (freelook stylee) rather than a natural YAW (e.g. airplane)

mCamera-yaw(rotX);

mCamera-pitch(rotY);

mCamera-moveRelative(vec);

// Rotate scene node if required

SceneNode* node = mCamera-getSceneManager()-getRootSceneNode();

if (mInputDevice-isKeyDown(KC_O))

{

node-yaw(rotScale);

}

if (mInputDevice-isKeyDown(KC_P))

{

node-yaw(-rotScale);

}

if (mInputDevice-isKeyDown(KC_I))

{

node-pitch(rotScale);

}

if (mInputDevice-isKeyDown(KC_K))

{

node-pitch(-rotScale);

}

if (mInputDevice-isKeyDown(KC_F) && timeUntilNextToggle <= 0)

{

mStatsOn = !mStatsOn;

//Root::getSingleton().showDebugOverlay(mStatsOn);

showDebugOverlay(mStatsOn);

timeUntilNextToggle = 1;

}

// Return true to continue rendering

return true;

}

};

class TerrainApplication : public ExampleApplication

{

public:

TerrainApplication() {}

protected:

virtual void createFrameListener(void)

{

mFrameListener= new TerrainListener(mWindow, mCamera);

mFrameListener-showDebugOverlay(true);

mRoot-addFrameListener(mFrameListener);

}

virtual void chooseSceneManager(void)

{

// Get the SceneManager, in this case a generic one

mSceneMgr = mRoot-getSceneManager( ST_EXTERIOR_CLOSE );

基于OGRE所實現的高層遊戲引擎框架(1)
  人類對于遊戲的研究起源于近代。關于遊戲起源的問題,自近代而來就有了多種理論:例如席勒的“本能論”,斯賓塞的“剩余能量論”,谷魯斯的“練習理論”,弗洛伊德的“宣泄理論”等等。  然而,什麽是遊戲?遊...查看完整版>>基于OGRE所實現的高層遊戲引擎框架(1)
 
基于OGRE所實現的高層遊戲引擎框架(2)
  第一部分 遊戲引擎技術簡介  第一部分所需所有圖片    引擎概述  曾經有一段時期,遊戲開發者關心的只是如何盡量多地開發出新的遊戲並把它們推銷給玩家。盡管那時的遊戲大多簡單粗糙,但每款遊戲的平均開...查看完整版>>基于OGRE所實現的高層遊戲引擎框架(2)
 
基于OGRE所實現的高層遊戲引擎框架(3)
  附錄  Terrain Example  /*  This source file is part of OGRE  (Object-oriented Graphics Rendering Engine)  For the latest info, see http://www.ogre3d.org/  Copyright ?2000-2003 The OGRE...查看完整版>>基于OGRE所實現的高層遊戲引擎框架(3)
 
Spring框架下實現基于組的用戶權限管理
  在幾乎所有的web應用中都需要對訪問者(用戶)進行權限治理, 因爲我們希望某些頁面只對特定的用戶開放, 以及某些操作只有符合身份的用戶才能進行。這之中涉及到了身份驗證和權限治理. 只有單用戶系統和多用戶單權限...查看完整版>>Spring框架下實現基于組的用戶權限管理
 
RPG遊戲引擎制作——框架篇
一個完整的RPG遊戲由角色、AI、道具、地圖等基本元素組成,目前的RPG遊戲種類繁多,但一樣是相同的那就是遊戲的框架,當一個遊戲的框架確定以後,這個遊戲的制作思路就會顯得很清晰了。下面我給出一個遊戲的核心操作...查看完整版>>RPG遊戲引擎制作——框架篇
 
實現基于Spring框架應用的權限控制系統
實現基于Spring框架應用的權限控制系統
摘 要 SPRing框架是一個優秀的多層J2EE系統框架,Spring本身沒有提供對系統的安全性支持。Acegi是基于Spring IOC 和 AOP機制實現的一個安全框架。本文探討了Acegi安全框架中各部件之間的交互,並通過擴展Acegi數據庫...查看完整版>>實現基于Spring框架應用的權限控制系統
 
Java.NET --一個基于Java的Microsoft.NET框架的實現
Java.NET --一個基于Java的Microsoft.NET框架的實現
  至2000年底,Microsoft開始發布有關.NET這一全新的應用開發架構的細節,這些細節最初有些模糊,以至引起很多嘲笑,被視爲"擔心、不可靠、懷疑"(FUD)。然而,當Beta版的新版Visual Studio--Visual Studio.NET出...查看完整版>>Java.NET --一個基于Java的Microsoft.NET框架的實現
 
Web應用中基于組的用戶權限管理在Spring框架下的實現
在幾乎所有的web應用中都需要對訪問者(用戶)進行權限管理, 因爲我們希望某些頁面只對特定的用戶開放, 以及某些操作只有符合身份的用戶才能進行. 這之中涉及到了身份驗證和權限管理. 只有單用戶系統和多用戶單權限系統...查看完整版>>Web應用中基于組的用戶權限管理在Spring框架下的實現
 
基于AJAX技術實現Struts校驗框架
  提要 實時的數據校驗是AJAX技術的重要優點之一,Struts校驗框架通過加入這種技術進一步豐富了其MVC,從而使得Web應用程序的開發效果更接近于桌面應用程序。  一、 引言  校驗框架的根本目的是實現域校驗。在...查看完整版>>基于AJAX技術實現Struts校驗框架
 
 
回到王朝網路移動版首頁