void GFX_ortho( float left, float right, float bottom, float top, float clip_start, float clip_end ) { switch( gfx.matrix_mode ) { case MODELVIEW_MATRIX: { mat4_ortho( GFX_get_modelview_matrix(), left, right, bottom, top, clip_start, clip_end ); break; } case PROJECTION_MATRIX: { mat4_ortho( GFX_get_projection_matrix(), left, right, bottom, top, clip_start, clip_end ); break; } case TEXTURE_MATRIX: { mat4_ortho( GFX_get_texture_matrix(), left, right, bottom, top, clip_start, clip_end ); break; } } }
void display_step(struct s_vm* vm, t_display* display) { t_mat4 screen; glfwGetFramebufferSize(display->window, &display->frame_buffer_width, &display->frame_buffer_height); display->frame_buffer_ratio = (float)display->frame_buffer_width / (float)display->frame_buffer_height; mat4_ident(&screen); mat4_ortho(&screen, 0.0f, (float)display->frame_buffer_width * 0.25f, (float)display->frame_buffer_height * 0.25f, 0.0f, -100.0f, 100.0f); display_update_camera(display); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, display->frame_buffer_width, display->frame_buffer_height); glEnable(GL_BLEND); glDisable(GL_DEPTH_TEST); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); display_render_memory(vm, display); display_render_io_read(vm, display); display_render_io_write(vm, display); glDisable(GL_BLEND); display_render_io_process(vm, display); glEnable(GL_BLEND); // display_text_render(display->texts, &screen); // display_text_clear(display->texts); glfwSwapBuffers(display->window); glfwPollEvents(); }
void camera_update(camera_t *camera) { float size; camera->fovy = 20.; if (camera->move_to_target) { camera->move_to_target = !vec3_ilerp_const( &camera->ofs, vec3_neg(camera->target), camera->dist / 128); } // Update the camera mats camera->view_mat = mat4_identity; mat4_itranslate(&camera->view_mat, 0, 0, -camera->dist); mat4_imul_quat(&camera->view_mat, camera->rot); mat4_itranslate(&camera->view_mat, camera->ofs.x, camera->ofs.y, camera->ofs.z); if (camera->ortho) { size = camera->dist; camera->proj_mat = mat4_ortho( -size, +size, -size / camera->aspect, +size / camera->aspect, 0, 1000); } else { camera->proj_mat = mat4_perspective( camera->fovy, camera->aspect, 1, 1000); } }
void proj_tests(void){ mat4_t m = mat4_look_at(vec4_new(0, 0, 5, 0), vec4_new(0, 0, 0, 0), vec4_new(0, 1, 0, 0)); printf("Look at matrix:\n"); mat4_print(m); m = mat4_ortho(-1, 1, -1, 1, 1, 100); printf("ortho matrix:\n"); mat4_print(m); m = mat4_perspective(90, 1, 1, 100); printf("perspective:\n"); mat4_print(m); }
void display_update_camera(t_display* display) { float width = display->frame_buffer_width * display->display_zoom * 0.5f; float height = display->frame_buffer_height * display->display_zoom * 0.5f; mat4_ident(&display->projection_view); mat4_ortho(&display->projection_view, display->display_center_x - width, display->display_center_x + width, display->display_center_y + height, display->display_center_y - height, 0.0f, 100.0f); }