move camera lens/angle conversion to BLI_math
This commit is contained in:
@@ -77,8 +77,6 @@ void *add_camera(char *name);
|
||||
struct Camera *copy_camera(struct Camera *cam);
|
||||
void make_local_camera(struct Camera *cam);
|
||||
float dof_camera(struct Object *ob);
|
||||
float camera_get_angle(struct Camera *cam);
|
||||
void camera_set_angle(struct Camera *cam, float angle);
|
||||
|
||||
void *add_lamp(char *name);
|
||||
struct Lamp *copy_lamp(struct Lamp *la);
|
||||
|
||||
@@ -773,17 +773,6 @@ float dof_camera(Object *ob)
|
||||
return cam->YF_dofdist;
|
||||
}
|
||||
|
||||
/* angle in radians */
|
||||
float camera_get_angle(Camera *cam)
|
||||
{
|
||||
return 2.f * atan(16.0f/cam->lens);
|
||||
}
|
||||
|
||||
void camera_set_angle(Camera *cam, float angle)
|
||||
{
|
||||
cam->lens = 16.0f / tan(angle * 0.5f);
|
||||
}
|
||||
|
||||
void *add_lamp(char *name)
|
||||
{
|
||||
Lamp *la;
|
||||
|
||||
@@ -166,6 +166,9 @@ void mul_v3m3_dq(float r[3], float R[3][3], DualQuat *dq);
|
||||
void mat4_to_dquat(DualQuat *r, float base[4][4], float M[4][4]);
|
||||
void dquat_to_mat4(float R[4][4], DualQuat *dq);
|
||||
|
||||
float lens_to_angle(float lens);
|
||||
float angle_to_lens(float angle);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1503,3 +1503,13 @@ void copy_dq_dq(DualQuat *dq1, DualQuat *dq2)
|
||||
memcpy(dq1, dq2, sizeof(DualQuat));
|
||||
}
|
||||
|
||||
/* lense/angle conversion (radians) */
|
||||
float lens_to_angle(float lens)
|
||||
{
|
||||
return 2.0f * atan(16.0f/lens);
|
||||
}
|
||||
|
||||
float angle_to_lens(float angle)
|
||||
{
|
||||
return 16.0f / tan(angle * 0.5f);
|
||||
}
|
||||
|
||||
@@ -39,9 +39,6 @@ typedef struct UvCameraInfo {
|
||||
short do_persp, do_pano, do_rotmat;
|
||||
} UvCameraInfo;
|
||||
|
||||
/* ugly */
|
||||
extern float camera_get_angle(struct Camera *cam);
|
||||
|
||||
void project_from_camera(float target[2], float source[3], UvCameraInfo *uci)
|
||||
{
|
||||
float pv4[4];
|
||||
@@ -138,7 +135,7 @@ UvCameraInfo *project_camera_info(Object *ob, float (*rotmat)[4], float winx, fl
|
||||
uci.do_pano = (camera->flag & CAM_PANORAMA);
|
||||
uci.do_persp = (camera->type==CAM_PERSP);
|
||||
|
||||
uci.camangle= camera_get_angle(camera)/2.0f;
|
||||
uci.camangle= lens_to_angle(camera->lens) / 2.0f;
|
||||
uci.camsize= uci.do_persp ? uci.camsize= tanf(uci.camangle) : camera->ortho_scale;
|
||||
|
||||
if (invert_m4_m4(uci.caminv, ob->obmat)) {
|
||||
|
||||
@@ -8435,7 +8435,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
|
||||
}
|
||||
if(main->versionfile <= 243) {
|
||||
Object *ob= main->object.first;
|
||||
Camera *cam = main->camera.first;
|
||||
Material *ma;
|
||||
|
||||
for(ma=main->mat.first; ma; ma= ma->id.next) {
|
||||
|
||||
@@ -42,14 +42,14 @@
|
||||
static float rna_Camera_angle_get(PointerRNA *ptr)
|
||||
{
|
||||
Camera *cam= ptr->id.data;
|
||||
|
||||
return camera_get_angle(cam);
|
||||
|
||||
return lens_to_angle(cam->lens);
|
||||
}
|
||||
|
||||
static void rna_Camera_angle_set(PointerRNA *ptr, float value)
|
||||
{
|
||||
Camera *cam= ptr->id.data;
|
||||
camera_set_angle(cam, value);
|
||||
cam->lens= angle_to_lens(value);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user