-Ivan-
18-12-2013, 17:06
Il "credo" è sarcastico ovviamente :O .
Ho un problema apparentemente molto semplice.
Ho questo header:
#ifndef ENGINE
#define ENGINE
#include <glm\glm.hpp>
#include <glm\ext.hpp>
class Engine
{
public:
static glm::mat4 viewProjection;
static void Init(int width, int height);
};
#endif
e questo file cpp:
#include "stdafx.h"
#include "Engine.h"
void Engine::Init(int width, int height)
{
// The lookat function takes: eye (position of the camera), center (where the camera is pointed to), and up (top of the camera).
glm::mat4 view = glm::lookAt
(
glm::vec3(0.0, 14.0, 60.0),
glm::vec3(0.0, 0.0, -1.0),
glm::vec3(0.0, 1.0, 0.0)
);
// The perpective function takes: fovy (the lens angle), aspect (the aspect ratio), and zNear, zFar (clipping planes).
glm::mat4 projection = glm::perspective(45.0f, 1.0f * width/height, 0.1f, 70.0f);
viewProjection = projection * view;
}
Ora, ho ovviamente degli errori che mi dicono che la variabile viewProjection è undefined symbol.
Il fatto è questo, io vorrei avere una variabile statica che inizializzo attraverso un metodo statico e poi ci voglio accedere da altre classi.
Mi pare di capire che questo non si possa fare, almeno non come vorrei io.
Potrei non dichiarare la variabile statica come variabile di classe ed inserirla in un metodo statico GetViewProjection() tipo così:
glm::mat4 GetViewProjection()
{
static glm::mat4 viewProjection;
// se non è inizializzata la inizializzo
if( viewProjection == valore nullo )
{
//... calcoli per inizializzarla
}
return viewProjection;
}
Questo credo funzionerebbe ma per me non ha lo stesso valore perchè dovrei controllare l'uguaglianza di due matrici per vedere che sia inizializzata come voglio (che non è sta gran cosa complicata ma non è nemmeno come controllare il valore di un intero dal punto di vista computazionale).
E' giusto il mio ragionamento o ho sbagliato qualcosa?
E qual è il modo corretto di procedere per una situazione del genere?
Ho un problema apparentemente molto semplice.
Ho questo header:
#ifndef ENGINE
#define ENGINE
#include <glm\glm.hpp>
#include <glm\ext.hpp>
class Engine
{
public:
static glm::mat4 viewProjection;
static void Init(int width, int height);
};
#endif
e questo file cpp:
#include "stdafx.h"
#include "Engine.h"
void Engine::Init(int width, int height)
{
// The lookat function takes: eye (position of the camera), center (where the camera is pointed to), and up (top of the camera).
glm::mat4 view = glm::lookAt
(
glm::vec3(0.0, 14.0, 60.0),
glm::vec3(0.0, 0.0, -1.0),
glm::vec3(0.0, 1.0, 0.0)
);
// The perpective function takes: fovy (the lens angle), aspect (the aspect ratio), and zNear, zFar (clipping planes).
glm::mat4 projection = glm::perspective(45.0f, 1.0f * width/height, 0.1f, 70.0f);
viewProjection = projection * view;
}
Ora, ho ovviamente degli errori che mi dicono che la variabile viewProjection è undefined symbol.
Il fatto è questo, io vorrei avere una variabile statica che inizializzo attraverso un metodo statico e poi ci voglio accedere da altre classi.
Mi pare di capire che questo non si possa fare, almeno non come vorrei io.
Potrei non dichiarare la variabile statica come variabile di classe ed inserirla in un metodo statico GetViewProjection() tipo così:
glm::mat4 GetViewProjection()
{
static glm::mat4 viewProjection;
// se non è inizializzata la inizializzo
if( viewProjection == valore nullo )
{
//... calcoli per inizializzarla
}
return viewProjection;
}
Questo credo funzionerebbe ma per me non ha lo stesso valore perchè dovrei controllare l'uguaglianza di due matrici per vedere che sia inizializzata come voglio (che non è sta gran cosa complicata ma non è nemmeno come controllare il valore di un intero dal punto di vista computazionale).
E' giusto il mio ragionamento o ho sbagliato qualcosa?
E qual è il modo corretto di procedere per una situazione del genere?