• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Problema camera irrlicht
#2
Non capirò mai perché hanno fornito Irrlicht di una cameraFPS e di una inutile cameraMaya ma non di una CameraTPS generica e configurabile.

Se ho ben capito il tuo problema è fare si che la camera "segua" il target, perché probabilmente già lo punti tramite il setTarget(). Ora non devi fare altro che mantenere costante (o in un range) la camera dal player che si muove tramite il setPosition().

Non ritrovo il link dal forum ufficiale di Irrlicht (dove ci sono diversi esempi) ma il sorgente ce l'ho (una possibile soluzione):
Codice:
//I3rdPersonCam.h                          3rd Person camera for Irrlicht 3D 1.1  
// version 0.1

#include <irrlicht.h>
using namespace irr;
using namespace irr::core;
using namespace irr::scene;
// 1.  create I3rdPersonCam object <Cam1>;
// 2.  attach a CameraSceneNode with Cam1.attachCamera()
// 3.  Set a target with Cam1.setTarget()
// 4.  call Cam1.modOrientation(pan, tilt, zoom) or Cam1.setOrientation(pan, tilt, zoom) to position camera
// 5.  call Cam1.updatePosition() to apply new Position data
// 6.  repeat 4 and 5 as needed



class I3rdPersonCam{

public:
   float camPan;
   float camTilt;
   float camZoom;
   float maxZoom;
   float camSpeed;
   ICameraSceneNode* cam;
   ISceneNode* camTarget;
   vector3df offset;
  
   I3rdPersonCam(){
      camPan=0;
      camTilt=45;
      camZoom=14;
      maxZoom=250;
      camSpeed=1;
      }

   void setTarget(ISceneNode *newTarget){
      camTarget=newTarget;
      }

   void setOffset(vector3df newOffset){
      offset=newOffset;
      }

   void attachCamera(ICameraSceneNode *camtoattach){
      cam=camtoattach;
      }

   void modOrientation(float pan1,float tilt1,float zoom1){
      camPan=camPan+pan1;
      camTilt=camTilt+tilt1;
      camZoom=camZoom+zoom1;
      if(camPan>360)camPan=camPan-360;
      if(camPan<-360)camPan=camPan+360;
      if(camTilt>89)camTilt=89;
      if(camTilt<-89)camTilt=-89;
      if(camZoom>maxZoom)camZoom=maxZoom;
      if(camZoom<0)camZoom=0;
      }

   void setOrientation(float pan1,float tilt1,float zoom1){
      camPan=pan1;
      camTilt=tilt1;
      camZoom=zoom1;
      }


void updatePosition()
{
vector3df CPosVector;
vector3df NewCamLocation;
vector3df Target1;
//CamPan==0 places camera behind Model--- CamPan range 0-360
//camTilt inputs should be between -89 and +89
CPosVector.X=cos((camPan+180)*PI/180)*sin((camTilt+90)*PI/180);
CPosVector.Y=cos((camTilt+90)*PI/180);
CPosVector.Z=sin((camPan+180)*PI/180)*sin((camTilt+90)*PI/180);

matrix4 m2;
m2.setRotationDegrees(camTarget->getRotation());
m2.transformVect(CPosVector);

Target1=camTarget->getPosition()+offset;
NewCamLocation.X=Target1.X+CPosVector.X*camZoom;
NewCamLocation.Y=Target1.Y+CPosVector.Y*camZoom;
NewCamLocation.Z=Target1.Z+CPosVector.Z*camZoom;

cam->setPosition(NewCamLocation);
cam->setUpVector(vector3df(0,1,0));
cam->setTarget(vector3df(Target1));
cam->updateAbsolutePosition();
}

};

Ora fai attenzione alla parte finale dove c'è NewCamLocation e Target1. Qui viene presa la posizione del player (il camTarget), spostato di offset (un vettore che ti da la distanza cui si deve trovare la camera) e quindi individuata la nuova posizione della camera (NewCamLocation) considerando anche un vettore CPosVector ottenuto dalle camPan (orizzontale), camTilt (su giu) e lo Zoom (cercare i movimenti PTZ).

Se ti muovi in ambienti chiusi considera sulla camera una collisione sferica di raggio almeno 1/4 dell'altezza del player (una pallina) affinché possa restare nel livello e non superare i muri quando quest'ultimo li avvicina troppo.

Prendi anche in considerazione l'uso del tool di Ambiera come surrogato di un Unity3D per gestire le tue scene e le particelle altrimenti diventi pazzo Undecided http://www.ambiera.com/irredit/
 
Rispondi
  


Messaggi in questa discussione
Problema camera irrlicht - da Master Gabriel - 10-12-2014, 11:09 AM
RE: Problema camera irrlicht - da Chip - 11-12-2014, 12:19 AM
RE: Problema camera irrlicht - da Master Gabriel - 11-12-2014, 10:44 AM
RE: Problema camera irrlicht - da Chip - 11-12-2014, 04:51 PM
RE: Problema camera irrlicht - da Master Gabriel - 12-12-2014, 08:43 AM
RE: Problema camera irrlicht - da Chip - 12-12-2014, 11:14 AM
RE: Problema camera irrlicht - da Master Gabriel - 14-12-2014, 10:03 AM
RE: Problema camera irrlicht - da Chip - 14-12-2014, 12:00 PM
RE: Problema camera irrlicht - da Master Gabriel - 14-12-2014, 10:36 PM
RE: Problema camera irrlicht - da Chip - 14-12-2014, 11:01 PM
RE: Problema camera irrlicht - da Master Gabriel - 17-12-2014, 09:33 AM
RE: Problema camera irrlicht - da Chip - 17-12-2014, 04:56 PM
RE: Problema camera irrlicht - da Master Gabriel - 18-12-2014, 09:40 AM

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Irrlicht Engine Chip 9 2,036 01-11-2016, 12:48 AM
Ultimo messaggio: Chip
  Irrlicht Engine Info e Download friskon 12 6,195 12-04-2013, 11:25 AM
Ultimo messaggio: war10hacker
Question Problema irrlicht con directx Zettamax 0 1,442 23-02-2012, 06:49 PM
Ultimo messaggio: Zettamax
  [TUTORIAL] Irrlicht - Primo Approccio ManHunter 5 3,484 02-01-2012, 07:16 PM
Ultimo messaggio: steve
  [Irrlicht.net] Tutorial 1 - Tradotto Riddick 2 2,189 05-05-2011, 01:02 AM
Ultimo messaggio: ManHunter
  Irrlicht.Net Riddick 8 2,666 10-02-2011, 12:59 AM
Ultimo messaggio: Riddick
  irrlicht 1.7 puorcunicu 15 3,718 22-10-2010, 10:26 PM
Ultimo messaggio: Jonathan Archer
  Prima prova con irrlicht steve 4 2,147 10-07-2010, 08:31 PM
Ultimo messaggio: Riddick
  Download dei tool free e guide per Irrlicht Riddick 2 1,936 03-06-2010, 08:48 PM
Ultimo messaggio: Riddick
  Installare Irrlicht su: Dev-C++ e Code::Bocks Riddick 9 3,986 03-06-2010, 02:48 PM
Ultimo messaggio: Riddick

Vai al forum:


Browsing: 2 Ospite(i)