mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-11-25 16:46:17 +00:00
Changed: #860 zviewer already in code/nel/tools/3d
This commit is contained in:
parent
e605f1f776
commit
5dfbf9e2cf
11 changed files with 0 additions and 2108 deletions
|
@ -25,11 +25,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ren_date", "ren_date\ren_da
|
|||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ResSwap", "resswap\ResSwap.vcproj", "{45255B61-CD45-484A-89DB-B4D75EF04993}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zviewer", "zviewer\zviewer.vcproj", "{B798D9FF-AA33-4918-8B51-1B4FA9C5160A}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{2B48BE83-108B-4E8E-8A55-6627CF09AC5A} = {2B48BE83-108B-4E8E-8A55-6627CF09AC5A}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "3d", "..\nel\src\3d.vcproj", "{2B48BE83-108B-4E8E-8A55-6627CF09AC5A}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{44B21233-EFCC-4825-B5E5-3A3BD6CC5516} = {44B21233-EFCC-4825-B5E5-3A3BD6CC5516}
|
||||
|
@ -115,14 +110,6 @@ Global
|
|||
{45255B61-CD45-484A-89DB-B4D75EF04993}.Release|Win32.Build.0 = Release|Win32
|
||||
{45255B61-CD45-484A-89DB-B4D75EF04993}.Release|x64.ActiveCfg = Release|x64
|
||||
{45255B61-CD45-484A-89DB-B4D75EF04993}.Release|x64.Build.0 = Release|x64
|
||||
{B798D9FF-AA33-4918-8B51-1B4FA9C5160A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{B798D9FF-AA33-4918-8B51-1B4FA9C5160A}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{B798D9FF-AA33-4918-8B51-1B4FA9C5160A}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{B798D9FF-AA33-4918-8B51-1B4FA9C5160A}.Debug|x64.Build.0 = Debug|x64
|
||||
{B798D9FF-AA33-4918-8B51-1B4FA9C5160A}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{B798D9FF-AA33-4918-8B51-1B4FA9C5160A}.Release|Win32.Build.0 = Release|Win32
|
||||
{B798D9FF-AA33-4918-8B51-1B4FA9C5160A}.Release|x64.ActiveCfg = Release|x64
|
||||
{B798D9FF-AA33-4918-8B51-1B4FA9C5160A}.Release|x64.Build.0 = Release|x64
|
||||
{2B48BE83-108B-4E8E-8A55-6627CF09AC5A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{2B48BE83-108B-4E8E-8A55-6627CF09AC5A}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{2B48BE83-108B-4E8E-8A55-6627CF09AC5A}.Debug|x64.ActiveCfg = Debug|x64
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1,230 +0,0 @@
|
|||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <nel/misc/event_server.h>
|
||||
#include <nel/3d/driver.h>
|
||||
#include <nel/3d/nelu.h>
|
||||
|
||||
#include "move_listener.h"
|
||||
|
||||
|
||||
using namespace NLMISC;
|
||||
|
||||
namespace NL3D {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************\
|
||||
CMoveListener()
|
||||
\****************************************************************/
|
||||
CMoveListener::CMoveListener()
|
||||
{
|
||||
_ViewMatrix.identity();
|
||||
_Viewport.initFullScreen();
|
||||
|
||||
_Mode = WALK;
|
||||
|
||||
_MouseFree = false;
|
||||
|
||||
_CursorInit = false;
|
||||
|
||||
_Width = 0;
|
||||
_Height = 0;
|
||||
|
||||
_Top=1.f;
|
||||
_Bottom=1.f;
|
||||
_Left=1.f;
|
||||
_Right=1.f;
|
||||
_Depth=1.f;
|
||||
|
||||
_RotZ = 0;
|
||||
_RotX = 0;
|
||||
|
||||
_TransSpeed = 1.66f;
|
||||
_RotSpeed = 1;
|
||||
|
||||
_CurrentTime = 0;
|
||||
_LastTime = 0;
|
||||
|
||||
_EyesHeight = 1.80f;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************\
|
||||
changeViewMatrix()
|
||||
\****************************************************************/
|
||||
void CMoveListener::changeViewMatrix()
|
||||
{
|
||||
float time = (sint64)(_CurrentTime-_LastTime)*0.001f;
|
||||
|
||||
// Forward
|
||||
if(CNELU::AsyncListener.isKeyDown(KeyUP))
|
||||
{
|
||||
if(_Mode==WALK)
|
||||
{
|
||||
_Pos.x -= time*_TransSpeed * (float)sin(_RotZ);
|
||||
_Pos.y += time*_TransSpeed * (float)cos(_RotZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
_Pos.x -= time*_TransSpeed * (float)sin(_RotZ)*(float)cos(_RotX);
|
||||
_Pos.y += time*_TransSpeed * (float)cos(_RotZ)*(float)cos(_RotX);
|
||||
_Pos.z += time*_TransSpeed * (float)sin(_RotX);
|
||||
}
|
||||
}
|
||||
// Backward
|
||||
if(CNELU::AsyncListener.isKeyDown(KeyDOWN))
|
||||
{
|
||||
if(_Mode==WALK)
|
||||
{
|
||||
_Pos.x += time*_TransSpeed * (float)sin(_RotZ);
|
||||
_Pos.y -= time*_TransSpeed * (float)cos(_RotZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
_Pos.x += time*_TransSpeed * (float)sin(_RotZ)*(float)cos(_RotX);
|
||||
_Pos.y -= time*_TransSpeed * (float)cos(_RotZ)*(float)cos(_RotX);
|
||||
_Pos.z -= time*_TransSpeed * (float)sin(_RotX);
|
||||
}
|
||||
}
|
||||
|
||||
// Strafe left
|
||||
if(CNELU::AsyncListener.isKeyDown(KeyLEFT))
|
||||
{
|
||||
_Pos.x = _Pos.x - time*_TransSpeed*(float)cos(_RotZ);
|
||||
_Pos.y = _Pos.y - time*_TransSpeed*(float)sin(_RotZ);
|
||||
}
|
||||
// Strafe right
|
||||
if(CNELU::AsyncListener.isKeyDown(KeyRIGHT))
|
||||
{
|
||||
_Pos.x = _Pos.x + time*_TransSpeed*(float)cos(_RotZ);
|
||||
_Pos.y = _Pos.y + time*_TransSpeed*(float)sin(_RotZ);
|
||||
}
|
||||
// Up
|
||||
if(CNELU::AsyncListener.isKeyDown(KeySHIFT))
|
||||
{
|
||||
_Pos.z += time*_TransSpeed;
|
||||
}
|
||||
// Down
|
||||
if(CNELU::AsyncListener.isKeyDown(KeyCONTROL))
|
||||
{
|
||||
_Pos.z -= time*_TransSpeed;
|
||||
}
|
||||
|
||||
if(CNELU::AsyncListener.isKeyPushed(Key1))
|
||||
{
|
||||
_TransSpeed = 5/3.6f; // 5km/h
|
||||
}
|
||||
if(CNELU::AsyncListener.isKeyPushed(Key2))
|
||||
{
|
||||
_TransSpeed = 10/3.6f; // 10km/h
|
||||
}
|
||||
if(CNELU::AsyncListener.isKeyPushed(Key3))
|
||||
{
|
||||
_TransSpeed = 20/3.6f; // 20km/h
|
||||
}
|
||||
if(CNELU::AsyncListener.isKeyPushed(Key4))
|
||||
{
|
||||
_TransSpeed = 40/3.6f; //40km/h
|
||||
}
|
||||
if(CNELU::AsyncListener.isKeyPushed(Key5))
|
||||
{
|
||||
_TransSpeed = 80/3.6f; //80km/h
|
||||
}
|
||||
if(CNELU::AsyncListener.isKeyPushed(Key6))
|
||||
{
|
||||
_TransSpeed = 160/3.6f; //160km/h
|
||||
}
|
||||
if(CNELU::AsyncListener.isKeyPushed(Key7))
|
||||
{
|
||||
_TransSpeed = 320/3.6f; //320km/h
|
||||
}
|
||||
if(CNELU::AsyncListener.isKeyPushed(Key8))
|
||||
{
|
||||
_TransSpeed = 640/3.6f; //640km/h
|
||||
}
|
||||
|
||||
// Transform view matrix
|
||||
_ViewMatrix.identity();
|
||||
_ViewMatrix.translate(CVector(0,0,_EyesHeight));
|
||||
_ViewMatrix.translate(_Pos);
|
||||
_ViewMatrix.rotateZ(_RotZ);
|
||||
_ViewMatrix.rotateX(_RotX);
|
||||
|
||||
CNELU::Camera->setMatrix(_ViewMatrix);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************\
|
||||
operator()
|
||||
\****************************************************************/
|
||||
void CMoveListener::operator()(const CEvent& event)
|
||||
{
|
||||
static const float eps = 0.001f;
|
||||
|
||||
// Rotation
|
||||
if (event==EventMouseMoveId)
|
||||
{
|
||||
CEventMouse* mouseEvent=(CEventMouse*)&event;
|
||||
|
||||
if(!_MouseFree)
|
||||
{
|
||||
if(_CursorInit)
|
||||
{
|
||||
float difx = 0.5f-mouseEvent->X;
|
||||
if ( (float)fabs(difx) > eps)
|
||||
{
|
||||
_RotZ += _RotSpeed*(difx);
|
||||
}
|
||||
float dify = -(0.5f-mouseEvent->Y);
|
||||
if ( (float)fabs(dify) > eps)
|
||||
{
|
||||
_RotX += _RotSpeed*(dify);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_CursorInit = true;
|
||||
}
|
||||
_Scene->getDriver()->setMousePos(0.5,0.5);
|
||||
}
|
||||
}
|
||||
|
||||
changeViewMatrix();
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************\
|
||||
addToServer()
|
||||
\****************************************************************/
|
||||
void CMoveListener::addToServer(CEventServer& server)
|
||||
{
|
||||
server.addListener (EventMouseMoveId, this);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************\
|
||||
removeFromServer()
|
||||
\****************************************************************/
|
||||
void CMoveListener::removeFromServer (CEventServer& server)
|
||||
{
|
||||
server.removeListener (EventMouseMoveId, this);
|
||||
}
|
||||
|
||||
}; // NL3D
|
|
@ -1,221 +0,0 @@
|
|||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef NL_MOVE_LISTENER_H
|
||||
#define NL_MOVE_LISTENER_H
|
||||
|
||||
#include <nel/misc/types_nl.h>
|
||||
#include <nel/misc/time_nl.h>
|
||||
#include <nel/misc/event_listener.h>
|
||||
#include <nel/misc/matrix.h>
|
||||
#include <nel/3d/viewport.h>
|
||||
#include <nel/3d/scene.h>
|
||||
#include <nel/3d/camera.h>
|
||||
#include <nel/3d/driver.h>
|
||||
|
||||
|
||||
|
||||
namespace NL3D
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* CMoveListener is a listener that handle a 3d matrix with mouse events.
|
||||
* \author Stephane Coutelas
|
||||
* \author Nevrax France
|
||||
* \date 2000
|
||||
*/
|
||||
class CMoveListener : public NLMISC::IEventListener
|
||||
{
|
||||
|
||||
public :
|
||||
|
||||
/**
|
||||
* TMoveMode.
|
||||
* moving modes
|
||||
*/
|
||||
enum TMoveMode
|
||||
{
|
||||
WALK,
|
||||
FREE
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
/// Internal use
|
||||
virtual void operator()(const NLMISC::CEvent& event);
|
||||
|
||||
/// moving mode
|
||||
TMoveMode _Mode;
|
||||
|
||||
/// view matrix
|
||||
NLMISC::CMatrix _ViewMatrix;
|
||||
|
||||
/// viewport
|
||||
NL3D::CViewport _Viewport;
|
||||
|
||||
/// true if first setMousePos done
|
||||
bool _CursorInit;
|
||||
|
||||
CScene * _Scene;
|
||||
|
||||
/// screen width
|
||||
uint _Width;
|
||||
|
||||
/// screen height
|
||||
uint _Height;
|
||||
|
||||
///frustum parameters
|
||||
float _Top;
|
||||
float _Bottom;
|
||||
float _Left;
|
||||
float _Right;
|
||||
float _Depth;
|
||||
|
||||
/// current position
|
||||
CVector _Pos;
|
||||
|
||||
/// eyes height
|
||||
float _EyesHeight;
|
||||
|
||||
///current rotation z angle
|
||||
float _RotZ;
|
||||
|
||||
///current rotation x angle
|
||||
float _RotX;
|
||||
|
||||
/// last local time measured
|
||||
NLMISC::TTime _LastTime;
|
||||
|
||||
/// current local time
|
||||
NLMISC::TTime _CurrentTime;
|
||||
|
||||
/// step for translation
|
||||
float _TransSpeed;
|
||||
|
||||
/// step for rotation
|
||||
float _RotSpeed;
|
||||
|
||||
/// false if mouse is use to move
|
||||
bool _MouseFree;
|
||||
|
||||
public:
|
||||
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* You should call init then.
|
||||
*/
|
||||
CMoveListener();
|
||||
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* You should call init then.
|
||||
* \param scene the scene
|
||||
* \param w screen width in pixels
|
||||
* \param h screen height in pixels
|
||||
* \param camera the camera
|
||||
*/
|
||||
void init(CScene * scene, uint w, uint h, const class CCamera& camera)
|
||||
{
|
||||
_Scene = scene;
|
||||
_Width = w;
|
||||
_Height = h;
|
||||
|
||||
_Viewport = scene->getViewport();
|
||||
|
||||
float dummy;
|
||||
_ViewMatrix = camera.getMatrix ();
|
||||
camera.getFrustum (_Left, _Right, _Bottom, _Top, _Depth, dummy);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the moving mode
|
||||
* \param m the moving mode
|
||||
*/
|
||||
void setMode(TMoveMode m)
|
||||
{
|
||||
_Mode = m;
|
||||
}
|
||||
|
||||
void swapMode()
|
||||
{
|
||||
if(_Mode==WALK)
|
||||
{
|
||||
_Mode = FREE;
|
||||
}
|
||||
else
|
||||
{
|
||||
_Mode = WALK;
|
||||
}
|
||||
}
|
||||
|
||||
TMoveMode getMode() const
|
||||
{
|
||||
return _Mode;
|
||||
}
|
||||
|
||||
void changeViewMatrix();
|
||||
|
||||
/**
|
||||
* Register the listener to the server.
|
||||
*/
|
||||
void addToServer (NLMISC::CEventServer& server);
|
||||
|
||||
/**
|
||||
* Unregister the listener to the server.
|
||||
*/
|
||||
void removeFromServer (NLMISC::CEventServer& server);
|
||||
|
||||
void setEyesHeight(float eh) { _EyesHeight = eh; }
|
||||
float getEyesHeight() const { return _EyesHeight; }
|
||||
|
||||
void setPos(CVector pos) { _Pos = pos; }
|
||||
CVector getPos() const { return _Pos; }
|
||||
|
||||
float getRotX() const { return _RotX; }
|
||||
float getRotZ() const { return _RotZ; }
|
||||
|
||||
float getSpeed() const { return _TransSpeed; }
|
||||
|
||||
void setLocalTime(NLMISC::TTime time)
|
||||
{
|
||||
_LastTime = _CurrentTime;
|
||||
_CurrentTime = time;
|
||||
}
|
||||
|
||||
void changeControlMode()
|
||||
{
|
||||
_MouseFree = ! _MouseFree;
|
||||
if(_MouseFree)
|
||||
{
|
||||
_Scene->getDriver()->showCursor(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
_Scene->getDriver()->showCursor(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}; // NL3D
|
||||
|
||||
}
|
||||
|
||||
#endif // NL_MOVE_LISTENER_H
|
||||
|
||||
/* End of move_listener.h */
|
Binary file not shown.
Before Width: | Height: | Size: 3.6 KiB |
|
@ -1,175 +0,0 @@
|
|||
|
||||
====================
|
||||
ZVIEWER
|
||||
====================
|
||||
|
||||
|
||||
ZVIEWER permet de visioner une ou plusieurs zones exportées depuis 3DSMax
|
||||
au format de NeL, en utilisant le moteur.
|
||||
|
||||
|
||||
1. Le fichier zviewer.cfg
|
||||
-----------------------
|
||||
|
||||
Le répertoire d'où est exécuté le programme doit contenir le fichier ZVIEWER.CFG
|
||||
qui contient les paramètres de configuration. Sans ce fichier aucune zone ne sera
|
||||
affichée.
|
||||
Lorsqu'il n'y a pas de fichier de configuration à l'execution un fichier type est
|
||||
généré.
|
||||
|
||||
Exemple de config :
|
||||
|
||||
FullScreen = 0;
|
||||
Width = 800;
|
||||
Height = 600;
|
||||
Depth = 32;
|
||||
Position = { 1088.9, -925.7, -1234.0 };
|
||||
EyesHeight = 1.80;
|
||||
Background = { 100, 100, 255 };
|
||||
ZFar = 1000.0;
|
||||
LandscapeTileNear = 50.0;
|
||||
LandscapeThreshold = 0.001;
|
||||
BanksPath = "C:\WINDOWS\Bureau\zviewer\" ;
|
||||
Bank = "fyros_landf.bank" ;
|
||||
TilesPath = "C:\WINDOWS\Bureau\zviewer\tiles" ;
|
||||
ZonesPath = "C:\WINDOWS\Bureau\zviewer\zones" ;
|
||||
IgPath = "C:\WINDOWS\Bureau\zviewer\ig" ;
|
||||
ShapePath = "C:\WINDOWS\Bureau\zviewer\shapes" ;
|
||||
MapsPath = "C:\WINDOWS\Bureau\zviewer\maps" ;
|
||||
Zones = { "3_AC.zonel","3_AD.zonel" };
|
||||
Zonessave = { "3_AC.zonel","3_AD.zonel" };
|
||||
Zones = { "3_AC.zonel","3_AD.zonel" };
|
||||
Ig = { "3_AC.ig","3_AD.ig" };
|
||||
|
||||
Avec :
|
||||
|
||||
Fullscreen :
|
||||
0 : windowed
|
||||
1 : fullscreen
|
||||
|
||||
Width :
|
||||
largeur de la fenetre.
|
||||
|
||||
Height :
|
||||
hauteur de la fenetre.
|
||||
|
||||
Depth :
|
||||
nombre de couleurs (32bits,24bits,...).
|
||||
|
||||
Position :
|
||||
position initiale (x,y,z). Correspond aux coordonnées dans Max (Generic Units).
|
||||
La position est automatiquement snapée au sol quelque soit la coordonnée en z.
|
||||
|
||||
EyesHeight :
|
||||
hauteur des yeux pour le mode Walk.
|
||||
|
||||
Background :
|
||||
couleur rgb du fond.
|
||||
|
||||
ZFar :
|
||||
distance de clipping. Plus la distance est grande, plus on voit loin.
|
||||
|
||||
LandscapeTileNear :
|
||||
valeur du near. Plus cette valeur est grande, plus la zone du near est grande.
|
||||
|
||||
LandscapeThreshold :
|
||||
seuil utilisé pour la subdivision adaptative. Quand la valeur augmente, la qualité
|
||||
de la subdivision diminue (reduit le temps de calcul). Mis au minimum par defaut (0.001).
|
||||
|
||||
BanksPath :
|
||||
chemin des banks (<bank>.bank et <bank>.farbank).
|
||||
|
||||
Bank :
|
||||
nom de la bank (meme racine que la farbank)
|
||||
|
||||
ZonesPath :
|
||||
chemin des zones.
|
||||
|
||||
Zones :
|
||||
liste des noms des zones
|
||||
|
||||
|
||||
2. Les déplacements
|
||||
----------------
|
||||
|
||||
Les déplacements se font à l'aide de la combinaison clavier/souris.
|
||||
Il existe 2 modes de déplacement : FreeLook et Walk (defaut).
|
||||
|
||||
- Le mode FreeLook permet de se déplacer dans la direction du regard(idem cstrike).
|
||||
- Dans le mode Walk le déplacement se fait au niveau du sol, à hauteur des yeux.
|
||||
L'utilisateur reste collé au sol.
|
||||
|
||||
La souris permet d'orienter le regard dans toutes les directions
|
||||
Le clavier permet de se déplacer.
|
||||
|
||||
|
||||
3. Les touches
|
||||
-----------
|
||||
ESC : quitter le viewer
|
||||
F1 : Afficher/Masquer les infos
|
||||
F3 : basculer entre le mode plein et le mode fil de fer
|
||||
F12 : faire un screenshot
|
||||
ESPACE : basculer entre les modes Walk et Free-Look
|
||||
RETURN : libérer ou capturer la souris
|
||||
UP : avancer
|
||||
DOWN : reculer
|
||||
LEFT : déplacement latéral à gauche
|
||||
RIGHT : déplacement latéral à droite
|
||||
SHIFT : augmenter l'altitude
|
||||
CTRL : baisser d'altitude
|
||||
1 : 5 km/h
|
||||
2 : 10 km/h
|
||||
3 : 20 km/h
|
||||
4 : 40 km/h
|
||||
5 : 80 km/h
|
||||
6 : 160 km/h
|
||||
7 : 320 km/h
|
||||
8 : 640 km/h
|
||||
PAGEUP : augmenter la distance de clipping
|
||||
PAGEDOWN : diminuer la distance de clipping
|
||||
HOME : augmenter le near
|
||||
END : diminuer le near
|
||||
INSERT : augmenter le threshold
|
||||
DELETE : diminuer le threshold
|
||||
ADD : augmenter la hauteur des yeux
|
||||
SUBTRACT : diminuer la hauteur des yeux
|
||||
|
||||
==================== ZVIEWER ENGLISH ====================
|
||||
|
||||
ZViewer allows you to view one or more zones exported from 3DSMax inside the NeL Engine
|
||||
|
||||
|
||||
When you run ZViewer for the first time if no configuration file is located one will be created with default values.
|
||||
The Configuration file defines the zones to load and other vital information and will not work in it's default state
|
||||
|
||||
|
||||
Keys
|
||||
|
||||
ESC: exit ZViewer
|
||||
F1: toggles information
|
||||
F3: toggles between full and the wire frame mode
|
||||
F12: screenshot
|
||||
SPACE: toggles between Walk and Free-Look mode
|
||||
RETURN: release or capture mouse
|
||||
UP: move forward
|
||||
DOWN: move back
|
||||
LEFT: turn left
|
||||
RIGHT: turn right
|
||||
SHIFT: increases altitude
|
||||
CTRL: decreases altitude
|
||||
1: 5 km/h
|
||||
2: 10 km/h
|
||||
3: 20 km/h
|
||||
4: 40 km/h
|
||||
5: 80 km/h
|
||||
6: 160 km/h
|
||||
7: 320 km/h
|
||||
8: 640 km/h
|
||||
PAGEUP: increases the clipping distance
|
||||
PAGEDOWN: decreases the clipping distance
|
||||
HOME: increases tilenear
|
||||
END: decreases the tilenear
|
||||
INSERT: increases threshold
|
||||
DELETE: decreases threshold
|
||||
ADD: increases the eye height
|
||||
SUBTRACT: decreases the eye height
|
|
@ -1,32 +0,0 @@
|
|||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by zviewer.rc
|
||||
//
|
||||
#define IDI_ICON1 101
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 102
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
|
@ -1,37 +0,0 @@
|
|||
FullScreen = 0;
|
||||
Width = 800;
|
||||
Height = 600;
|
||||
Depth = 32;
|
||||
Position = { 1676, -7361, 0.000000 };
|
||||
EyesHeight = 1.800000;
|
||||
Background = { 100, 100, 255 };
|
||||
ZFar = 1000.000000;
|
||||
AutoLight = 0;
|
||||
LightDir = { 1.000000, 0.000000, 0.000000 };
|
||||
LandscapeNoise = 0;
|
||||
LandscapeTileNear = 50.000000;
|
||||
LandscapeThreshold = 0.001000;
|
||||
BanksPath = "R:\code\snowballs2\client\data\tiles";
|
||||
TilesPath = "R:\code\snowballs2\client\data\tiles";
|
||||
UseDDS = "1";
|
||||
AllPathRelative = "0";
|
||||
Bank = "bank.bank";
|
||||
ZonesPath = "R:\code\snowballs2\client\data\zones";
|
||||
IgPath = "R:\code\snowballs2\client\data\zones";
|
||||
ShapePath = "R:\code\snowballs2\client\data\shapes";
|
||||
MapsPath = "R:\code\snowballs2\client\data\maps";
|
||||
FontPath = "C:\Windows\fonts\arial.ttf";
|
||||
HeightFieldName = "";
|
||||
HeightFieldMaxZ = 100.000000;
|
||||
HeightFieldOriginX = 16000.000000;
|
||||
HeightFieldOriginY = -24000.000000;
|
||||
HeightFieldSizeX = 160.000000;
|
||||
HeightFieldSizeY = 160.000000;
|
||||
LandAmbient = { 0, 0, 0};
|
||||
LandDiffuse = { 255, 255, 255};
|
||||
Zones = {
|
||||
"3_AC.zonel",
|
||||
"3_AD.zonel",
|
||||
};
|
||||
Ig = {
|
||||
};
|
|
@ -1,975 +0,0 @@
|
|||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
// Copyright (C) 2010 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <nel/misc/types_nl.h>
|
||||
#include <nel/misc/config_file.h>
|
||||
#include <nel/misc/debug.h>
|
||||
#include <nel/misc/path.h>
|
||||
#include <nel/misc/i18n.h>
|
||||
|
||||
#include <nel/3d/driver.h>
|
||||
#include <nel/3d/camera.h>
|
||||
#include <nel/3d/landscape_model.h>
|
||||
#include <nel/3d/landscape.h>
|
||||
#include <nel/3d/text_context.h>
|
||||
#include <nel/3d/mini_col.h>
|
||||
#include <nel/3d/nelu.h>
|
||||
#include <nel/3d/scene_group.h>
|
||||
#include <nel/3d/texture_file.h>
|
||||
|
||||
//#include "nel/net/local_entity.h"
|
||||
|
||||
#include "move_listener.h"
|
||||
|
||||
// Tempyoyo.
|
||||
#include <nel/3d/height_map.h>
|
||||
|
||||
|
||||
#include <string>
|
||||
#include <deque>
|
||||
|
||||
using namespace std;
|
||||
using namespace NLMISC;
|
||||
using namespace NL3D;
|
||||
|
||||
|
||||
#define BANK_PAH_RELATIVE
|
||||
|
||||
|
||||
/**
|
||||
* CViewerConfig
|
||||
*/
|
||||
struct CViewerConfig
|
||||
{
|
||||
bool Windowed;
|
||||
uint Width;
|
||||
uint Height;
|
||||
uint Depth;
|
||||
CVector Position;
|
||||
CVector Heading;
|
||||
CVector EyesHeight;
|
||||
CRGBA Background;
|
||||
|
||||
// Landscape
|
||||
bool AutoLight;
|
||||
CVector LightDir;
|
||||
string ZonesPath;
|
||||
string BanksPath;
|
||||
string TilesPath;
|
||||
bool UseDDS;
|
||||
bool AllPathRelative;
|
||||
|
||||
string IgPath;
|
||||
string ShapePath;
|
||||
string MapsPath;
|
||||
string Bank;
|
||||
string FontPath;
|
||||
CTextContext TextContext;
|
||||
CFontManager FontManager;
|
||||
float ZFar;
|
||||
float LandscapeTileNear;
|
||||
float LandscapeThreshold;
|
||||
bool LandscapeNoise;
|
||||
vector<string> Zones;
|
||||
vector<string> Igs;
|
||||
|
||||
// HeightField.
|
||||
string HeightFieldName;
|
||||
float HeightFieldMaxZ;
|
||||
float HeightFieldOriginX;
|
||||
float HeightFieldOriginY;
|
||||
float HeightFieldSizeX;
|
||||
float HeightFieldSizeY;
|
||||
|
||||
// StaticLight
|
||||
CRGBA LandAmbient;
|
||||
CRGBA LandDiffuse;
|
||||
|
||||
CViewerConfig()
|
||||
{
|
||||
Windowed = true;
|
||||
Width = 800;
|
||||
Height = 600;
|
||||
Depth = 32;
|
||||
Position = CVector( 1088.987793f, -925.732178f, 0.0f );
|
||||
Heading = CVector(0,1,0);
|
||||
EyesHeight = CVector(0,0,1.8f);
|
||||
Background = CRGBA(100,100,255);
|
||||
AutoLight = false;
|
||||
LightDir = CVector (1, 0, 0);
|
||||
ZonesPath = "./";
|
||||
BanksPath = "./";
|
||||
TilesPath = "./";
|
||||
UseDDS = false;
|
||||
AllPathRelative = false;
|
||||
IgPath = "./";
|
||||
ShapePath = "./";
|
||||
MapsPath = "./";
|
||||
Bank = "bank.bank";
|
||||
FontPath = "\\\\server\\code\\fonts\\arialuni.ttf";
|
||||
ZFar = 1000;
|
||||
LandscapeTileNear = 50.0f;
|
||||
LandscapeThreshold = 0.001f;
|
||||
LandscapeNoise = true;
|
||||
|
||||
HeightFieldName= "";
|
||||
HeightFieldMaxZ= 100;
|
||||
HeightFieldOriginX= 16000;
|
||||
HeightFieldOriginY= -24000;
|
||||
HeightFieldSizeX= 160;
|
||||
HeightFieldSizeY= 160;
|
||||
|
||||
CRGBA diffuse (241, 226, 244);
|
||||
CRGBA ambiant (17, 54, 100);
|
||||
LandDiffuse= diffuse;
|
||||
LandAmbient= ambiant;
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
CViewerConfig ViewerCfg;
|
||||
|
||||
|
||||
|
||||
CLandscapeModel *Landscape = NULL;
|
||||
CMoveListener MoveListener;
|
||||
CMiniCol CollisionManager;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************\
|
||||
getZoneNameByCoord()
|
||||
\*******************************************************************/
|
||||
string getZoneNameByCoord(float x, float y)
|
||||
{
|
||||
const float zoneDim = 160.0f;
|
||||
|
||||
float xcount = x/zoneDim;
|
||||
float ycount = -y/zoneDim + 1;
|
||||
|
||||
string zoneName;
|
||||
char ych[32];
|
||||
sprintf(ych,"%d",(sint)ycount);
|
||||
sint sz = strlen(ych);
|
||||
for(sint i = 0; i<sz; i++)
|
||||
{
|
||||
zoneName += ych[i];
|
||||
}
|
||||
zoneName += '_';
|
||||
zoneName += 'A' + (sint)xcount/26;
|
||||
zoneName += 'A' + (sint)xcount%26;
|
||||
|
||||
return zoneName;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*********************************************************\
|
||||
displayOrientation()
|
||||
\*********************************************************/
|
||||
void displayOrientation()
|
||||
{
|
||||
float x = 0.9f*4.f/3.f;
|
||||
float y = 0.1f;
|
||||
float radius = 0.015f;
|
||||
|
||||
// Triangle
|
||||
CMaterial mat;
|
||||
mat.initUnlit();
|
||||
mat.setSrcBlend(CMaterial::srcalpha);
|
||||
mat.setDstBlend(CMaterial::invsrcalpha);
|
||||
mat.setBlend(true);
|
||||
|
||||
CVertexBuffer vb;
|
||||
vb.setVertexFormat (CVertexBuffer::PositionFlag);
|
||||
vb.setNumVertices (7);
|
||||
{
|
||||
CVertexBufferReadWrite vba;
|
||||
vb.lock(vba);
|
||||
|
||||
// tri
|
||||
vba.setVertexCoord (0, CVector (-radius, 0, 0));
|
||||
vba.setVertexCoord (1, CVector (radius, 0, 0));
|
||||
vba.setVertexCoord (2, CVector (0, 0, 3*radius));
|
||||
|
||||
// quad
|
||||
vba.setVertexCoord (3, CVector (-radius, 0, -radius));
|
||||
vba.setVertexCoord (4, CVector (radius, 0, -radius));
|
||||
vba.setVertexCoord (5, CVector (radius, 0, radius));
|
||||
vba.setVertexCoord (6, CVector (-radius, 0, radius));
|
||||
}
|
||||
|
||||
CNELU::Driver->activeVertexBuffer(vb);
|
||||
|
||||
CIndexBuffer pbTri;
|
||||
pbTri.setNumIndexes (3);
|
||||
{
|
||||
CIndexBufferReadWrite iba;
|
||||
pbTri.lock (iba);
|
||||
iba.setTri (0, 0, 1, 2);
|
||||
}
|
||||
|
||||
CIndexBuffer pbQuad;
|
||||
pbQuad.setNumIndexes (6);
|
||||
{
|
||||
CIndexBufferReadWrite iba;
|
||||
pbQuad.lock(iba);
|
||||
iba.setTri (0, 3, 4, 5);
|
||||
iba.setTri (3, 5, 6, 3);
|
||||
}
|
||||
|
||||
CNELU::Driver->setFrustum (0.f, 4.f/3.f, 0.f, 1.f, -1.f, 1.f, false);
|
||||
CMatrix mtx;
|
||||
mtx.identity();
|
||||
CNELU::Driver->setupViewMatrix (mtx);
|
||||
|
||||
mat.setColor(CRGBA(50,255,255,150));
|
||||
|
||||
// up
|
||||
mtx.identity();
|
||||
mtx.translate(CVector(x,0,y));
|
||||
mtx.rotateY(MoveListener.getRotZ() );
|
||||
mtx.translate(CVector(0,0,radius));
|
||||
CNELU::Driver->setupModelMatrix (mtx);
|
||||
CNELU::Driver->activeVertexBuffer(vb);
|
||||
CNELU::Driver->activeIndexBuffer(pbTri);
|
||||
CNELU::Driver->renderTriangles(mat, 0, pbTri.getNumIndexes()/3);
|
||||
|
||||
mat.setColor(CRGBA(50,50,255,150));
|
||||
|
||||
// down
|
||||
mtx.identity();
|
||||
mtx.translate(CVector(x,0,y));
|
||||
mtx.rotateY(MoveListener.getRotZ() + (float)Pi);
|
||||
mtx.translate(CVector(0,0,radius));
|
||||
CNELU::Driver->setupModelMatrix (mtx);
|
||||
CNELU::Driver->renderTriangles(mat, 0, pbTri.getNumIndexes()/3);
|
||||
|
||||
// left
|
||||
mtx.identity();
|
||||
mtx.translate(CVector(x,0,y));
|
||||
mtx.rotateY(MoveListener.getRotZ() - (float)Pi/2);
|
||||
mtx.translate(CVector(0,0,radius));
|
||||
CNELU::Driver->setupModelMatrix (mtx);
|
||||
CNELU::Driver->renderTriangles(mat, 0, pbTri.getNumIndexes()/3);
|
||||
|
||||
// right
|
||||
mtx.identity();
|
||||
mtx.translate(CVector(x,0,y));
|
||||
mtx.rotateY(MoveListener.getRotZ() + (float)Pi/2);
|
||||
mtx.translate(CVector(0,0,radius));
|
||||
CNELU::Driver->setupModelMatrix (mtx);
|
||||
CNELU::Driver->renderTriangles(mat, 0, pbTri.getNumIndexes()/3);
|
||||
|
||||
// center
|
||||
mtx.identity();
|
||||
mtx.translate(CVector(x,0,y));
|
||||
mtx.rotateY(MoveListener.getRotZ());
|
||||
CNELU::Driver->setupModelMatrix (mtx);
|
||||
CNELU::Driver->activeIndexBuffer(pbQuad);
|
||||
CNELU::Driver->renderTriangles(mat, 0, pbQuad.getNumIndexes()/3);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*********************************************************\
|
||||
displayZone()
|
||||
\*********************************************************/
|
||||
void displayZones()
|
||||
{
|
||||
const float zFarStep = 5.0f;
|
||||
const float tileNearStep = 10.0f;
|
||||
const float thresholdStep = 0.005f;
|
||||
|
||||
ViewerCfg.TextContext.setHotSpot(CComputedString::MiddleMiddle);
|
||||
ViewerCfg.TextContext.setColor(CRGBA(255,255,255));
|
||||
ViewerCfg.TextContext.setFontSize(20);
|
||||
|
||||
CNELU::clearBuffers(CRGBA(0,0,0));
|
||||
CNELU::swapBuffers();
|
||||
|
||||
|
||||
|
||||
// Create landscape
|
||||
CNELU::clearBuffers(CRGBA(0,0,0));
|
||||
ViewerCfg.TextContext.printfAt(0.5f,0.5f,"Creating landscape...");
|
||||
CNELU::swapBuffers();
|
||||
|
||||
Landscape = (CLandscapeModel*)CNELU::Scene->createModel(LandscapeModelId);
|
||||
Landscape->Landscape.setNoiseMode (ViewerCfg.LandscapeNoise);
|
||||
Landscape->Landscape.setTileNear(ViewerCfg.LandscapeTileNear);
|
||||
Landscape->Landscape.setThreshold(ViewerCfg.LandscapeThreshold);
|
||||
|
||||
Landscape->Landscape.enableAutomaticLighting (ViewerCfg.AutoLight);
|
||||
Landscape->Landscape.setupAutomaticLightDir (ViewerCfg.LightDir);
|
||||
|
||||
// Enable Additive Tiles.
|
||||
Landscape->enableAdditive(true);
|
||||
|
||||
// HeightField.
|
||||
CBitmap heightBitmap;
|
||||
if( ViewerCfg.HeightFieldName!="" && heightBitmap.load(CIFile(ViewerCfg.HeightFieldName)) )
|
||||
{
|
||||
CHeightMap heightMap;
|
||||
heightMap.buildFromBitmap(heightBitmap);
|
||||
heightMap.MaxZ= ViewerCfg.HeightFieldMaxZ;
|
||||
heightMap.OriginX= ViewerCfg.HeightFieldOriginX;
|
||||
heightMap.OriginY= ViewerCfg.HeightFieldOriginY;
|
||||
heightMap.SizeX = ViewerCfg.HeightFieldSizeX;
|
||||
heightMap.SizeY = ViewerCfg.HeightFieldSizeY;
|
||||
Landscape->Landscape.setHeightField(heightMap);
|
||||
}
|
||||
|
||||
|
||||
// Init TileBank.
|
||||
CNELU::clearBuffers(CRGBA(0,0,0));
|
||||
ViewerCfg.TextContext.printfAt(0.5f,0.5f,"Initializing TileBanks...");
|
||||
CNELU::swapBuffers();
|
||||
|
||||
try
|
||||
{
|
||||
CIFile bankFile (ViewerCfg.BanksPath + "/" + ViewerCfg.Bank);
|
||||
Landscape->Landscape.TileBank.serial(bankFile);
|
||||
}
|
||||
catch(Exception)
|
||||
{
|
||||
string tmp = string("Cant load bankfile ")+ViewerCfg.BanksPath + "/" + ViewerCfg.Bank;
|
||||
nlerror (tmp.c_str());
|
||||
}
|
||||
|
||||
if ((Landscape->Landscape.TileBank.getAbsPath ()!="")&&(ViewerCfg.TilesPath!=""))
|
||||
Landscape->Landscape.TileBank.setAbsPath (ViewerCfg.TilesPath + "/");
|
||||
|
||||
if (ViewerCfg.UseDDS)
|
||||
{
|
||||
Landscape->Landscape.TileBank.makeAllExtensionDDS();
|
||||
}
|
||||
|
||||
if (ViewerCfg.AllPathRelative)
|
||||
Landscape->Landscape.TileBank.makeAllPathRelative();
|
||||
|
||||
sint idx = ViewerCfg.Bank.find(".");
|
||||
string farBank = ViewerCfg.Bank.substr(0,idx);
|
||||
farBank += ".farbank";
|
||||
|
||||
try
|
||||
{
|
||||
CIFile farbankFile(ViewerCfg.BanksPath + "/" + farBank);
|
||||
Landscape->Landscape.TileFarBank.serial(farbankFile);
|
||||
}
|
||||
catch(Exception)
|
||||
{
|
||||
string tmp = string("Cant load bankfile ")+ViewerCfg.BanksPath + "/" + farBank;
|
||||
nlerror (tmp.c_str());
|
||||
}
|
||||
|
||||
if ( ! Landscape->Landscape.initTileBanks() )
|
||||
{
|
||||
nlwarning( "You need to recompute bank.farbank for the far textures" );
|
||||
}
|
||||
|
||||
// Init light color
|
||||
CNELU::clearBuffers(CRGBA(0,0,0));
|
||||
ViewerCfg.TextContext.printfAt(0.5f,0.5f,"Initializing Light...");
|
||||
CNELU::swapBuffers();
|
||||
|
||||
Landscape->Landscape.setupStaticLight (ViewerCfg.LandDiffuse, ViewerCfg.LandAmbient, 1.1f);
|
||||
|
||||
// Init collision manager
|
||||
CollisionManager.init( &(Landscape->Landscape), 200);
|
||||
|
||||
|
||||
// Preload of TileBank
|
||||
CNELU::clearBuffers(CRGBA(0,0,0));
|
||||
ViewerCfg.TextContext.printfAt(0.5f,0.5f,"Loading TileBank...");
|
||||
CNELU::swapBuffers();
|
||||
|
||||
for (int ts=0; ts<Landscape->Landscape.TileBank.getTileSetCount (); ts++)
|
||||
{
|
||||
CTileSet *tileSet=Landscape->Landscape.TileBank.getTileSet (ts);
|
||||
sint tl;
|
||||
for (tl=0; tl<tileSet->getNumTile128(); tl++)
|
||||
Landscape->Landscape.flushTiles (CNELU::Scene->getDriver(), (uint16)tileSet->getTile128(tl), 1);
|
||||
for (tl=0; tl<tileSet->getNumTile256(); tl++)
|
||||
Landscape->Landscape.flushTiles (CNELU::Scene->getDriver(), (uint16)tileSet->getTile256(tl), 1);
|
||||
for (tl=0; tl<CTileSet::count; tl++)
|
||||
Landscape->Landscape.flushTiles (CNELU::Scene->getDriver(), (uint16)tileSet->getTransition(tl)->getTile (), 1);
|
||||
}
|
||||
|
||||
|
||||
// Build zones.
|
||||
CNELU::clearBuffers(CRGBA(0,0,0));
|
||||
ViewerCfg.TextContext.printfAt(0.5f,0.5f,"Loading zones...");
|
||||
CNELU::swapBuffers();
|
||||
uint32 i;
|
||||
for(i =0; i<ViewerCfg.Zones.size(); i++)
|
||||
{
|
||||
CZone zone;
|
||||
try
|
||||
{
|
||||
CIFile file(CPath::lookup(ViewerCfg.Zones[i]));
|
||||
zone.serial(file);
|
||||
file.close();
|
||||
|
||||
// Add it to landscape.
|
||||
Landscape->Landscape.addZone(zone);
|
||||
|
||||
// Add it to collision manager.
|
||||
CollisionManager.addZone(zone.getZoneId());
|
||||
}
|
||||
catch(Exception &e)
|
||||
{
|
||||
printf(e.what ());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Load instance group.
|
||||
CNELU::clearBuffers(CRGBA(0,0,0));
|
||||
ViewerCfg.TextContext.printfAt(0.5f,0.5f,"Loading objects...");
|
||||
CNELU::swapBuffers();
|
||||
for(i =0; i<ViewerCfg.Igs.size(); i++)
|
||||
{
|
||||
CInstanceGroup *group = new CInstanceGroup;
|
||||
try
|
||||
{
|
||||
CIFile file(CPath::lookup(ViewerCfg.Igs[i]));
|
||||
group->serial(file);
|
||||
file.close();
|
||||
|
||||
// Add it to the scene.
|
||||
group->addToScene (*CNELU::Scene);
|
||||
}
|
||||
catch(Exception &e)
|
||||
{
|
||||
printf(e.what ());
|
||||
}
|
||||
}
|
||||
|
||||
// Init collision Manager.
|
||||
CNELU::clearBuffers(CRGBA(0,0,0));
|
||||
ViewerCfg.TextContext.printfAt(0.5f,0.5f,"Initializing collision manager...");
|
||||
CNELU::swapBuffers();
|
||||
|
||||
|
||||
CollisionManager.setCenter(ViewerCfg.Position);
|
||||
ViewerCfg.Position.z = 0.0f;
|
||||
CollisionManager.snapToGround( ViewerCfg.Position, 1000.0f );
|
||||
|
||||
|
||||
|
||||
// hide mouse cursor
|
||||
CNELU::Driver->showCursor(false);
|
||||
#ifdef NL_RELEASE
|
||||
CNELU::Driver->setCapture(true);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// Events management
|
||||
CNELU::EventServer.addEmitter(CNELU::Driver->getEventEmitter());
|
||||
CNELU::AsyncListener.addToServer(CNELU::EventServer);
|
||||
|
||||
MoveListener.init(CNELU::Scene, ViewerCfg.Width, ViewerCfg.Height, *CNELU::Camera);
|
||||
MoveListener.addToServer(CNELU::EventServer);
|
||||
MoveListener.setPos( ViewerCfg.Position );
|
||||
|
||||
CNELU::Camera->setPerspective (float(80.0*Pi/180.0), 1.33f, 0.1f, 1000.0f);
|
||||
|
||||
bool showInfos = true;
|
||||
|
||||
|
||||
// initializing Z-Clip Far
|
||||
float left;
|
||||
float right;
|
||||
float bottom;
|
||||
float top;
|
||||
float znear;
|
||||
float zfar;
|
||||
CNELU::Camera->getFrustum(left, right, bottom, top, znear, zfar);
|
||||
zfar = ViewerCfg.ZFar;
|
||||
CNELU::Camera->setFrustum(left, right, bottom, top, znear, zfar);
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
// Time mgt.
|
||||
//==========
|
||||
static sint64 t0 = (sint64)CTime::getLocalTime();
|
||||
static sint64 t1 = (sint64)CTime::getLocalTime();
|
||||
static sint64 ts = 0;
|
||||
|
||||
t0 = t1;
|
||||
t1 = (sint64)CTime::getLocalTime();
|
||||
sint64 dt64 = t1-t0;
|
||||
ts += dt64;
|
||||
float dt= ((float)dt64)*0.001f;
|
||||
|
||||
|
||||
CNELU::EventServer.pump();
|
||||
|
||||
|
||||
// Manage movement and collision
|
||||
MoveListener.setLocalTime(CTime::getLocalTime());
|
||||
CVector oldpos = MoveListener.getPos();
|
||||
MoveListener.changeViewMatrix();
|
||||
if(MoveListener.getMode()==CMoveListener::WALK)
|
||||
{
|
||||
CVector pos = MoveListener.getPos();
|
||||
CollisionManager.snapToGround( pos , 1000.0f );
|
||||
MoveListener.setPos( pos );
|
||||
}
|
||||
CollisionManager.setCenter(MoveListener.getPos());
|
||||
|
||||
|
||||
// Change move mode
|
||||
if(CNELU::AsyncListener.isKeyPushed(KeySPACE))
|
||||
{
|
||||
MoveListener.swapMode();
|
||||
}
|
||||
|
||||
|
||||
// Change displaying infos state
|
||||
if(CNELU::AsyncListener.isKeyPushed(KeyF1))
|
||||
{
|
||||
showInfos = !showInfos;
|
||||
}
|
||||
|
||||
|
||||
// Change eyes height
|
||||
float eh = MoveListener.getEyesHeight();
|
||||
if(CNELU::AsyncListener.isKeyPushed(KeyADD))
|
||||
{
|
||||
ViewerCfg.EyesHeight.z += 0.1f;
|
||||
eh += 0.1f;
|
||||
}
|
||||
if(CNELU::AsyncListener.isKeyPushed(KeySUBTRACT))
|
||||
{
|
||||
ViewerCfg.EyesHeight.z -= 0.1f;
|
||||
eh -= 0.1f;
|
||||
}
|
||||
if(ViewerCfg.EyesHeight.z<0.1f) ViewerCfg.EyesHeight.z = 0.1f;
|
||||
if(eh<0.1f) eh = 0.1f;
|
||||
MoveListener.setEyesHeight(eh);
|
||||
|
||||
|
||||
// Change TileNear
|
||||
float tileNear = Landscape->Landscape.getTileNear();
|
||||
if(CNELU::AsyncListener.isKeyPushed(KeyHOME))
|
||||
tileNear += tileNearStep;
|
||||
if(CNELU::AsyncListener.isKeyPushed(KeyEND))
|
||||
tileNear -= tileNearStep;
|
||||
if(tileNear<0) tileNear = 0;
|
||||
Landscape->Landscape.setTileNear(tileNear);
|
||||
|
||||
|
||||
// Change Z-Far
|
||||
CNELU::Camera->getFrustum(left, right, bottom, top, znear, zfar);
|
||||
if(CNELU::AsyncListener.isKeyDown(KeyPRIOR))
|
||||
zfar += zFarStep;
|
||||
if(CNELU::AsyncListener.isKeyDown(KeyNEXT))
|
||||
zfar -= zFarStep;
|
||||
if(zfar<0) zfar = 0;
|
||||
CNELU::Camera->setFrustum(left, right, bottom, top, znear, zfar);
|
||||
|
||||
|
||||
// Change Threshold
|
||||
float threshold = Landscape->Landscape.getThreshold();
|
||||
if(CNELU::AsyncListener.isKeyPushed(KeyINSERT))
|
||||
threshold += thresholdStep;
|
||||
if(CNELU::AsyncListener.isKeyPushed(KeyDELETE))
|
||||
threshold -= thresholdStep;
|
||||
if(threshold<0.001f) threshold = 0.001f;
|
||||
if(threshold>0.1f) threshold = 0.1f;
|
||||
Landscape->Landscape.setThreshold(threshold);
|
||||
|
||||
|
||||
// Switch between wired and filled scene display
|
||||
if(CNELU::AsyncListener.isKeyPushed(KeyF3))
|
||||
{
|
||||
if (CNELU::Driver->getPolygonMode ()==IDriver::Filled)
|
||||
CNELU::Driver->setPolygonMode (IDriver::Line);
|
||||
else
|
||||
CNELU::Driver->setPolygonMode (IDriver::Filled);
|
||||
}
|
||||
|
||||
|
||||
// Switch between mouse move and keyboard-only move
|
||||
if(CNELU::AsyncListener.isKeyPushed(KeyRETURN))
|
||||
{
|
||||
MoveListener.changeControlMode();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Render
|
||||
//=======
|
||||
CNELU::clearBuffers(ViewerCfg.Background);
|
||||
CNELU::Driver->clearZBuffer();
|
||||
CNELU::Scene->render();
|
||||
|
||||
|
||||
if(showInfos)
|
||||
{
|
||||
|
||||
// black top quad
|
||||
CDRU::drawQuad(0,0.97f,1.0f,1.0f,*CNELU::Driver,CRGBA(0,0,0),CNELU::Scene->getViewport());
|
||||
|
||||
// black bottom quad
|
||||
CDRU::drawQuad(0,0,1.0f,0.03f,*CNELU::Driver,CRGBA(0,0,0),CNELU::Scene->getViewport());
|
||||
|
||||
|
||||
ViewerCfg.TextContext.setFontSize(12);
|
||||
ViewerCfg.TextContext.setHotSpot(CComputedString::MiddleTop);
|
||||
ViewerCfg.TextContext.setColor(CRGBA(255,255,255));
|
||||
|
||||
// Display fps.
|
||||
ViewerCfg.TextContext.printfAt(0.05f,0.99f,"%.1f fps",1/dt);
|
||||
|
||||
// Display ms
|
||||
ViewerCfg.TextContext.printfAt(0.12f,0.99f,"%d ms",dt64);
|
||||
|
||||
// Display Tile Near
|
||||
ViewerCfg.TextContext.printfAt(0.75f,0.99f,"Tile Near : %.1f",tileNear);
|
||||
|
||||
//Display moving mode
|
||||
ViewerCfg.TextContext.setColor(CRGBA(255,0,0));
|
||||
switch(MoveListener.getMode())
|
||||
{
|
||||
case CMoveListener::WALK :
|
||||
ViewerCfg.TextContext.printfAt(0.5f,0.99f,"Walk Mode");
|
||||
break;
|
||||
case CMoveListener::FREE :
|
||||
ViewerCfg.TextContext.printfAt(0.5f,0.99f,"Free-Look Mode");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
ViewerCfg.TextContext.setColor(CRGBA(255,255,255));
|
||||
|
||||
// Display Threshold
|
||||
ViewerCfg.TextContext.printfAt(0.3f,0.99f,"Threshold : %.3f",threshold);
|
||||
|
||||
// Display Clip Far
|
||||
ViewerCfg.TextContext.printfAt(0.92f,0.99f,"Clip Far : %.1f",zfar);
|
||||
|
||||
|
||||
ViewerCfg.TextContext.setHotSpot(CComputedString::MiddleBottom);
|
||||
|
||||
// Display current zone name
|
||||
CVector pos = MoveListener.getPos();
|
||||
string zoneName = getZoneNameByCoord(pos.x, pos.y);
|
||||
ViewerCfg.TextContext.printfAt(0.3f,0.01f,"Zone : %s",zoneName.c_str());
|
||||
|
||||
// Position
|
||||
ViewerCfg.TextContext.printfAt(0.1f,0.01f,"Position : %d %d %d",(sint)pos.x,(sint)pos.y,(sint)pos.z);
|
||||
|
||||
// Eyes height
|
||||
ViewerCfg.TextContext.printfAt(0.7f,0.01f,"Eyes : %.2f m",ViewerCfg.EyesHeight.z);
|
||||
|
||||
// Display speed in km/h
|
||||
ViewerCfg.TextContext.setColor(CRGBA(255,0,0));
|
||||
ViewerCfg.TextContext.printfAt(0.5f,0.01f,"Speed : %d km/h",(sint)(MoveListener.getSpeed()*3.6f));
|
||||
ViewerCfg.TextContext.setColor(CRGBA(255,255,255));
|
||||
|
||||
// Heading
|
||||
sint heading = -(sint)(MoveListener.getRotZ()*180/Pi)%360;
|
||||
if(heading<0) heading += 360;
|
||||
ViewerCfg.TextContext.printfAt(0.9f,0.01f,"Heading : %d degrees",heading);
|
||||
|
||||
// Display the cool compass.
|
||||
displayOrientation();
|
||||
}
|
||||
|
||||
|
||||
CNELU::swapBuffers();
|
||||
CNELU::screenshot();
|
||||
}
|
||||
while(!CNELU::AsyncListener.isKeyPushed(KeyESCAPE));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ViewerCfg.Position = MoveListener.getPos();
|
||||
|
||||
CNELU::AsyncListener.removeFromServer(CNELU::EventServer);
|
||||
MoveListener.removeFromServer(CNELU::EventServer);
|
||||
|
||||
CNELU::Driver->showCursor(true);
|
||||
#ifdef NL_RELEASE
|
||||
CNELU::Driver->setCapture(false);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************\
|
||||
writeConfigFile
|
||||
\****************************************************************/
|
||||
void writeConfigFile(const char * configFileName)
|
||||
{
|
||||
FILE * f = fopen(configFileName,"wt");
|
||||
|
||||
if(f==NULL)
|
||||
{
|
||||
fprintf(stderr,"can't open file '%s'\n",configFileName);
|
||||
}
|
||||
|
||||
fprintf(f,"FullScreen = %d;\n",ViewerCfg.Windowed?0:1);
|
||||
fprintf(f,"Width = %d;\n",ViewerCfg.Width);
|
||||
fprintf(f,"Height = %d;\n",ViewerCfg.Height);
|
||||
fprintf(f,"Depth = %d;\n",ViewerCfg.Depth);
|
||||
fprintf(f,"Position = { %f, %f, %f };\n", ViewerCfg.Position.x,ViewerCfg.Position.y,ViewerCfg.Position.z);
|
||||
fprintf(f,"EyesHeight = %f;\n", ViewerCfg.EyesHeight.z);
|
||||
fprintf(f,"Background = { %d, %d, %d };\n", ViewerCfg.Background.R,ViewerCfg.Background.G,ViewerCfg.Background.B);
|
||||
fprintf(f,"ZFar = %f;\n", ViewerCfg.ZFar);
|
||||
|
||||
fprintf(f,"AutoLight = %d;\n", ViewerCfg.AutoLight?1:0);
|
||||
fprintf(f,"LightDir = { %f, %f, %f };\n", ViewerCfg.LightDir.x, ViewerCfg.LightDir.y, ViewerCfg.LightDir.z);
|
||||
fprintf(f,"LandscapeTileNear = %f;\n", ViewerCfg.LandscapeTileNear);
|
||||
fprintf(f,"LandscapeThreshold = %f;\n", ViewerCfg.LandscapeThreshold);
|
||||
fprintf(f,"LandscapeNoise = %d;\n", (int)ViewerCfg.LandscapeNoise);
|
||||
fprintf(f,"BanksPath = \"%s\";\n",ViewerCfg.BanksPath.c_str());
|
||||
fprintf(f,"TilesPath = \"%s\";\n",ViewerCfg.TilesPath.c_str());
|
||||
fprintf(f,"UseDDS = \"%d\";\n",ViewerCfg.UseDDS?1:0);
|
||||
fprintf(f,"AllPathRelative = \"%d\";\n",ViewerCfg.AllPathRelative?1:0);
|
||||
fprintf(f,"Bank = \"%s\";\n",ViewerCfg.Bank.c_str());
|
||||
fprintf(f,"ZonesPath = \"%s\";\n",ViewerCfg.ZonesPath.c_str());
|
||||
fprintf(f,"IgPath = \"%s\";\n",ViewerCfg.IgPath.c_str());
|
||||
fprintf(f,"ShapePath = \"%s\";\n",ViewerCfg.ShapePath.c_str());
|
||||
fprintf(f,"MapsPath = \"%s\";\n",ViewerCfg.MapsPath.c_str());
|
||||
fprintf(f,"FontPath = \"%s\";\n",ViewerCfg.FontPath.c_str());
|
||||
|
||||
fprintf(f,"HeightFieldName = \"%s\";\n", ViewerCfg.HeightFieldName.c_str());
|
||||
fprintf(f,"HeightFieldMaxZ = %f;\n", ViewerCfg.HeightFieldMaxZ);
|
||||
fprintf(f,"HeightFieldOriginX = %f;\n", ViewerCfg.HeightFieldOriginX);
|
||||
fprintf(f,"HeightFieldOriginY = %f;\n", ViewerCfg.HeightFieldOriginY);
|
||||
fprintf(f,"HeightFieldSizeX = %f;\n", ViewerCfg.HeightFieldSizeX);
|
||||
fprintf(f,"HeightFieldSizeY = %f;\n", ViewerCfg.HeightFieldSizeY);
|
||||
|
||||
fprintf(f,"LandAmbient = { %d, %d, %d };\n", ViewerCfg.LandAmbient.R,ViewerCfg.LandAmbient.G,ViewerCfg.LandAmbient.B);
|
||||
fprintf(f,"LandDiffuse = { %d, %d, %d };\n", ViewerCfg.LandDiffuse.R,ViewerCfg.LandDiffuse.G,ViewerCfg.LandDiffuse.B);
|
||||
|
||||
fprintf(f,"Zones = {\n");
|
||||
fprintf(f,"};\n");
|
||||
|
||||
fprintf(f,"Ig = {\n");
|
||||
fprintf(f,"};\n");
|
||||
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************\
|
||||
init()
|
||||
\****************************************************************/
|
||||
void initViewerConfig(const char * configFileName)
|
||||
{
|
||||
FILE * f = fopen(configFileName,"rt");
|
||||
if(f==NULL)
|
||||
{
|
||||
nlwarning("'%s' not found, default values used", configFileName);
|
||||
writeConfigFile(configFileName);
|
||||
}
|
||||
else fclose (f);
|
||||
|
||||
try
|
||||
{
|
||||
CConfigFile cf;
|
||||
|
||||
cf.load(configFileName);
|
||||
|
||||
CConfigFile::CVar &cvFullScreen = cf.getVar("FullScreen");
|
||||
ViewerCfg.Windowed = cvFullScreen.asInt() ? false : true;
|
||||
|
||||
CConfigFile::CVar &cvWidth = cf.getVar("Width");
|
||||
ViewerCfg.Width = cvWidth.asInt();
|
||||
|
||||
CConfigFile::CVar &cvHeight = cf.getVar("Height");
|
||||
ViewerCfg.Height = cvHeight.asInt();
|
||||
|
||||
CConfigFile::CVar &cvDepth = cf.getVar("Depth");
|
||||
ViewerCfg.Depth = cvDepth.asInt();
|
||||
|
||||
CConfigFile::CVar &cvPosition = cf.getVar("Position");
|
||||
nlassert(cvPosition.size()==3);
|
||||
ViewerCfg.Position.x = cvPosition.asFloat(0);
|
||||
ViewerCfg.Position.y = cvPosition.asFloat(1);
|
||||
ViewerCfg.Position.z = cvPosition.asFloat(2);
|
||||
|
||||
CConfigFile::CVar &cvEyesHeight = cf.getVar("EyesHeight");
|
||||
ViewerCfg.EyesHeight = CVector(0,0,cvEyesHeight.asFloat());
|
||||
|
||||
CConfigFile::CVar &cvBackColor = cf.getVar("Background");
|
||||
nlassert(cvBackColor.size()==3);
|
||||
ViewerCfg.Background.R = cvBackColor.asInt(0);
|
||||
ViewerCfg.Background.G = cvBackColor.asInt(1);
|
||||
ViewerCfg.Background.B = cvBackColor.asInt(2);
|
||||
|
||||
CConfigFile::CVar &cvZFar = cf.getVar("ZFar");
|
||||
ViewerCfg.ZFar = cvZFar.asFloat();
|
||||
|
||||
CConfigFile::CVar &cvAutoLight = cf.getVar("AutoLight");
|
||||
ViewerCfg.AutoLight = cvAutoLight.asInt() ? true : false;
|
||||
|
||||
CConfigFile::CVar &cvLightDir = cf.getVar("LightDir");
|
||||
nlassert(cvLightDir.size()==3);
|
||||
ViewerCfg.LightDir.x = cvLightDir.asFloat(0);
|
||||
ViewerCfg.LightDir.y = cvLightDir.asFloat(1);
|
||||
ViewerCfg.LightDir.z = cvLightDir.asFloat(2);
|
||||
|
||||
CConfigFile::CVar &cvLandscapeTileNear = cf.getVar("LandscapeTileNear");
|
||||
ViewerCfg.LandscapeTileNear = cvLandscapeTileNear.asFloat();
|
||||
|
||||
CConfigFile::CVar &cvLandscapeThreshold = cf.getVar("LandscapeThreshold");
|
||||
ViewerCfg.LandscapeThreshold = cvLandscapeThreshold.asFloat();
|
||||
|
||||
CConfigFile::CVar &cvLandscapeNoise = cf.getVar("LandscapeNoise");
|
||||
ViewerCfg.LandscapeNoise = cvLandscapeNoise.asInt() != 0;
|
||||
|
||||
CConfigFile::CVar &cvBanksPath = cf.getVar("BanksPath");
|
||||
ViewerCfg.BanksPath = cvBanksPath.asString();
|
||||
|
||||
CConfigFile::CVar &cvTilesPath = cf.getVar("TilesPath");
|
||||
ViewerCfg.TilesPath = cvTilesPath.asString();
|
||||
|
||||
CConfigFile::CVar &cvUseDDS = cf.getVar("UseDDS");
|
||||
ViewerCfg.UseDDS = cvUseDDS.asInt() ? true : false;
|
||||
|
||||
CConfigFile::CVar &cvAllPathRelative = cf.getVar("AllPathRelative");
|
||||
ViewerCfg.AllPathRelative = cvAllPathRelative.asInt() ? true : false;
|
||||
|
||||
CConfigFile::CVar &cvBank = cf.getVar("Bank");
|
||||
ViewerCfg.Bank = cvBank.asString();
|
||||
|
||||
CConfigFile::CVar &cvZonesPath = cf.getVar("ZonesPath");
|
||||
ViewerCfg.ZonesPath = cvZonesPath.asString();
|
||||
CPath::addSearchPath(cvZonesPath.asString());
|
||||
|
||||
CConfigFile::CVar &cvIgPath = cf.getVar("IgPath");
|
||||
ViewerCfg.IgPath = cvIgPath.asString();
|
||||
CPath::addSearchPath(cvIgPath.asString());
|
||||
|
||||
CConfigFile::CVar &cvShapePath = cf.getVar("ShapePath");
|
||||
ViewerCfg.ShapePath = cvShapePath.asString();
|
||||
CPath::addSearchPath(cvShapePath.asString());
|
||||
|
||||
CConfigFile::CVar &cvMapsPath = cf.getVar("MapsPath");
|
||||
ViewerCfg.MapsPath = cvMapsPath.asString();
|
||||
CPath::addSearchPath(cvMapsPath.asString());
|
||||
|
||||
CConfigFile::CVar &cvFontPath = cf.getVar("FontPath");
|
||||
ViewerCfg.FontPath = cvFontPath.asString();
|
||||
|
||||
CConfigFile::CVar &cvHeightFieldName = cf.getVar("HeightFieldName");
|
||||
ViewerCfg.HeightFieldName = cvHeightFieldName.asString();
|
||||
|
||||
CConfigFile::CVar &cvHeightFieldMaxZ = cf.getVar("HeightFieldMaxZ");
|
||||
ViewerCfg.HeightFieldMaxZ = cvHeightFieldMaxZ.asFloat();
|
||||
|
||||
CConfigFile::CVar &cvHeightFieldOriginX = cf.getVar("HeightFieldOriginX");
|
||||
ViewerCfg.HeightFieldOriginX = cvHeightFieldOriginX.asFloat();
|
||||
|
||||
CConfigFile::CVar &cvHeightFieldOriginY = cf.getVar("HeightFieldOriginY");
|
||||
ViewerCfg.HeightFieldOriginY = cvHeightFieldOriginY.asFloat();
|
||||
|
||||
CConfigFile::CVar &cvHeightFieldSizeX = cf.getVar("HeightFieldSizeX");
|
||||
ViewerCfg.HeightFieldSizeX = cvHeightFieldSizeX.asFloat();
|
||||
|
||||
CConfigFile::CVar &cvHeightFieldSizeY = cf.getVar("HeightFieldSizeY");
|
||||
ViewerCfg.HeightFieldSizeY = cvHeightFieldSizeY.asFloat();
|
||||
|
||||
|
||||
CConfigFile::CVar &cvLandAmb = cf.getVar("LandAmbient");
|
||||
nlassert(cvLandAmb.size()==3);
|
||||
ViewerCfg.LandAmbient.R = cvLandAmb.asInt(0);
|
||||
ViewerCfg.LandAmbient.G = cvLandAmb.asInt(1);
|
||||
ViewerCfg.LandAmbient.B = cvLandAmb.asInt(2);
|
||||
|
||||
CConfigFile::CVar &cvLandDiff = cf.getVar("LandDiffuse");
|
||||
nlassert(cvLandDiff.size()==3);
|
||||
ViewerCfg.LandDiffuse.R = cvLandDiff.asInt(0);
|
||||
ViewerCfg.LandDiffuse.G = cvLandDiff.asInt(1);
|
||||
ViewerCfg.LandDiffuse.B = cvLandDiff.asInt(2);
|
||||
|
||||
|
||||
CConfigFile::CVar &cvZones = cf.getVar("Zones");
|
||||
for(uint i=0; i<cvZones.size(); i++)
|
||||
{
|
||||
ViewerCfg.Zones.push_back(cvZones.asString(i));
|
||||
}
|
||||
|
||||
CConfigFile::CVar &cvIgs = cf.getVar("Ig");
|
||||
for(uint i=0; i<cvIgs.size(); i++)
|
||||
{
|
||||
ViewerCfg.Igs.push_back(cvIgs.asString(i));
|
||||
}
|
||||
|
||||
}
|
||||
catch (EConfigFile &e)
|
||||
{
|
||||
printf ("Problem in config file : %s\n", e.what ());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/****************************************************************\
|
||||
MAIN
|
||||
\****************************************************************/
|
||||
void main()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Init NELU
|
||||
NL3D::CNELU::init(ViewerCfg.Width, ViewerCfg.Height, CViewport(), ViewerCfg.Depth, ViewerCfg.Windowed, NULL, false, false);
|
||||
NL3D::CNELU::Camera->setTransformMode(ITransformable::DirectMatrix);
|
||||
|
||||
// Init the font manager
|
||||
|
||||
initViewerConfig("zviewer.cfg");
|
||||
|
||||
ViewerCfg.TextContext.init (CNELU::Driver, &ViewerCfg.FontManager);
|
||||
ViewerCfg.TextContext.setFontGenerator(ViewerCfg.FontPath);
|
||||
ViewerCfg.TextContext.setFontSize(12);
|
||||
ViewerCfg.FontManager.setMaxMemory(2000000);
|
||||
|
||||
displayZones();
|
||||
|
||||
// release nelu
|
||||
NL3D::CNELU::release();
|
||||
|
||||
}
|
||||
catch (Exception &e)
|
||||
{
|
||||
fprintf (stderr,"main trapped an exception: '%s'", e.what ());
|
||||
}
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include <windows.h>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ICON1 ICON "nevraxpill.ico"
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
|
@ -1,353 +0,0 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="zviewer"
|
||||
ProjectGUID="{B798D9FF-AA33-4918-8B51-1B4FA9C5160A}"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="..\obj\$(ConfigurationName)\$(ProjectName)"
|
||||
IntermediateDirectory="..\obj\$(ConfigurationName)\$(ProjectName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="_DEBUG;_CONSOLE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
SmallerTypeCheck="true"
|
||||
RuntimeLibrary="3"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="..\bin\$(ProjectName)_d.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug|x64"
|
||||
OutputDirectory="..\obj64\$(ConfigurationName)\$(ProjectName)"
|
||||
IntermediateDirectory="..\obj64\$(ConfigurationName)\$(ProjectName)"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="_DEBUG;_CONSOLE"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
SmallerTypeCheck="true"
|
||||
RuntimeLibrary="3"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="..\bin64\$(ProjectName)_d.exe"
|
||||
LinkIncremental="2"
|
||||
IgnoreDefaultLibraryNames="msvcrt.lib"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="..\obj\$(ConfigurationName)\$(ProjectName)"
|
||||
IntermediateDirectory="..\obj\$(ConfigurationName)\$(ProjectName)"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="false"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="3"
|
||||
InlineFunctionExpansion="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
FavorSizeOrSpeed="1"
|
||||
OmitFramePointers="true"
|
||||
EnableFiberSafeOptimizations="true"
|
||||
PreprocessorDefinitions="NDEBUG;_CONSOLE"
|
||||
StringPooling="true"
|
||||
RuntimeLibrary="2"
|
||||
WarningLevel="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="..\bin\$(ProjectName)_r.exe"
|
||||
LinkIncremental="1"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
OutputDirectory="..\obj64\$(ConfigurationName)\$(ProjectName)"
|
||||
IntermediateDirectory="..\obj64\$(ConfigurationName)\$(ProjectName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="3"
|
||||
InlineFunctionExpansion="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
FavorSizeOrSpeed="1"
|
||||
OmitFramePointers="true"
|
||||
EnableFiberSafeOptimizations="true"
|
||||
PreprocessorDefinitions="NDEBUG;_CONSOLE"
|
||||
StringPooling="true"
|
||||
RuntimeLibrary="2"
|
||||
WarningLevel="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="..\bin64\$(ProjectName)_r.exe"
|
||||
LinkIncremental="1"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<File
|
||||
RelativePath="move_listener.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="move_listener.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="nevraxpill.ico"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="resource.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="zviewer.cfg"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="zviewer.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\zviewer.rc"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
Loading…
Reference in a new issue