simplifying
1. bind `m` to reset speed multiplier 2. using an object_t struct 3. get object parameters from a file 4. draw all planets and moons in one loop
This commit is contained in:
		
							parent
							
								
									93afaab0c3
								
							
						
					
					
						commit
						34e979895e
					
				
							
								
								
									
										28
									
								
								vars.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								vars.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
			
		||||
0 24.5 0 1 0 1 0 2 0 0 0
 | 
			
		||||
1 87.97 0 1 4.2 1 0 0.0881 59.0 0 1
 | 
			
		||||
1 224.7 0 1 7.9 1 0 0.177 243.75 -0.1773 -1
 | 
			
		||||
1 364.2425 0 1 10 1 0 0.185 1 -0.234 1
 | 
			
		||||
2 1 0 0 4.0 0 0 0.2 1 0 0
 | 
			
		||||
1 686.98 0 1 15.2 1 0 0.096 1.0416 -0.252 1
 | 
			
		||||
2 0.2325 0 0.1 10 0 0 0.2 0 0 0
 | 
			
		||||
2 1.5 0 0.1 25 0 0 0.1666 0 0 0
 | 
			
		||||
1 4382.91 0 1 30 1 0 2.062 0.416 -0.031 1
 | 
			
		||||
2 0.33 0 0.1 1 0 1 0.0893 0 0 0
 | 
			
		||||
2 2 0 0.1 -2.0 0 -1 0.076 0 0 0
 | 
			
		||||
2 3 0 0.1 -3 0 -1.5 0.111 0 0 0
 | 
			
		||||
2 5 0 0.1 4 0 0 0.2 0 0 0
 | 
			
		||||
1 10957.275 0 1 50.4 1 0 1.7544 0.4583 -0.267 1
 | 
			
		||||
2 0.2 0 0.1 1 0 -1 0.05 0 0 0
 | 
			
		||||
2 0.244 0 0.1 -2 0 -0.5 0.0556 0 0 0
 | 
			
		||||
2 0.3125 0 0.1 3 0 -2.5 0.0667 0 0 0
 | 
			
		||||
2 4.3 0 0.1 -4.0 0 -2.2 0.1 0 0 0
 | 
			
		||||
2 6.3 0 0.1 5 0 0 0.0714 0 0 0
 | 
			
		||||
1 30680.37 0 1 65 1 0 0.7463 0.7083 -0.978 0
 | 
			
		||||
2 1 0.01 0 0 3 -2.2 0.05 0 0 0
 | 
			
		||||
2 2 0.01 0 0 -4 -1.2 0.05 0 0 0
 | 
			
		||||
2 5 0.01 0 0 5.0 0 0.0588 0 0 0
 | 
			
		||||
2 7 0.01 0 0 6 -4.4 0.0588 0 0 0
 | 
			
		||||
1 60265.0125 0 1 75 1 0 0.722 0.6 -0.283 1
 | 
			
		||||
2 5 0 0.01 3 0 0 0.1 0 0 0
 | 
			
		||||
1 90580.14 0 1 85 1 0 0.03994 6.4 -0.119 1
 | 
			
		||||
2 5 0 0.01 3 0 0 0.0769 0 0 0
 | 
			
		||||
							
								
								
									
										351
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										351
									
								
								window.c
									
									
									
									
									
								
							@ -33,18 +33,14 @@ static void draw_object(float * nmv, float * projMat, surface_t * obj,
 | 
			
		||||
						float ma, float mx, float my,
 | 
			
		||||
						float tx, float ty, float tz, float s,
 | 
			
		||||
						float ra, float rx, float ry);
 | 
			
		||||
static void get_params(void);
 | 
			
		||||
static int get_sign(float x, float y);
 | 
			
		||||
 | 
			
		||||
/*!\brief un identifiant pour l'écran (de dessin) */
 | 
			
		||||
static uint _screenId = 0;
 | 
			
		||||
 | 
			
		||||
// surface representing the Sun.
 | 
			
		||||
static surface_t * _sun;
 | 
			
		||||
 | 
			
		||||
// surface array representing 8 planets + pluto (dwarf planet).
 | 
			
		||||
static surface_t * _planet[9]; 
 | 
			
		||||
// surface array representing 18 moons of the planets.
 | 
			
		||||
static surface_t * _moon[18];
 | 
			
		||||
// obj contains all planets, the Sun, Pluto, all the moons and their parameters.
 | 
			
		||||
static object_t _obj[28];
 | 
			
		||||
 | 
			
		||||
/* des variable d'états pour activer/désactiver des options de rendu */
 | 
			
		||||
static int _use_tex = 1, _use_color = 0, _use_lighting = 1;
 | 
			
		||||
@ -115,7 +111,7 @@ int main(int argc, char ** argv) {
 | 
			
		||||
/*!\brief init de nos données, spécialement les trois surfaces
 | 
			
		||||
 * utilisées dans ce code */
 | 
			
		||||
void init(void) {
 | 
			
		||||
	uint id[9], sun_id, i, moon_id[18];
 | 
			
		||||
	uint id[28], i;
 | 
			
		||||
	int flags, initted;
 | 
			
		||||
 | 
			
		||||
	flags 	= MIX_INIT_MP3;
 | 
			
		||||
@ -136,71 +132,71 @@ void init(void) {
 | 
			
		||||
		fprintf(stderr, "Mix_PlayChannel: %s\n", Mix_GetError());
 | 
			
		||||
 | 
			
		||||
	// create all spheres.
 | 
			
		||||
	_sun = mkSphere(12, 12);  /*ça fait 12x12x2 triangles !*/
 | 
			
		||||
	for (i = 0; i < 18; ++i) {
 | 
			
		||||
		_moon[i] = mkSphere(12, 12);
 | 
			
		||||
		if (i < 9)
 | 
			
		||||
			_planet[i] = mkSphere(12, 12);
 | 
			
		||||
	for (i = 0; i < 28; ++i) {
 | 
			
		||||
		_obj[i].s = mkSphere(12, 12);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// get all textures.
 | 
			
		||||
	sun_id 	= getTexFromBMP("images/2k-sun.bmp");
 | 
			
		||||
	id[0] 	= getTexFromBMP("images/2k-mercury.bmp");
 | 
			
		||||
	id[1] 	= getTexFromBMP("images/2k-venus-surface.bmp");
 | 
			
		||||
	id[2] 	= getTexFromBMP("images/2k-earth-daymap.bmp");
 | 
			
		||||
	id[3] 	= getTexFromBMP("images/2k-mars.bmp");
 | 
			
		||||
	id[4] 	= getTexFromBMP("images/2k-jupiter.bmp");
 | 
			
		||||
	id[5] 	= getTexFromBMP("images/2k-saturn.bmp");
 | 
			
		||||
	id[6] 	= getTexFromBMP("images/2k-uranus.bmp");
 | 
			
		||||
	id[7] 	= getTexFromBMP("images/2k-neptune.bmp");
 | 
			
		||||
	id[8] 	= getTexFromBMP("images/pluto.bmp");
 | 
			
		||||
	id[0] 	= getTexFromBMP("images/2k-sun.bmp");
 | 
			
		||||
	id[1] 	= getTexFromBMP("images/2k-mercury.bmp");
 | 
			
		||||
	id[2] 	= getTexFromBMP("images/2k-venus-surface.bmp");
 | 
			
		||||
	id[3] 	= getTexFromBMP("images/2k-earth-daymap.bmp");
 | 
			
		||||
	id[4] 	= getTexFromBMP("images/2k-moon.bmp");
 | 
			
		||||
	id[5] 	= getTexFromBMP("images/2k-mars.bmp");
 | 
			
		||||
	id[6] 	= getTexFromBMP("images/moons/phobos.bmp");
 | 
			
		||||
	id[7] 	= getTexFromBMP("images/moons/deimos.bmp");
 | 
			
		||||
	id[8] 	= getTexFromBMP("images/2k-jupiter.bmp");
 | 
			
		||||
	id[9] 	= getTexFromBMP("images/moons/io.bmp");
 | 
			
		||||
	id[10] 	= getTexFromBMP("images/moons/europa.bmp");
 | 
			
		||||
	id[11] 	= getTexFromBMP("images/moons/ganymede.bmp");
 | 
			
		||||
	id[12] 	= getTexFromBMP("images/moons/callisto.bmp");
 | 
			
		||||
	id[13] 	= getTexFromBMP("images/2k-saturn.bmp");
 | 
			
		||||
	id[14] 	= getTexFromBMP("images/moons/enceladus.bmp");
 | 
			
		||||
	id[15] 	= getTexFromBMP("images/moons/dione.bmp");
 | 
			
		||||
	id[16] 	= getTexFromBMP("images/moons/rhea.bmp");
 | 
			
		||||
	id[17] 	= getTexFromBMP("images/moons/titan.bmp");
 | 
			
		||||
	id[18] 	= getTexFromBMP("images/moons/iapetus.bmp");
 | 
			
		||||
	id[19] 	= getTexFromBMP("images/2k-uranus.bmp");
 | 
			
		||||
	id[20] 	= getTexFromBMP("images/moons/ariel.bmp");
 | 
			
		||||
	id[21] 	= getTexFromBMP("images/moons/umbriel.bmp");
 | 
			
		||||
	id[22] 	= getTexFromBMP("images/moons/titania.bmp");
 | 
			
		||||
	id[23] 	= getTexFromBMP("images/moons/oberon.bmp");
 | 
			
		||||
	id[24] 	= getTexFromBMP("images/2k-neptune.bmp");
 | 
			
		||||
	id[25] 	= getTexFromBMP("images/moons/triton.bmp");
 | 
			
		||||
	id[26] 	= getTexFromBMP("images/pluto.bmp");
 | 
			
		||||
	id[27] 	= getTexFromBMP("images/moons/charon.bmp");
 | 
			
		||||
	// https://upload.wikimedia.org/wikipedia/commons/4/4f/Moons_of_solar_system_v7.jpg
 | 
			
		||||
	// most of the biggest moons are here.
 | 
			
		||||
	moon_id[0] 	= getTexFromBMP("images/2k-moon.bmp");
 | 
			
		||||
	moon_id[1] 	= getTexFromBMP("images/moons/phobos.bmp");
 | 
			
		||||
	moon_id[2] 	= getTexFromBMP("images/moons/deimos.bmp");
 | 
			
		||||
	moon_id[3] 	= getTexFromBMP("images/moons/io.bmp");
 | 
			
		||||
	moon_id[4] 	= getTexFromBMP("images/moons/europa.bmp");
 | 
			
		||||
	moon_id[5] 	= getTexFromBMP("images/moons/ganymede.bmp");
 | 
			
		||||
	moon_id[6] 	= getTexFromBMP("images/moons/callisto.bmp");
 | 
			
		||||
	moon_id[7] 	= getTexFromBMP("images/moons/enceladus.bmp");
 | 
			
		||||
	moon_id[8] 	= getTexFromBMP("images/moons/dione.bmp");
 | 
			
		||||
	moon_id[9] 	= getTexFromBMP("images/moons/rhea.bmp");
 | 
			
		||||
	moon_id[10] = getTexFromBMP("images/moons/titan.bmp");
 | 
			
		||||
	moon_id[11] = getTexFromBMP("images/moons/iapetus.bmp");
 | 
			
		||||
	moon_id[12] = getTexFromBMP("images/moons/ariel.bmp");
 | 
			
		||||
	moon_id[13] = getTexFromBMP("images/moons/umbriel.bmp");
 | 
			
		||||
	moon_id[14] = getTexFromBMP("images/moons/titania.bmp");
 | 
			
		||||
	moon_id[15] = getTexFromBMP("images/moons/oberon.bmp");
 | 
			
		||||
	moon_id[16] = getTexFromBMP("images/moons/triton.bmp");
 | 
			
		||||
	moon_id[17] = getTexFromBMP("images/moons/charon.bmp");
 | 
			
		||||
 | 
			
		||||
	// set texture to an object id and set all options.
 | 
			
		||||
	setTexId(_sun, sun_id);
 | 
			
		||||
	if (_use_tex)
 | 
			
		||||
		enableSurfaceOption(_sun, SO_USE_TEXTURE);
 | 
			
		||||
	if (_use_lighting)
 | 
			
		||||
		enableSurfaceOption(_sun, SO_USE_LIGHTING);
 | 
			
		||||
	disableSurfaceOption(_sun, SO_USE_COLOR);
 | 
			
		||||
	for (i = 0; i < 18; ++i) {
 | 
			
		||||
		setTexId(_moon[i], moon_id[i]);
 | 
			
		||||
		disableSurfaceOption(_moon[i], SO_USE_COLOR);
 | 
			
		||||
	for (i = 0; i < 28; ++i) {
 | 
			
		||||
		setTexId(_obj[i].s, id[i]);
 | 
			
		||||
		disableSurfaceOption(_obj[i].s, SO_USE_COLOR);
 | 
			
		||||
		if (_use_tex)
 | 
			
		||||
			enableSurfaceOption(_moon[i], SO_USE_TEXTURE);
 | 
			
		||||
			enableSurfaceOption(_obj[i].s, SO_USE_TEXTURE);
 | 
			
		||||
		if (_use_lighting)
 | 
			
		||||
			enableSurfaceOption(_moon[i], SO_USE_LIGHTING);
 | 
			
		||||
		if (i < 9) {
 | 
			
		||||
			setTexId(_planet[i], id[i]);
 | 
			
		||||
			disableSurfaceOption(_planet[i], SO_USE_COLOR);
 | 
			
		||||
			if (_use_tex)
 | 
			
		||||
				enableSurfaceOption(_planet[i], SO_USE_TEXTURE);
 | 
			
		||||
			if (_use_lighting)
 | 
			
		||||
				enableSurfaceOption(_planet[i], SO_USE_LIGHTING);
 | 
			
		||||
		}
 | 
			
		||||
			enableSurfaceOption(_obj[i].s, SO_USE_LIGHTING);
 | 
			
		||||
	}
 | 
			
		||||
	get_params();
 | 
			
		||||
	atexit(sortie);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void get_params(void) {
 | 
			
		||||
	int i;
 | 
			
		||||
	FILE * f;
 | 
			
		||||
	f = fopen("vars.txt", "r");
 | 
			
		||||
	for (i = 0; i < 28; ++i) {
 | 
			
		||||
		fscanf(f, "%d %f %f %f %f %f %f %f %f %f %f", &_obj[i].id,
 | 
			
		||||
				&_obj[i].vars[0], &_obj[i].vars[1], &_obj[i].vars[2], &_obj[i].vars[3], &_obj[i].vars[4],
 | 
			
		||||
				&_obj[i].vars[5], &_obj[i].vars[6], &_obj[i].vars[7], &_obj[i].vars[8], &_obj[i].vars[9]);
 | 
			
		||||
		// debug
 | 
			
		||||
		/*fprintf(stderr, "%d %f %f %f %f %f %f %f %f %f %f\n", _obj[i].id,
 | 
			
		||||
				_obj[i].vars[0], _obj[i].vars[1], _obj[i].vars[2], _obj[i].vars[3], _obj[i].vars[4],
 | 
			
		||||
				_obj[i].vars[5], _obj[i].vars[6], _obj[i].vars[7], _obj[i].vars[8], _obj[i].vars[9]);*/
 | 
			
		||||
	}
 | 
			
		||||
	fclose(f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// get sign for further move calculation.
 | 
			
		||||
static int get_sign(float x, float y) {
 | 
			
		||||
	if (x > y)
 | 
			
		||||
@ -227,53 +223,53 @@ static void goto_obj(float * mvMat) {
 | 
			
		||||
	switch (_p) {
 | 
			
		||||
		case 1: // MERCURY
 | 
			
		||||
			_a = 0; // reset angle to 0.
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, 4.2f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(4.2f, 1.0f, 0.5f);
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, _obj[1].vars[3], _obj[1].vars[4], _obj[1].vars[5], 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(_obj[1].vars[3], _obj[1].vars[4], 0.5f);
 | 
			
		||||
			break;
 | 
			
		||||
		case 2: // VENUS
 | 
			
		||||
			_a = 0;
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, 7.9f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(7.9f, 1.0f, 1.0f);
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, _obj[2].vars[3], _obj[2].vars[4], _obj[2].vars[5], 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(_obj[2].vars[3], _obj[2].vars[4], 1.0f);
 | 
			
		||||
			break;
 | 
			
		||||
		case 3: // EARTH
 | 
			
		||||
			_a = 0;
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, 10.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(10.0f, 1.0f, 1.0f);
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, _obj[3].vars[3], _obj[3].vars[4], _obj[3].vars[5], 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(_obj[3].vars[3], _obj[3].vars[4], 1.0f);
 | 
			
		||||
			break;
 | 
			
		||||
		case 4: // MARS
 | 
			
		||||
			_a = 0;
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, 15.2f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(15.2f, 1.0f, 0.5f);
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, _obj[5].vars[3], _obj[5].vars[4], _obj[5].vars[5], 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(_obj[5].vars[3], _obj[5].vars[4], 0.5f);
 | 
			
		||||
			break;
 | 
			
		||||
		case 5: // JUPITER
 | 
			
		||||
			_a = 0;
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, 30.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(30.0f, 1.0f, 5.0f);
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, _obj[8].vars[3], _obj[8].vars[4], _obj[8].vars[5], 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(_obj[8].vars[3], _obj[8].vars[4], 8.0f);
 | 
			
		||||
			break;
 | 
			
		||||
		case 6: // SATURN
 | 
			
		||||
			_a = 0;
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, 50.4f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(50.4f, 1.0f, 5.0f);
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, _obj[13].vars[3], _obj[13].vars[4], _obj[13].vars[5], 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(_obj[13].vars[3], _obj[13].vars[4], 8.0f);
 | 
			
		||||
			break;
 | 
			
		||||
		case 7: // URANUS
 | 
			
		||||
			_a = 0;
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, 65.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(65.0f, 1.0f, 5.0f);
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, _obj[19].vars[3], _obj[19].vars[4], _obj[19].vars[5], 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(_obj[19].vars[3], _obj[19].vars[4], 5.0f);
 | 
			
		||||
			break;
 | 
			
		||||
		case 8: // NEPTUNE
 | 
			
		||||
			_a = 0;
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, 75.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(75.0f, 1.0f, 4.0f);
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, _obj[24].vars[3], _obj[24].vars[4], _obj[24].vars[5], 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(_obj[24].vars[3], _obj[24].vars[4], 4.0f);
 | 
			
		||||
			break;
 | 
			
		||||
		case 9: // PLUTO
 | 
			
		||||
			_a = 0;
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, 85.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(85.0f, 1.0f, 0.1f);
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, _obj[26].vars[3], _obj[26].vars[4], _obj[26].vars[5], 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(_obj[26].vars[3], _obj[26].vars[4], 0.4f);
 | 
			
		||||
			break;
 | 
			
		||||
		case 0: // SUN
 | 
			
		||||
			_a = 0;
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, 0, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(0.0f, 1.0f, 10.0f);
 | 
			
		||||
			lookAt(mvMat, _cam.x, _cam.y, _cam.z, _obj[0].vars[3], _obj[0].vars[4], _obj[0].vars[5], 0.0f, 1.0f, 0.0f);
 | 
			
		||||
			move_to(_obj[0].vars[3], _obj[0].vars[4], 10.0f);
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -292,10 +288,12 @@ static void draw_object(float * nmv, float * projMat, surface_t * obj,
 | 
			
		||||
/*!\brief la fonction appelée à chaque display. */
 | 
			
		||||
void draw(void) {
 | 
			
		||||
	static double t0 = 0, t, dt;
 | 
			
		||||
	t = gl4dGetElapsedTime();
 | 
			
		||||
	dt = (t - t0) / 1000.0;
 | 
			
		||||
	t0 = t;
 | 
			
		||||
	int i;
 | 
			
		||||
	float mvMat[16], projMat[16], nmv[16], cpy[16];
 | 
			
		||||
 | 
			
		||||
	t 	= gl4dGetElapsedTime();
 | 
			
		||||
	dt 	= (t - t0) / 1000.0;
 | 
			
		||||
	t0 	= t;
 | 
			
		||||
	/* effacer l'écran et le buffer de profondeur */
 | 
			
		||||
	gl4dpClearScreen();
 | 
			
		||||
	clearDepth();
 | 
			
		||||
@ -315,114 +313,24 @@ void draw(void) {
 | 
			
		||||
 | 
			
		||||
	// SUN
 | 
			
		||||
	memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */
 | 
			
		||||
	draw_object(nmv, projMat, _sun, _r/24.5f, 0, 1, 0, 1, 0, 2, 0, 0, 0);
 | 
			
		||||
	// MERCURY
 | 
			
		||||
	memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */
 | 
			
		||||
	draw_object(nmv, projMat, _planet[0], _a/87.97f, 0, 1, 4.2f, 1, 0, (2/227.0f)*10, _r/59.0f, 0, 1);
 | 
			
		||||
	draw_object(nmv, projMat, _obj[0].s, _r/_obj[0].vars[0], _obj[0].vars[1], _obj[0].vars[2], _obj[0].vars[3],
 | 
			
		||||
			_obj[0].vars[4], _obj[0].vars[5], _obj[0].vars[6], _obj[0].vars[7], _obj[0].vars[8], _obj[0].vars[9]);
 | 
			
		||||
 | 
			
		||||
	// VENUS
 | 
			
		||||
	memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */
 | 
			
		||||
	draw_object(nmv, projMat, _planet[1], _a/224.7f, 0, 1, 7.9f, 1, 0, (2/113.0f)*10, _r/243.75f, -0.1773f, -1);
 | 
			
		||||
 | 
			
		||||
	// EARTH
 | 
			
		||||
	memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */
 | 
			
		||||
	draw_object(nmv, projMat, _planet[2], _a/365.2425f, 0, 1, 10.0f, 1, 0, (2/108.0f)*10, _r, -0.234f, 1);
 | 
			
		||||
 | 
			
		||||
	// Moon
 | 
			
		||||
	draw_object(nmv, projMat, _moon[0], 1, 0, 0, 4.0f, 0, 0, (1/5.0f), 1, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// MARS
 | 
			
		||||
	memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */
 | 
			
		||||
	draw_object(nmv, projMat, _planet[3], _a/686.98f, 0, 1, 15.2f, 1, 0, (2/208.0f)*10, _r/1.0416f, -0.252f, 1);
 | 
			
		||||
 | 
			
		||||
	memcpy(cpy, nmv, sizeof cpy);
 | 
			
		||||
 | 
			
		||||
	// Phobos
 | 
			
		||||
	draw_object(nmv, projMat, _moon[1], _r*4.3f, 0, 0.1f, 10.0f, 0, 0, (1/5.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Deimos
 | 
			
		||||
	draw_object(cpy, projMat, _moon[2], _r/1.5f, 0, 0.1f, 25.0f, 0, 0, (1/6.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// JUPITER
 | 
			
		||||
	memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */
 | 
			
		||||
	draw_object(nmv, projMat, _planet[4], _a/(12 * 365.2425f), 0, 1, 30.0f, 1, 0, (2/9.7f)*10, _r/0.416f, -0.031f, 1);
 | 
			
		||||
 | 
			
		||||
	memcpy(cpy, nmv, sizeof cpy);
 | 
			
		||||
 | 
			
		||||
	// Io
 | 
			
		||||
	draw_object(nmv, projMat, _moon[3], _r*3.0f, 0, 0.1f, 1.0f, 0, 1, (1/11.2f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Europa
 | 
			
		||||
	memcpy(nmv, cpy, sizeof nmv);
 | 
			
		||||
	draw_object(nmv, projMat, _moon[4], _r/2.0f, 0, 0.1f, -2.0f, 0, -1, (1/13.2f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Ganymede
 | 
			
		||||
	memcpy(nmv, cpy, sizeof nmv);
 | 
			
		||||
	draw_object(nmv, projMat, _moon[5], _r/3.0f, 0, 0.1f, -3.0f, 0, -1.5f, (1/9.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Callisto
 | 
			
		||||
	memcpy(nmv, cpy, sizeof nmv);
 | 
			
		||||
	draw_object(nmv, projMat, _moon[6], _r/5.0f, 0, 0.1f, 4.0f, 0, 0, (1/10.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// SATURN
 | 
			
		||||
	memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */
 | 
			
		||||
	draw_object(nmv, projMat, _planet[5], _a/(30 * 365.2425f), 0, 1, 50.4f, 1, 0, (2/11.4f)*10, _r/0.4583f, -0.267f, 1);
 | 
			
		||||
 | 
			
		||||
	memcpy(cpy, nmv, sizeof cpy);
 | 
			
		||||
 | 
			
		||||
	// Enceladus
 | 
			
		||||
	draw_object(nmv, projMat, _moon[7], _r*5.0f, 0, 0.1f, 1.0f, 0, -1.0f, (1/20.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Dione
 | 
			
		||||
	memcpy(nmv, cpy, sizeof nmv);
 | 
			
		||||
	draw_object(nmv, projMat, _moon[8], _r*4.1f, 0, 0.1f, -2.0f, 0, -0.5f, (1/18.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Rhea
 | 
			
		||||
	memcpy(nmv, cpy, sizeof nmv);
 | 
			
		||||
	draw_object(nmv, projMat, _moon[9], _r*3.2f, 0, 0.1f, 3.0f, 0, -2.5f, (1/15.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Titan
 | 
			
		||||
	memcpy(nmv, cpy, sizeof nmv);
 | 
			
		||||
	draw_object(nmv, projMat, _moon[10], _r/4.3f, 0, 0.1f, -4.0f, 0, -2.2f, (1/10.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Iapetus
 | 
			
		||||
	memcpy(nmv, cpy, sizeof nmv);
 | 
			
		||||
	draw_object(nmv, projMat, _moon[11], _r/6.3f, 0, 0.1f, 5.0f, 0, 0, (1/14.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// URANUS
 | 
			
		||||
	memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */
 | 
			
		||||
	draw_object(nmv, projMat, _planet[6], _a/(84 * 365.2425f), 0, 1, 65.0f, 1, 0, (2/26.8f)*10, _r/0.7083f, -0.978f, 0);
 | 
			
		||||
 | 
			
		||||
	memcpy(cpy, nmv, sizeof cpy);
 | 
			
		||||
 | 
			
		||||
	// Ariel
 | 
			
		||||
	draw_object(nmv, projMat, _moon[12], _r, 0.01f, 0, 0, 3.0f, -2.2f, (1/20.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Umbriel
 | 
			
		||||
	memcpy (nmv, cpy, sizeof nmv);
 | 
			
		||||
	draw_object(nmv, projMat, _moon[13], _r/2.0f, 0.01f, 0, 0, -4.0f, -1.2f, (1/20.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Titania
 | 
			
		||||
	memcpy (nmv, cpy, sizeof nmv);
 | 
			
		||||
	draw_object(nmv, projMat, _moon[14], _r/5.0f, 0.01f, 0, 0, 5.0f, 0, (1/17.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// Oberon
 | 
			
		||||
	memcpy (nmv, cpy, sizeof nmv);
 | 
			
		||||
	draw_object(nmv, projMat, _moon[15], _r/7.0f, 0.01f, 0, 0, 6.0f, -4.4f, (1/17.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// NEPTUNE
 | 
			
		||||
	memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */
 | 
			
		||||
	draw_object(nmv, projMat, _planet[7], _a/(165 * 365.2425f), 0, 1, 75.0f, 1, 0, (2/27.7f)*10, _r/0.6f, -0.283f, 1.0f);
 | 
			
		||||
 | 
			
		||||
	// Triton
 | 
			
		||||
	draw_object(nmv, projMat, _moon[16], _r/5.0f, 0, 0.01f, 3.0f, 0.0f, 0.0f, (1/10.0f), 0, 0, 0);
 | 
			
		||||
 | 
			
		||||
	// PLUTO
 | 
			
		||||
	memcpy(nmv, mvMat, sizeof nmv); /* copie mvMat dans nmv */
 | 
			
		||||
	draw_object(nmv, projMat, _planet[8], _a/(248 * 365.2425f), 0, 1, 85.0f, 1, 0, (2/500.7f)*10, _r/6.4f, -0.119f, 1.0f);
 | 
			
		||||
 | 
			
		||||
	// Charon
 | 
			
		||||
	draw_object(nmv, projMat, _moon[17], _r/5.0f, 0, 0.01f, 3.0f, 0.0f, 0.0f, (1/13.0f), 0, 0, 0);
 | 
			
		||||
	for (i = 1; i < 28; ++i) {
 | 
			
		||||
		if(_obj[i].id == 1) { // if object is a planet
 | 
			
		||||
			memcpy(nmv, mvMat, sizeof nmv);
 | 
			
		||||
			draw_object(nmv, projMat, _obj[i].s, _a/_obj[i].vars[0], _obj[i].vars[1], _obj[i].vars[2], _obj[i].vars[3],
 | 
			
		||||
					_obj[i].vars[4], _obj[i].vars[5], _obj[i].vars[6], _r/_obj[i].vars[7], _obj[i].vars[8], _obj[i].vars[9]);
 | 
			
		||||
			if (i <= 27) {
 | 
			
		||||
				if (_obj[i+1].id == 2)
 | 
			
		||||
					memcpy(cpy, nmv, sizeof cpy);
 | 
			
		||||
			}
 | 
			
		||||
		} else if (_obj[i].id == 2) { // if object is a moon
 | 
			
		||||
			memcpy(nmv, cpy, sizeof nmv);
 | 
			
		||||
			draw_object(nmv, projMat, _obj[i].s, _r/_obj[i].vars[0], _obj[i].vars[1], _obj[i].vars[2], _obj[i].vars[3],
 | 
			
		||||
					_obj[i].vars[4], _obj[i].vars[5], _obj[i].vars[6], _obj[i].vars[7], _obj[i].vars[8], _obj[i].vars[9]);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* déclarer qu'on a changé (en bas niveau) des pixels du screen  */
 | 
			
		||||
	gl4dpScreenHasChanged();
 | 
			
		||||
@ -518,6 +426,9 @@ void key(int keycode) {
 | 
			
		||||
			_movement = 1;
 | 
			
		||||
			_overview = 0;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL4DK_m:
 | 
			
		||||
			_s = 1;
 | 
			
		||||
			break;
 | 
			
		||||
		case GL4DK_q:
 | 
			
		||||
			exit(0);
 | 
			
		||||
			break;
 | 
			
		||||
@ -614,54 +525,36 @@ void key(int keycode) {
 | 
			
		||||
		case GL4DK_t: /* 't' la texture */
 | 
			
		||||
			_use_tex = !_use_tex;
 | 
			
		||||
			if(_use_tex) {
 | 
			
		||||
				enableSurfaceOption(_sun, SO_USE_TEXTURE);
 | 
			
		||||
				for (i = 0; i < 18; ++i) {
 | 
			
		||||
					enableSurfaceOption(_moon[i], SO_USE_TEXTURE);
 | 
			
		||||
					if (i < 9)
 | 
			
		||||
						enableSurfaceOption(_planet[i], SO_USE_TEXTURE);
 | 
			
		||||
				for (i = 0; i < 28; ++i) {
 | 
			
		||||
					enableSurfaceOption(_obj[i].s, SO_USE_TEXTURE);
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				disableSurfaceOption(_sun, SO_USE_TEXTURE);
 | 
			
		||||
				for (i = 0; i < 18; ++i) {
 | 
			
		||||
					disableSurfaceOption(_moon[i], SO_USE_TEXTURE);
 | 
			
		||||
					if (i < 9)
 | 
			
		||||
						disableSurfaceOption(_planet[i], SO_USE_TEXTURE);
 | 
			
		||||
				for (i = 0; i < 28; ++i) {
 | 
			
		||||
					disableSurfaceOption(_obj[i].s, SO_USE_TEXTURE);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case GL4DK_c: /* 'c' utiliser la couleur */
 | 
			
		||||
			_use_color = !_use_color;
 | 
			
		||||
			if(_use_color) {
 | 
			
		||||
				enableSurfaceOption(_sun, SO_USE_COLOR);
 | 
			
		||||
				for (i = 0; i < 18; ++i) {
 | 
			
		||||
					enableSurfaceOption(_moon[i], SO_USE_COLOR);
 | 
			
		||||
					if (i < 9)
 | 
			
		||||
						enableSurfaceOption(_planet[i], SO_USE_COLOR);
 | 
			
		||||
				for (i = 0; i < 28; ++i) {
 | 
			
		||||
					enableSurfaceOption(_obj[i].s, SO_USE_COLOR);
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				disableSurfaceOption(_sun, SO_USE_COLOR);
 | 
			
		||||
				for (i = 0; i < 18; ++i) {
 | 
			
		||||
					disableSurfaceOption(_moon[i], SO_USE_COLOR);
 | 
			
		||||
					if (i < 9)
 | 
			
		||||
						disableSurfaceOption(_planet[i], SO_USE_COLOR);
 | 
			
		||||
				for (i = 0; i < 28; ++i) {
 | 
			
		||||
					disableSurfaceOption(_obj[i].s, SO_USE_COLOR);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case GL4DK_l: /* 'l' utiliser l'ombrage par la méthode Gouraud */
 | 
			
		||||
			_use_lighting = !_use_lighting;
 | 
			
		||||
			if(_use_lighting) {
 | 
			
		||||
				enableSurfaceOption(_sun, SO_USE_LIGHTING);
 | 
			
		||||
				for (i = 0; i < 18; ++i) {
 | 
			
		||||
					enableSurfaceOption(_moon[i], SO_USE_LIGHTING);
 | 
			
		||||
					if (i < 9)
 | 
			
		||||
						enableSurfaceOption(_planet[i], SO_USE_LIGHTING);
 | 
			
		||||
				for (i = 0; i < 28; ++i) {
 | 
			
		||||
					enableSurfaceOption(_obj[i].s, SO_USE_LIGHTING);
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				disableSurfaceOption(_sun, SO_USE_LIGHTING);
 | 
			
		||||
				for (i = 0; i < 18; ++i) {
 | 
			
		||||
					disableSurfaceOption(_moon[i], SO_USE_LIGHTING);
 | 
			
		||||
					if (i < 9)
 | 
			
		||||
						disableSurfaceOption(_planet[i], SO_USE_LIGHTING);
 | 
			
		||||
				for (i = 0; i < 28; ++i) {
 | 
			
		||||
					disableSurfaceOption(_obj[i].s, SO_USE_LIGHTING);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
@ -696,20 +589,10 @@ void sortie(void) {
 | 
			
		||||
	int i;
 | 
			
		||||
	Mix_CloseAudio();
 | 
			
		||||
	Mix_Quit();
 | 
			
		||||
	if (_sun) {
 | 
			
		||||
		freeSurface(_sun);
 | 
			
		||||
		_sun = NULL;
 | 
			
		||||
	}
 | 
			
		||||
	for (i = 0; i < 18; ++i) {
 | 
			
		||||
		if(_moon[i]){
 | 
			
		||||
			freeSurface(_moon[i]);
 | 
			
		||||
			_moon[i] = NULL;
 | 
			
		||||
		}
 | 
			
		||||
		if (i < 9) {
 | 
			
		||||
			if (_planet[i]){
 | 
			
		||||
				freeSurface(_planet[i]);
 | 
			
		||||
				_planet[i] = NULL;
 | 
			
		||||
			}
 | 
			
		||||
	for (i = 0; i < 28; ++i) {
 | 
			
		||||
		if(_obj[i].s){
 | 
			
		||||
			freeSurface(_obj[i].s);
 | 
			
		||||
			_obj[i].s = NULL;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (bsound)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user