25 #ifndef SHKZ_CAMERA3_INTERFACE_H
26 #define SHKZ_CAMERA3_INTERFACE_H
64 virtual
void look_at( const
double *target, const
double *position, const
double *up,
double fov ) = 0;
77 virtual
void get(
double *target,
double *position,
double *up,
double *fov ) const = 0;
86 double target_old[3], position[3], up[3], fov;
87 get(target_old,position,up,&fov);
88 look_at(target,position,up,fov);
108 void look_from(
const double *target,
const double *direction,
double distance,
const double *up,
double fov,
double near,
double far ) {
110 double len = sqrt(direction[0]*direction[0]+direction[1]*direction[1]+direction[2]*direction[2]);
111 double position[3] = { target[0]+distance*direction[0]/len, target[1]+distance*direction[1]/len, target[2]+distance*direction[2]/len };
112 look_at(target,position,up,fov);
122 double target[3], position[3], up[3], fov;
123 get(target,position,up,&fov);
124 double direction[3] = { position[0]-target[0], position[1]-target[1], position[2]-target[2] };
125 double len = sqrt(direction[0]*direction[0]+direction[1]*direction[1]+direction[2]*direction[2]);
126 position[0] = target[0]+distance*direction[0]/len;
127 position[1] = target[1]+distance*direction[1]/len;
128 position[2] = target[2]+distance*direction[2]/len;
129 look_at(target,position,up,fov);
138 double target[3], position[3], up[3], fov;
139 get(target,position,up,&fov);
140 double direction[3] = { position[0]-target[0], position[1]-target[1], position[2]-target[2] };
141 return sqrt(direction[0]*direction[0]+direction[1]*direction[1]+direction[2]*direction[2]);
151 double target[3], position[3], up[3], fov_old;
152 get(target,position,up,&fov_old);
153 look_at(target,position,up,fov);
166 using camera3_ptr = std::unique_ptr<camera3_interface>;