コード例 #1
0
  void draw(vec3d camera_position, vec3d light_position)
  {
		ALLEGRO_STATE previous_state;
		ALLEGRO_TRANSFORM transform;

		
		if (shader && shader_applies_transform)
		{
			// construct our entity's transform
			place.build_transform(&transform);

			// Now apply it to the shader
			shader->use();
			Shader::set_vec3("camera_position", camera_position);
			Shader::set_vec3("light_position", light_position);
			Shader::set_mat4("position_transform", &transform);

			Shader::set_bool("reflecting", cube_map_reflecting);

			Shader::set_sampler("diffuse_texture", diffuse_texture, 2);
			Shader::set_sampler("specular_texture", specular_texture, 3);
			Shader::set_sampler("normal_texture", normal_texture, 4);
			Shader::set_sampler_cube("cube_map_A", cube_map_A, 5);
			Shader::set_sampler_cube("cube_map_B", cube_map_B, 6);
		}
		else
		{
			// when not using the shader, we'll need to 
			// apply the transform directly here
			al_store_state(&previous_state, ALLEGRO_STATE_TRANSFORM);
			al_identity_transform(&transform);
			al_use_transform(&transform);
			place.start_transform();

			// also, we set the texture on this model directly
			if (diffuse_texture) model->set_texture(diffuse_texture);
		}



		// actually draw our model here
		if (model) model->draw();



		if (shader && shader_applies_transform)
		{
			Shader::stop();
		}
		else
		{
			place.restore_transform();
			al_restore_state(&previous_state);
		}
  }
コード例 #2
0
 virtual void draw()
 {
    if (!model) return;
    model->set_texture(texture);
    model->draw();
 }