示例#1
0
static void rna_Camera_angle_set(PointerRNA *ptr, float value)
{
	Camera *cam = ptr->id.data;
	float sensor = camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y);
	cam->lens = fov_to_focallength(value, sensor);
}
示例#2
0
void camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float xasp, float yasp)
{
	rctf viewplane;
	float pixsize, viewfac, sensor_size, dx, dy;
	int sensor_fit;

	/* fields rendering */
	params->ycor= yasp/xasp;
	if (params->use_fields)
		params->ycor *= 2.0f;

	if (params->is_ortho) {
		/* orthographic camera */
		/* scale == 1.0 means exact 1 to 1 mapping */
		pixsize= params->ortho_scale;
	}
	else {
		/* perspective camera */
		sensor_size= camera_sensor_size(params->sensor_fit, params->sensor_x, params->sensor_y);
		pixsize= (sensor_size * params->clipsta)/params->lens;
	}

	/* determine sensor fit */
	sensor_fit = camera_sensor_fit(params->sensor_fit, xasp*winx, yasp*winy);

	if (sensor_fit==CAMERA_SENSOR_FIT_HOR)
		viewfac= winx;
	else
		viewfac= params->ycor * winy;

	pixsize /= viewfac;

	/* extra zoom factor */
	pixsize *= params->zoom;

	/* compute view plane:
	 * fully centered, zbuffer fills in jittered between -.5 and +.5 */
	viewplane.xmin = -0.5f*(float)winx;
	viewplane.ymin = -0.5f*params->ycor*(float)winy;
	viewplane.xmax =  0.5f*(float)winx;
	viewplane.ymax =  0.5f*params->ycor*(float)winy;

	/* lens shift and offset */
	dx= params->shiftx*viewfac + winx*params->offsetx;
	dy= params->shifty*viewfac + winy*params->offsety;

	viewplane.xmin += dx;
	viewplane.ymin += dy;
	viewplane.xmax += dx;
	viewplane.ymax += dy;

	/* fields offset */
	if (params->field_second) {
		if (params->field_odd) {
			viewplane.ymin-= 0.5f * params->ycor;
			viewplane.ymax-= 0.5f * params->ycor;
		}
		else {
			viewplane.ymin+= 0.5f * params->ycor;
			viewplane.ymax+= 0.5f * params->ycor;
		}
	}

	/* the window matrix is used for clipping, and not changed during OSA steps */
	/* using an offset of +0.5 here would give clip errors on edges */
	viewplane.xmin *= pixsize;
	viewplane.xmax *= pixsize;
	viewplane.ymin *= pixsize;
	viewplane.ymax *= pixsize;

	params->viewdx= pixsize;
	params->viewdy= params->ycor * pixsize;
	params->viewplane= viewplane;
}
示例#3
0
static float rna_Camera_angle_get(PointerRNA *ptr)
{
	Camera *cam = ptr->id.data;
	float sensor = camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y);
	return focallength_to_fov(cam->lens, sensor);
}