|
| 1 | +! truck.f90 |
| 2 | +! |
| 3 | +! Example program that rotates a 3-D model loaded from file. |
| 4 | +! Model (CC0) source: https://kenney.nl/assets/car-kit |
| 5 | +! |
| 6 | +! Author: Philipp Engel |
| 7 | +! Licence: ISC |
| 8 | +program main |
| 9 | + use, intrinsic :: iso_c_binding |
| 10 | + use :: raylib |
| 11 | + use :: raylib_math |
| 12 | + implicit none (type, external) |
| 13 | + |
| 14 | + integer, parameter :: SCREEN_WIDTH = 800 |
| 15 | + integer, parameter :: SCREEN_HEIGHT = 450 |
| 16 | + |
| 17 | + real :: angle |
| 18 | + type(camera3d_type) :: camera |
| 19 | + type(model_type) :: model |
| 20 | + type(vector3_type) :: position |
| 21 | + type(vector3_type) :: rotation |
| 22 | + type(vector3_type) :: scale |
| 23 | + |
| 24 | + call init_window(SCREEN_WIDTH, SCREEN_HEIGHT, 'Fortran + raylib' // c_null_char) |
| 25 | + call set_target_fps(60) |
| 26 | + call disable_cursor() |
| 27 | + |
| 28 | + ! Define camera to look into our 3-D world. |
| 29 | + camera%position = vector3_type(50.0, 50.0, 50.0) |
| 30 | + camera%target = vector3_type(0.0, 0.0, 0.0) |
| 31 | + camera%up = vector3_type(0.0, 1.0, 0.0) |
| 32 | + camera%fov_y = 45.0 |
| 33 | + camera%projection = CAMERA_PERSPECTIVE |
| 34 | + |
| 35 | + model = load_model('share/truck.obj' // c_null_char) |
| 36 | + |
| 37 | + angle = 0.0 |
| 38 | + rotation = vector3_type(0.0, 1.0, 0.0) |
| 39 | + scale = vector3_type(15.0, 15.0, 15.0) |
| 40 | + |
| 41 | + do while (.not. window_should_close()) |
| 42 | + call update_camera(camera, CAMERA_FIRST_PERSON) |
| 43 | + |
| 44 | + angle = modulo(angle + 0.1, 360.0) |
| 45 | + |
| 46 | + call begin_drawing() |
| 47 | + call clear_background(RAYWHITE) |
| 48 | + |
| 49 | + call begin_mode3d(camera) |
| 50 | + call draw_model_ex(model, position, rotation, angle, scale, WHITE) |
| 51 | + call draw_grid(20, 10.0) |
| 52 | + call end_mode3d() |
| 53 | + |
| 54 | + call draw_fps(10, 10) |
| 55 | + call end_drawing() |
| 56 | + end do |
| 57 | + |
| 58 | + call unload_model(model) |
| 59 | + call close_window() |
| 60 | +end program main |
0 commit comments