2019-09-18 19:04:56 +02:00
|
|
|
#include <fxengine/camera.h>
|
2019-09-18 18:51:26 +02:00
|
|
|
#include <gint/std/string.h>
|
|
|
|
|
|
|
|
|
|
|
|
void fe_view_set(const fe_camera * cam)
|
|
|
|
{
|
|
|
|
fe_view_set_param(cam->dh, cam->dv, cam->roll, &cam->pos);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void fe_view_set_param(const double dh, const double dv, const double roulis, const fe_ipoint * camera)
|
|
|
|
{
|
|
|
|
const double A=fe_cos(dv);
|
|
|
|
const double B=fe_sin(dv);
|
|
|
|
|
|
|
|
const double C=fe_cos(roulis);
|
|
|
|
const double D=fe_sin(roulis);
|
|
|
|
|
|
|
|
const double E=fe_cos(dh);
|
|
|
|
const double F=fe_sin(dh);
|
|
|
|
|
|
|
|
// raccourcis
|
|
|
|
const double AD=A*D, BD=B*D;
|
|
|
|
|
|
|
|
fe_matrix[0][0]=C*E;
|
|
|
|
fe_matrix[0][1]=-C*F;
|
|
|
|
fe_matrix[0][2]=D;
|
|
|
|
|
|
|
|
fe_matrix[1][0]=BD*E+A*F;
|
|
|
|
fe_matrix[1][1]=-BD*F+A*E;
|
|
|
|
fe_matrix[1][2]=-B*C;
|
|
|
|
|
|
|
|
fe_matrix[2][0]=-AD*E+B*F;
|
|
|
|
fe_matrix[2][1]=AD*F+B*E;
|
|
|
|
fe_matrix[2][2]=A*C;
|
|
|
|
|
|
|
|
// assigner delta
|
|
|
|
memcpy(&fe_translate_delta, camera, sizeof(fe_ipoint));
|
|
|
|
}
|