Return view as CQuat, see #43

This commit is contained in:
kaetemi 2013-06-26 21:36:21 +02:00
parent d404c1228c
commit 9526910d4b
5 changed files with 23 additions and 5 deletions

View file

@ -26,6 +26,8 @@ using namespace NLMISC;
// *************************************************************************** // ***************************************************************************
// Main System // Main System
NL3D::UDriver *Driver = 0; // The main 3D Driver NL3D::UDriver *Driver = 0; // The main 3D Driver
NL3D::CStereoOVR *StereoDisplay = NULL; // Stereo display
NL3D::CStereoOVR *StereoHMD = NULL; // Head mount display
CSoundManager *SoundMngr = 0; // the sound manager CSoundManager *SoundMngr = 0; // the sound manager
NL3D::UMaterial GenericMat; // Generic Material NL3D::UMaterial GenericMat; // Generic Material
NL3D::UTextContext *TextContext = 0; // Context for all the text in the client. NL3D::UTextContext *TextContext = 0; // Context for all the text in the client.

View file

@ -40,6 +40,7 @@ namespace NL3D
class UMaterial; class UMaterial;
class UTextContext; class UTextContext;
class UWaterEnvMap; class UWaterEnvMap;
class CStereoOVR;
} }
class CEntityAnimationManager; class CEntityAnimationManager;
@ -77,6 +78,8 @@ const float ExtraZoneLoadingVision = 100.f;
// *************************************************************************** // ***************************************************************************
// Main System // Main System
extern NL3D::UDriver *Driver; // The main 3D Driver extern NL3D::UDriver *Driver; // The main 3D Driver
extern NL3D::CStereoOVR *StereoDisplay; // Stereo display
extern NL3D::CStereoOVR *StereoHMD;
extern CSoundManager *SoundMngr; // the sound manager extern CSoundManager *SoundMngr; // the sound manager
extern NL3D::UMaterial GenericMat; // Generic Material extern NL3D::UMaterial GenericMat; // Generic Material
extern NL3D::UTextContext *TextContext; // Context for all the text in the client. extern NL3D::UTextContext *TextContext; // Context for all the text in the client.

View file

@ -42,6 +42,7 @@
#include "nel/3d/u_material.h" #include "nel/3d/u_material.h"
#include "nel/3d/u_instance_material.h" #include "nel/3d/u_instance_material.h"
#include "nel/3d/u_cloud_scape.h" #include "nel/3d/u_cloud_scape.h"
#include "nel/3d/stereo_ovr.h"
// game share // game share
#include "game_share/brick_types.h" #include "game_share/brick_types.h"
#include "game_share/light_cycle.h" #include "game_share/light_cycle.h"
@ -136,6 +137,7 @@
#include "nel/3d/driver_user.h" #include "nel/3d/driver_user.h"
#ifdef USE_WATER_ENV_MAP #ifdef USE_WATER_ENV_MAP
#include "water_env_map_rdr.h" #include "water_env_map_rdr.h"
#endif #endif
@ -452,6 +454,8 @@ void validateDialogs(const CGameContextMenu &gcm);
void buildCameraClippingPyramid (vector<CPlane> &planes) void buildCameraClippingPyramid (vector<CPlane> &planes)
{ {
if (StereoDisplay) StereoDisplay->getClippingFrustum(0, &MainCam);
// Compute pyramid in view basis. // Compute pyramid in view basis.
CVector pfoc(0,0,0); CVector pfoc(0,0,0);
const CFrustum &frustum = MainCam.getFrustum(); const CFrustum &frustum = MainCam.getFrustum();
@ -1006,7 +1010,7 @@ static void renderCanopyPart(UScene::TRenderPart renderPart)
{ {
// Update Camera Position/Rotation. // Update Camera Position/Rotation.
camRoot.setPos(View.currentViewPos()); camRoot.setPos(View.currentViewPos());
camRoot.setRotQuat(View.currentView()); camRoot.setRotQuat(View.currentViewQuat());
} }
// Render the root scene // Render the root scene
SceneRoot->renderPart(renderPart); SceneRoot->renderPart(renderPart);
@ -1859,9 +1863,9 @@ bool mainLoop()
// Update Camera Position/Orientation. // Update Camera Position/Orientation.
CVector currViewPos = View.currentViewPos(); CVector currViewPos = View.currentViewPos();
MainCam.setPos(currViewPos);; MainCam.setPos(currViewPos);
MainCam.setRotQuat(View.currentView()); MainCam.setRotQuat(View.currentViewQuat());
if (StereoDisplay) StereoDisplay->updateCamera(0, &MainCam);
// see if camera is below water (useful for sort order) // see if camera is below water (useful for sort order)
if (ContinentMngr.cur()) if (ContinentMngr.cur())

View file

@ -183,7 +183,6 @@ CVector CView::currentViewPos() const
//----------------------------------------------- //-----------------------------------------------
// currentView : // currentView :
// Set the user position.
//----------------------------------------------- //-----------------------------------------------
CVector CView::currentView() const CVector CView::currentView() const
{ {
@ -200,6 +199,14 @@ CVector CView::currentView() const
return _View; return _View;
}// currentView // }// currentView //
NLMISC::CQuat CView::currentViewQuat() const
{
CMatrix mat;
mat.setRot(CVector::I, currentView(), CVector::K);
mat.normalize(CMatrix::YZX);
return mat.getRot();
}
//----------------------------------------------- //-----------------------------------------------
// currentCameraTarget : // currentCameraTarget :
//----------------------------------------------- //-----------------------------------------------

View file

@ -115,6 +115,8 @@ public:
CVector currentViewPos() const; CVector currentViewPos() const;
// Return the current view (rear or normal) // Return the current view (rear or normal)
CVector currentView() const; CVector currentView() const;
// Return the current view as a quaternion
NLMISC::CQuat currentViewQuat() const;
// Return the current Camera Target (for 3rd person only. 1st person: return currentViewPos()) // Return the current Camera Target (for 3rd person only. 1st person: return currentViewPos())
CVector currentCameraTarget() const; CVector currentCameraTarget() const;