int			load_scene_open(t_prog *prog, char *str)
{
  char			**file;
  t_coord		dir;

  if (((file = str_to_wordtab(str, "\n")) == NULL)
      || (load_scene_open_beg(prog, file)))
    return (-1);
  prog->cam_fov.y = prog->cam_fov.x * ((prog->win_size.x
					/ prog->win_size.y) / 1.5);
  if (get_cam_pos(file, prog) == 1 ||
      get_cam_look_at(file, prog) == 1 ||
      load_mat(prog, file) == -1 ||
      load_light(prog, file) == -1 ||
      load_obj(prog, file) == -1)
    return (-1);
  if (prog->look_at.x == prog->cam_pos.x &&
      prog->look_at.y == prog->cam_pos.y &&
      prog->look_at.z == prog->cam_pos.z)
    return (my_printf(2, "Wrong camera placement\n") - 1);
  dir = normalize(minus_point(prog->look_at, prog->cam_pos));
  prog->cam_rot.x = RTD(acos(-(dir.z / sqrt(pow(dir.x, 2)
					    + pow(dir.z, 2))))) - 90;
  prog->cam_rot.y = RTD((M_PI / 2 - acos(dir.y)));
  prog->cam_dir = normalize(minus_point(prog->look_at, prog->cam_pos));
  free_tab(file);
  return (0);
}
Пример #2
0
void uv_pu_corner(BInputState *input, uint poly, uint corner)
{
	SUIPUElement element[4];
	static float x = 0, y = 0;
	float *cam;
	uint ring;
	element[0].type = PU_T_ANGLE;
	element[0].text = "Colapse";
	element[0].data.angle[0] = -45;
	element[0].data.angle[1] = 45;
	element[1].type = PU_T_ANGLE;
	element[1].text = "Select";
	element[1].data.angle[0] = 45;
	element[1].data.angle[1] = 135;
	element[2].type = PU_T_ANGLE;
	element[2].text = "Straight";
	element[2].data.angle[0] = 225;
	element[2].data.angle[1] = 315;
	element[3].type = PU_T_ANGLE;
	element[3].text = "CORNER";
	element[3].data.angle[0] = 135;
	element[3].data.angle[1] = 225;

	if(input->mode == BAM_DRAW)
	{
		glPushMatrix();
		cam = get_cam_pos();
		glTranslatef(-cam[0], -cam[1], cam[2] - 1);
	}
	if(input->mouse_button[2] == TRUE && input->last_mouse_button[2] == FALSE)
	{
		x = input->pointer_x;
		y = input->pointer_y;
	}
	ring = sui_draw_popup(input, x, y, element, 4, 2, 0);
	switch(ring)
	{
		case 0 :
//			uv_tool_corner_streight_uv(poly,  corner);
			uv_tool_corner_colaps(poly,  corner);
//			uv_tool_edge_streight(poly,  corner);
		break;
		case 1 :
			uv_tool_corner_select(poly,  corner);
		break;
		case 2 :
//			uv_tool_corner_streight_uv(poly,  corner);
//			uv_tool_corner_colaps(poly,  corner);
			uv_tool_edge_straight_uv(poly,  corner);
		break;
		case 3 :
//			uv_tool_corner_streight_uv(poly,  corner);
//			uv_tool_corner_colaps(poly,  corner);
//			uv_tool_edge_streight(poly,  corner);
		break;
	}
	if(input->mode == BAM_DRAW)
		glPopMatrix();
}
Пример #3
0
void uv_draw_line_add(float x, float y, boolean add)
{
	uint i;
	float dist, tie_length, *cam;
	static float last_x, last_y, line_length;
	if(GlobalDrawLine.array_length == 0)
	{
		GlobalDrawLine.array[0] = last_x = x, 
		GlobalDrawLine.array[1] = last_y = y;
		line_length = 0;
		GlobalDrawLine.array_length++;
		return;
	}
	if(GlobalDrawLine.array_length != DRAW_LINE_LENGTH - 2)
	{
		dist = sqrt((last_x - x) * (last_x - x) + (last_y - y) * (last_y - y));
		if(add && (dist > 0.002 || GlobalDrawLine.array_length != 0) && GlobalDrawLine.select_length == FALSE)
		{
			for(line_length += dist; line_length > DRAW_SEGMENT_LENGTH && GlobalDrawLine.vertex_length < DRAW_LINE_LENGTH * 8; line_length -= DRAW_SEGMENT_LENGTH)
			{
				sui_draw_set_vec2(GlobalDrawLine.vertex, GlobalDrawLine.vertex_length++, x - (x - last_x) / dist * line_length, y - (y - last_y) / dist * line_length);	
			}
			GlobalDrawLine.vertex_tie_length = GlobalDrawLine.vertex_length;
			dist = sqrt((GlobalDrawLine.array[0] - x) * (GlobalDrawLine.array[0] - x) + (GlobalDrawLine.array[1] - y) * (GlobalDrawLine.array[1] - y));
			for(tie_length = line_length + dist; tie_length > DRAW_SEGMENT_LENGTH && GlobalDrawLine.vertex_tie_length < DRAW_LINE_LENGTH * 8; tie_length -= DRAW_SEGMENT_LENGTH)
			{
				sui_draw_set_vec2(GlobalDrawLine.vertex, GlobalDrawLine.vertex_tie_length++, GlobalDrawLine.array[0] - (GlobalDrawLine.array[0] - x) / dist * tie_length, GlobalDrawLine.array[1] - (GlobalDrawLine.array[1] - y) / dist * tie_length);	
			}

		//	nglSetVertex2f(GlobalDrawLine.line, GlobalDrawLine.array_length, x, y);
			i = 2 * GlobalDrawLine.array_length++;
			GlobalDrawLine.array[i++] = x;
			GlobalDrawLine.array[i] = y;
			if(GlobalDrawLine.select_length == FALSE && dist < DRAW_CLOSE_RANGE)
				if(DRAW_CLOSE_RANGE * DRAW_CLOSE_RANGE < (last_x - GlobalDrawLine.array[0]) * (last_x - GlobalDrawLine.array[0]) + (last_y - GlobalDrawLine.array[1]) * (last_y - GlobalDrawLine.array[1]))
					GlobalDrawLine.select_length = TRUE;
			last_x = x;
			last_y = y;
		}
	}
	glPushMatrix();
	cam = get_cam_pos();
	glTranslatef(-cam[0], -cam[1], cam[2] - 1);

	glPushMatrix();
	glTranslatef(GlobalDrawLine.array[0], GlobalDrawLine.array[1], 0);
	sui_draw_gl(GL_LINES, GlobalDrawLine.ring, RING_SECTIONS * 8, 2, 0.1, 0.2, 0.4, 1.0f);
	glPopMatrix();
//	sui_draw_gl(GL_LINES, GlobalDrawLine.array, GlobalDrawLine.array_length, 2, 0.8, 0.8, 0.8);
	sui_draw_gl(GL_LINES, GlobalDrawLine.vertex, GlobalDrawLine.vertex_tie_length, 2, 0.8, 0.8, 0.8, 1.0f);
//	nglDrawArray(NGL_LINES, GlobalDrawLine.vertex, NULL, 0 ,sui_get_material(), 0);
	glPopMatrix();
}
Пример #4
0
void uv_pu_empty(BInputState *input)
{
	SUIPUElement element[4];
	static float x = 0, y = 0;
	float *cam;
	uint ring;
	element[0].type = PU_T_ANGLE;
	element[0].text = "NOTHING";
	element[0].data.angle[0] = -45;
	element[0].data.angle[1] = 45;
	element[1].type = PU_T_ANGLE;
	element[1].text = "UnDo";
	element[1].data.angle[0] = 45;
	element[1].data.angle[1] = 135;
	element[2].type = PU_T_ANGLE;
	element[2].text = "ReDo";
	element[2].data.angle[0] = 225;
	element[2].data.angle[1] = 315;
	element[3].type = PU_T_ANGLE;
	element[3].text = "NOTHING";
	element[3].data.angle[0] = 135;
	element[3].data.angle[1] = 225;

	if(input->mode == BAM_DRAW)
	{
		glPushMatrix();
		cam = get_cam_pos();
		glTranslatef(-cam[0], -cam[1], cam[2] - 1);
	}
	if(input->mouse_button[2] == TRUE && input->last_mouse_button[2] == FALSE)
	{
		x = input->pointer_x;
		y = input->pointer_y;
	}
	ring = sui_draw_popup(input, x, y, element, 4, 2, 0);
	switch(ring)
	{
		case 0 :
		break;
		case 1 :
			uvg_undo();
		break;
		case 2 :
			uvg_redo();
		break;
		case 3 :
		break;
	}
	if(input->mode == BAM_DRAW)
		glPopMatrix();
}
Пример #5
0
void uv_pu_polygon(BInputState *input, uint poly)
{
	SUIPUElement element[7];
	static float x = 0, y = 0;
	float *cam;
	uint ring;
	element[0].type = PU_T_ANGLE;
	element[0].text = "Square";
	element[0].data.angle[0] = 00;
	element[0].data.angle[1] = 360.0 / 7.0 * 1;
	element[1].type = PU_T_ANGLE;
	element[1].text = "Rectangle";
	element[1].data.angle[0] = 360.0 / 7.0 * 1;
	element[1].data.angle[1] = 360.0 / 7.0 * 2;
	element[2].type = PU_T_ANGLE;
	element[2].text = "Normal Select";
	element[2].data.angle[0] = 360.0 / 7.0 * 2;
	element[2].data.angle[1] = 360.0 / 7.0 * 3;
	element[3].type = PU_T_ANGLE;
	element[3].text = "Plane Select";
	element[3].data.angle[0] = 360.0 / 7.0 * 3;
	element[3].data.angle[1] = 360.0 / 7.0 * 4;
	element[4].type = PU_T_ANGLE;
	element[4].text = "Poly Project";
	element[4].data.angle[0] = 360.0 / 7.0 * 4;
	element[4].data.angle[1] = 360.0 / 7.0 * 5;
	element[5].type = PU_T_ANGLE;
	element[5].text = "Strip";
	element[5].data.angle[0] = 360.0 / 7.0 * 5;
	element[5].data.angle[1] = 360.0 / 7.0 * 6;
	element[6].type = PU_T_ANGLE;
	element[6].text = "Stack";
	element[6].data.angle[0] = 360.0 / 7.0 * 6;
	element[6].data.angle[1] = 360.0;



	if(input->mode == BAM_DRAW)
	{
		glPushMatrix();
		cam = get_cam_pos();
		glTranslatef(-cam[0], -cam[1], cam[2] - 1);
	}
	if(input->mouse_button[2] == TRUE && input->last_mouse_button[2] == FALSE)
	{
		x = input->pointer_x;
		y = input->pointer_y;
	}
	ring = sui_draw_popup(input, x, y, element, 7, 2, 0);
	switch(ring)
	{
		case 0 : 
			uv_tool_poly_square(poly);
		break;
		case 1 :
			uv_tool_poly_rectangle(poly);
		break;
		case 2 :
			uv_tool_poly_normal_select(poly);
		break;
		case 3 :
			uv_tool_poly_plane_select(poly);
		break;
		case 4 :
			uv_tool_poly_project(poly);
		break;
		case 5 :
	//		uv_strip(poly, 0);
			 uv_strip_plane(poly);
		break;
		case 6 :
			uv_tool_poly_stack(poly);
		break;
	}
	if(input->mode == BAM_DRAW)
		glPopMatrix();
}
Пример #6
0
void uv_pu_manip(BInputState *input)
{
	SUIPUElement element[7];
	static float x = 0, y = 0;
	float *cam;
	uint ring;
	element[0].type = PU_T_ANGLE;
	element[0].text = "Flip Horozontal";
	element[0].data.angle[0] = 45;
	element[0].data.angle[1] = 90;

	element[1].type = PU_T_ANGLE;
	element[1].text = "Flip Vertical";
	element[1].data.angle[0] = 90;
	element[1].data.angle[1] = 135;

	element[2].type = PU_T_ANGLE;
	element[2].text = "Square";
	element[2].data.angle[0] = 225;
	element[2].data.angle[1] = 270;

	element[3].type = PU_T_ANGLE;
	element[3].text = "Square";
	element[3].data.angle[0] = 270;
	element[3].data.angle[1] = 315;

	element[4].type = PU_T_TOP;
	element[4].text = "Project Front";

	element[5].type = PU_T_TOP;
	element[5].text = "Project Side";

	element[6].type = PU_T_TOP;
	element[6].text = "Project Top";


	if(input->mode == BAM_DRAW)
	{
		glPushMatrix();
		cam = get_cam_pos();
		glTranslatef(-cam[0], -cam[1], cam[2] - 1);
	}
	if(input->mouse_button[2] == TRUE && input->last_mouse_button[2] == FALSE)
	{
		x = input->pointer_x;
		y = input->pointer_y;
	}
	ring = sui_draw_popup(input, x, y, element, 7, 2, 0);
	switch(ring)
	{

		case 0 :
			uv_tool_flip_x();
		break;
		case 1 :
			uv_tool_flip_y();
		break;
		case 2 :
			uv_fit_selection(FALSE);
		break;
		case 3 :
			uv_fit_selection(TRUE);
		break;
		case 4 :
			uv_tool_project(0, 1, FALSE);
		break;
		case 5 :
			uv_tool_project(1, 2, FALSE);
		break;
		case 6 :
			uv_tool_project(0, 2, FALSE);
		break;
	}
	if(input->mode == BAM_DRAW)
		glPopMatrix();
}