Ignore:
Timestamp:
06/29/13 20:32:29 (12 years ago)
Author:
epyon
Message:
  • program - set_opt_uniform added
  • example extended to feature per-pixel lighting, self-illumination mapping, specular mapping and dual custom colors mapping
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/objload_test/objload_test.cc

    r137 r139  
    2424        ~application();
    2525protected:
    26         nv::device* m_device;
    27         nv::window* m_window;
    28         nv::texture2d* m_texture;
    29         nv::clear_state m_clear_state;
    30         nv::render_state m_render_state;
     26        nv::device*       m_device;
     27        nv::window*       m_window;
     28        nv::texture2d*    m_diffuse;
     29        nv::texture2d*    m_specular;
     30        nv::clear_state   m_clear_state;
     31        nv::render_state  m_render_state;
    3132
    3233        nv::vertex_array* m_va;
     
    4041        m_device = new nv::gl_device();
    4142        m_window = m_device->create_window( 800, 600 );
     43        nv::sampler sampler( nv::sampler::LINEAR, nv::sampler::REPEAT );
    4244       
    4345        nv::image_data* sprites = m_device->create_image_data( "diffuse.png" );
    44         nv::sampler sampler( nv::sampler::LINEAR, nv::sampler::REPEAT );
    45         m_texture = m_device->create_texture2d( sprites->get_size(), nv::RGBA, nv::UBYTE, sampler, (void*)sprites->get_data() );
     46        m_diffuse  = m_device->create_texture2d( sprites->get_size(), nv::RGBA, nv::UBYTE, sampler, (void*)sprites->get_data() );
     47        delete sprites;
     48
     49        sprites    = m_device->create_image_data( "specular.png" );
     50        m_specular = m_device->create_texture2d( sprites->get_size(), nv::RGBA, nv::UBYTE, sampler, (void*)sprites->get_data() );
    4651        delete sprites;
    4752
     
    8691                glm::mat4 projection = glm::perspective(60.0f, 1.0f*800.0f/600.0f, 0.1f, 1000.0f);
    8792                glm::mat4 mv         = view * model;
     93                glm::mat3 normal_matrix = glm::transpose(glm::inverse(glm::mat3(mv)));
    8894
    89                 m_texture->bind( 0 );
     95                m_diffuse->bind( 0 );
     96                m_specular->bind( 1 );
     97                m_program->set_opt_uniform( "nv_m_modelview", mv );
     98                m_program->set_opt_uniform( "nv_m_projection", projection );
     99                m_program->set_opt_uniform( "nv_m_normal", normal_matrix );
    90100                m_program->set_uniform( "matrix_mvp", projection * mv );
    91                 m_program->set_uniform( "light", glm::vec3(8.5, 8.5, 0) );
    92                 m_program->set_uniform( "tex", 0 );
     101                m_program->set_uniform( "light_position", glm::vec3(12.0, 12.0, 0) );
     102                m_program->set_uniform( "light_diffuse",  glm::vec4(0.7,0.7,0.7,1.0) );
     103                m_program->set_uniform( "light_specular", glm::vec4(1.0,1.0,1.0,1.0) );
     104                m_program->set_uniform( "custom_color_1", glm::vec3(1.0,0.0,0.0) );
     105                m_program->set_uniform( "custom_color_2", glm::vec3(0.0,0.0,1.0) );
     106                m_program->set_uniform( "diffuse", 0 );
     107                m_program->set_uniform( "specular", 1 );
    93108                m_window->get_context()->draw( nv::TRIANGLES, m_render_state, m_program, m_va, m_count * 3 );
    94109                m_window->swap_buffers();
     
    127142        delete m_program;
    128143        delete m_mesh;
    129         delete m_texture;
     144        delete m_diffuse;
     145        delete m_specular;
    130146        delete m_window;
    131147        delete m_device;
Note: See TracChangeset for help on using the changeset viewer.