Skip to content
Snippets Groups Projects
scene.cpp 13.90 KiB
#include "scene.hpp"

#include "tree.hpp"
#include "interpolation.hpp"
#include "ball.hpp"
#include "bird.hpp"
#include "bat.hpp"
#include "terrain.hpp"
#include "projectile.hpp"
#include "sapin.hpp"

using namespace cgp;
int num_trees = 200;
int num_grass = 200;
std::vector<vec3> tree_position;
std::vector<vec3> grass_position;
float terrain_length = 250;

void scene_structure::initialize()
{
	
	camera_control.initialize(inputs, window); // Give access to the inputs and window global state to the camera controler

	//for orbit camera
	//camera_control.set_rotation_axis_z(); 
	//camera_control.look_at({ 20.0f,15.0f,15.0f }, {0,0,0});
	
	//for first person camera
	camera_control.camera_model.position_camera = { 0,0,evaluate_terrain_height(0,0,terrain_length)+10};
	camera_control.camera_model.set_rotation_axis({ 0,0,1 });
	//custum function we added to ..first_person_euler
	global_frame.initialize_data_on_gpu(mesh_primitive_frame());

	//skybox_debug.png for debugging
	image_structure image_skybox_template = image_load_file("assets/skybox2.jpg");
	std::vector<image_structure> image_grid = image_split_grid(image_skybox_template, 4, 3);

	skybox.initialize_data_on_gpu();
	//x neg, x pos, y neg, y pos, z neg, z pos
	skybox.texture.initialize_cubemap_on_gpu(image_grid[7].rotate_90_degrees_counterclockwise(), image_grid[1].rotate_90_degrees_clockwise(), image_grid[4].rotate_90_degrees_clockwise().rotate_90_degrees_clockwise(), image_grid[10], image_grid[3], image_grid[5].rotate_90_degrees_clockwise().rotate_90_degrees_clockwise());



	int N_terrain_samples = 500;
	mesh const terrain_mesh = create_terrain_mesh(N_terrain_samples, terrain_length);
	terrain.initialize_data_on_gpu(terrain_mesh);
	// terrain.material.color = { 0.6f,0.85f,0.5f }; terrain de couleur de base verte
	terrain.material.color = { 1,1,1 };
	terrain.material.phong.specular = 0.0f; // non-specular terrain material

	terrain.shader.load(project::path + "shaders/mesh_multi_texture/mesh_multi_texture.vert.glsl", project::path + "shaders/mesh_multi_texture/mesh_multi_texture.frag.glsl");
	terrain.texture.load_and_initialize_texture_2d_on_gpu(project::path + "assets/texture_grass.jpg",
		GL_REPEAT,
		GL_MIRRORED_REPEAT);
	terrain.supplementary_texture["image_texture_2"].load_and_initialize_texture_2d_on_gpu(project::path + "assets/snow.jpg",
		GL_REPEAT,
		GL_MIRRORED_REPEAT);

	int r = 1;
	int h = 5;
	mesh cyl_mesh = create_cylinder_mesh(r, h);
	cyl.initialize_data_on_gpu(cyl_mesh);
	cyl.material.color = { 0.58f,0.294f,0.0f };
	cyl.material.phong.specular = 0.0f;

	r = 3;
	h = 2;
	int z = 3;
	mesh cone_mesh = create_cone_mesh(r, h, z);
	cone.initialize_data_on_gpu(cone_mesh);