void templateAppInit(int width, int height)
{
    GFX_start();
    glViewport(0.0f, 0.0f, width, height);
    GFX_set_matrix_mode(PROJECTION_MATRIX);
    GFX_load_identity();
    GFX_set_perspective(45.0f, (float)width / (float)height, 0.1f, 100.0f, -90.0f);
    obj = OBJ_load(OBJ_FILE, 1);
    unsigned int i = 0;
    while (i != obj->n_objmesh) {
	OBJ_build_mesh(obj, i);
	OBJ_free_mesh_vertex_data(obj, i);
	++i;
    }
    i = 0;
    while (i != obj->n_texture) {
	OBJ_build_texture(obj, i, obj->texture_path, TEXTURE_MIPMAP, TEXTURE_FILTER_2X, 0.0f);
	++i;
    }
    i = 0;
    while (i != obj->n_objmaterial) {
	MEMORY *fragment_shader = mopen((char *)"fragment.glsl", 1);
	MEMORY *vertex_shader = mopen((char *)"vertex.glsl", 1);
	OBJMATERIAL *objmaterial = &obj->objmaterial[i];
	OBJ_build_material(obj, i, NULL);
	if (objmaterial->dissolve == 1.0f)
	    minsert(fragment_shader, (char *)"#define SOLID_OBJECT\n", 0);
	else if (!objmaterial->dissolve)
	    minsert(fragment_shader, (char *)"#define ALPHA_TESTED_OBJECT\n", 0);
	else
	    minsert(fragment_shader, (char *)"#define TRANSPARENT_OBJECT\n", 0);
	if (objmaterial->illumination_model) {
	    minsert(vertex_shader, (char *)"#define LIGHTING_SHADER\n", 0);
	    minsert(fragment_shader, (char *)"#define LIGHTING_SHADER\n", 0);
	}
	objmaterial->program = PROGRAM_init(objmaterial->name);
	objmaterial->program->vertex_shader = SHADER_init((char *)"vertex", GL_VERTEX_SHADER);
	objmaterial->program->fragment_shader = SHADER_init((char *)"fragment", GL_FRAGMENT_SHADER);
	SHADER_compile(objmaterial->program->vertex_shader, (char *)vertex_shader->buffer, 1);
	SHADER_compile(objmaterial->program->fragment_shader, (char *)fragment_shader->buffer, 1);
	PROGRAM_set_bind_attrib_location_callback(objmaterial->program, program_bind_attrib_location);
	PROGRAM_link(objmaterial->program, 1);
	OBJ_set_draw_callback_material(obj, i, material_draw_callback);
	mclose(fragment_shader);
	mclose(vertex_shader);
	++i;
    }
}
Exemplo n.º 2
0
void templateAppInit( int width, int height ) {

	atexit( templateAppExit );

	GFX_start();

	glViewport( 0.0f, 0.0f, width, height );
	
	glGetIntegerv( GL_VIEWPORT, viewport_matrix );
	
	vec4 color = { 1.0f, 1.0f, 1.0f, 1.0f };
	
	light = LIGHT_create_directional( ( char * )"point", &color, 45.0f, 0.0f, 0.0f );
	
	
	obj = ( OBJ * ) calloc( 1, sizeof( OBJ ) );
	
	OBJ_load_mtl( obj, MTL_FILE, 1 );
	
	unsigned int i = 0;
	
	while( i != obj->n_texture ) { 

		OBJ_build_texture( obj,
						   i,
						   obj->texture_path,
						   TEXTURE_MIPMAP | TEXTURE_CLAMP | TEXTURE_16_BITS,
						   TEXTURE_FILTER_3X,
						   0.0f );
		++i;
	}


	i = 0;
	while( i != obj->n_program ) { 
		
		OBJ_build_program( obj,
						   i,
						   program_bind_attrib_location,
						   NULL,
						   1,
						   obj->program_path );
		++i;
	}


	i = 0;
	while( i != obj->n_objmaterial ) { 

		OBJ_build_material( obj, i, NULL );
		
		OBJ_set_draw_callback_material( obj, i, material_draw );
		
		++i;
	}
	

	md5 = MD5_load_mesh( MD5_MESH, 1 );

	MD5_optimize( md5, 128 );

	MD5_build( md5 );

	i = 0;
	while( i != md5->n_mesh ) {

		MD5MESH *md5mesh = &md5->md5mesh[ i ];

		MD5_set_mesh_material( md5mesh,
							   OBJ_get_material( obj,
												 md5mesh->shader,
												 0 ) );
		++i;
	}
	
	
	MD5_load_action( md5,
					 ( char * )"idle",
					 ( char * )"bob_idle.md5anim",
					 1 );
					 
	idle = MD5_get_action( md5, ( char * )"idle", 0 );

	MD5_set_action_fps( idle, 24.0f );

	//MD5_action_play( idle,
	//				 MD5_METHOD_FRAME,
	//				 1 );

	//MD5_action_play( idle,
	//				 MD5_METHOD_LERP,
	//				 1 );

	MD5_action_play( idle,
					 MD5_METHOD_SLERP,
					 1 );
	
	MD5_free_mesh_data( md5 );

	glDisable( GL_CULL_FACE );	
}
Exemplo n.º 3
0
void templateAppInit( int width, int height ) {

	atexit( templateAppExit );

	GFX_start();

	glViewport( 0.0f, 0.0f, width, height );

	GFX_set_matrix_mode( PROJECTION_MATRIX );
	GFX_load_identity();
	GFX_set_perspective( 45.0f,
						 ( float )width / ( float )height,
						 0.1f,
						 100.0f,
						 0.0f );

	obj = OBJ_load( OBJ_FILE, 1 );

	unsigned int i = 0;

	while( i != obj->n_objmesh ) {

		console_print( "%s: %d: GL_TRIANGLES\n",
					   obj->objmesh[ i ].name,
					   obj->objmesh[ i ].objtrianglelist[ 0 ].n_indice_array );

		OBJ_optimize_mesh( obj, i, 128 );

		console_print( "%s: %d: GL_TRIANGLE_STRIP\n",
					   obj->objmesh[ i ].name,
					   obj->objmesh[ i ].objtrianglelist[ 0 ].n_indice_array );

		OBJ_build_mesh( obj, i );

		OBJ_free_mesh_vertex_data( obj, i );

		++i;
	}	


	i = 0;
	while( i != obj->n_texture ) { 

		OBJ_build_texture( obj,
						   i,
						   obj->texture_path,
						   TEXTURE_MIPMAP | TEXTURE_16_BITS | TEXTURE_16_BITS_5551,
						   TEXTURE_FILTER_2X,
						   0.0f );
		++i;
	}	


	i = 0;

	while( i != obj->n_objmaterial ) {
	
		OBJ_build_material( obj,
							i,
							PROGRAM_create( ( char * )"default",
											VERTEX_SHADER,
											FRAGMENT_SHADER,
											1,
											1,
											program_bind_attrib_location,
											NULL ) );
		
		OBJ_set_draw_callback_material( obj, i, material_draw_callback );
		
		++i;
	}
}