| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #include "../headers/rasteriver.h"
- int main(){
- // get RasterIver context
- RasterIver *ri = RI_get_ri();
- ri->debug_memory = 0;
- RI_init(1000, 1000, "This is RasterIver 2.0!!");
- int running = 1;
- // data for loading files
- char *filenames[] = {"objects/unit_cube.obj", "objects/cow-nonormals.obj", "objects/test_guy.obj", "objects/unit_plane.obj"};
- RI_texture_creation_data texture_creation_info[4] = {{"textures/bill_mcdinner.png", {0, 0}}, {"textures/this is the floor.png", {0, 0}}, {"textures/test_guy_texture.png", {0, 0}}, {"textures/THIS IS THE WALL.png", {0, 0}}};
-
- // requesting assets
- RI_mesh* meshes = RI_request_meshes(4, filenames, 0);
- RI_texture* textures = RI_request_textures(4, texture_creation_info);
- RI_material* materials = RI_request_materials(4);
- RI_actor* actors = RI_request_actors(4);
- RI_scene* scenes = RI_request_scenes(1);
- RI_scene* scene = &scenes[0];
- // meshes
- RI_mesh* unit_plane_mesh = &meshes[3];
- RI_mesh* test_object_mesh = &meshes[0];
- // textures
- RI_texture* test_object_texture = &textures[0];
- RI_texture* floor_texture = &textures[1];
- RI_texture* wall_texture = &textures[3];
- // materials
- RI_material* floor_material = &materials[0];
- floor_material->flags = RI_MATERIAL_HAS_TEXTURE | RI_MATERIAL_DOUBLE_SIDED | RI_MATERIAL_USE_UV_LOOP_MULTIPLIER;
- floor_material->texture_reference = floor_texture;
- floor_material->albedo = 0xFFFFFFFF;
- floor_material->uv_loop_multiplier = (RI_vector_2f){25, 25};
- RI_material* wall_material = &materials[1];
- wall_material->flags = RI_MATERIAL_DOUBLE_SIDED | RI_MATERIAL_HAS_TEXTURE | RI_MATERIAL_USE_UV_RENDER_RESOLUTION;
- wall_material->albedo = 0xFF7777FF;
- wall_material->texture_reference = wall_texture;
- wall_material->texture_render_size = (RI_vector_2f){25, 50};
- RI_material* test_object_material = &materials[2];
- test_object_material->flags = RI_MATERIAL_HAS_TEXTURE;
- test_object_material->texture_reference = test_object_texture;
- test_object_material->albedo = 0xFFFFFFF;
- test_object_material->wireframe_width = 0.1;
- RI_material* screen_material = &materials[3];
- screen_material->flags = RI_MATERIAL_HAS_TEXTURE | RI_MATERIAL_DOUBLE_SIDED;
- screen_material->texture_reference = ri->frame_buffer;
- screen_material->albedo = 0xFFFFFFFF;
- // actors
- RI_actor* floor = &actors[0];
- floor->material_reference = floor_material;
- floor->mesh_reference = unit_plane_mesh;
- floor->transform.scale = (RI_vector_3f){1000, 100, 1000};
- floor->transform.position = (RI_vector_3f){0, -100, 200};
- floor->transform.rotation = (RI_vector_4f){0, 1, 0, 0};
- RI_actor* wall = &actors[1];
- wall->material_reference = wall_material;
- wall->mesh_reference = unit_plane_mesh;
- wall->transform.scale = (RI_vector_3f){100, 100, 100};
- wall->transform.position = (RI_vector_3f){0, 0, 300};
- wall->transform.rotation = (RI_vector_4f){0.70710678, 0.70710678, 0, 0};
- RI_actor* test_object = &actors[2];
- test_object->material_reference = test_object_material;
- test_object->mesh_reference = test_object_mesh;
- test_object->transform.scale = (RI_vector_3f){50, 50, 50};
- test_object->transform.position = (RI_vector_3f){-50, 100, 100};
- test_object->transform.rotation = (RI_vector_4f){0, 1, 0, 0};
- RI_actor* screen = &actors[3];
- screen->material_reference = screen_material;
- screen->mesh_reference = unit_plane_mesh;
- screen->transform.scale = (RI_vector_3f){50, 50, 50};
- screen->transform.position = (RI_vector_3f){0, 0, 250};
- screen->transform.rotation = (RI_vector_4f){0, 1, 0, 0};
- RI_add_actors_to_scene(4, actors, scene);
- scene->FOV = 1.5; // 90 degrees in radians
- scene->minimum_clip_distance = 0.1;
- RI_euler_rotation_to_quaternion(&scene->camera_rotation, (RI_vector_3f){0, 0, 0});
- double y_rotation = 0;
- scene->antialiasing_subsample_resolution = 8;
- scene->flags = RI_SCENE_DONT_USE_AA;
- while (running){
- test_object->transform.position = (RI_vector_3f){sin(ri->frame * 0.1) * 50 - 100, sin(ri->frame * 0.2 + 0.4) * 50, sin(ri->frame * 0.1) * 10 + 200};
- RI_euler_rotation_to_quaternion(&screen->transform.rotation, (RI_vector_3f){-3.14159 / 2, 0, ri->frame * 0.03});
- // scene->camera_position = (RI_vector_3f){cos(ri->frame * 0.07) * 10 * sin(ri->frame * 0.2), sin(ri->frame * 0.07) * 10 * sin(ri->frame * 0.2), -300};
- scene->camera_position = (RI_vector_3f){0, 0, -300};
-
- wall->transform.scale.x = fabs(sin(y_rotation)) * 100 + 70;
- // RI_euler_rotation_to_quaternion(&scene->camera_rotation, (RI_vector_3f){0, y_rotation * .01 + 1.5, 0});
- // RI_euler_rotation_to_quaternion(&floor->transform.rotation, (RI_vector_3f){0, y_rotation, 0});
-
- RI_euler_rotation_to_quaternion(&test_object->transform.rotation, (RI_vector_3f){y_rotation, y_rotation, y_rotation});
- // RI_euler_rotation_to_quaternion(&test_object->transform.rotation, (RI_vector_3f){0, y_rotation, 0});
- y_rotation += 0.1;
- RI_render(scene, ri->frame_buffer);
- RI_tick();
- }
- }
|