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); }
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(); }
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(); }
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(); }
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(); }
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(); }