Ignore:
Timestamp:
05/17/14 02:35:19 (11 years ago)
Author:
epyon
Message:
  • massive update of mesh handling
  • universal mesh handling routines
  • removed a lot of legacy code
  • significantly streamlined MD5 loading
  • all tests updated to new features
File:
1 edited

Legend:

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

    r231 r239  
    1818#include <nv/time.hh>
    1919#include <nv/string.hh>
    20 #include <nv/interface/mesh.hh>
    2120#include <glm/gtx/rotate_vector.hpp>
    2221#include <glm/gtc/matrix_access.hpp>
     
    4342                {
    4443                        NV_PROFILE("create_mesh_data");
    45                         m_data      = loader->release_mesh_data();
     44                        m_mesh_data = loader->release_mesh_data();
     45                        m_tag_map   = loader->create_tag_map();
    4646                }
    4747                delete loader;
     
    5050                        NV_PROFILE("create_mesh");
    5151                        if ( GPU_ANIMATION )
    52                                 m_mesh      = new nv::keyframed_mesh_gpu( window->get_context(), m_data, program );
     52                                m_mesh      = new nv::keyframed_mesh_gpu( window->get_context(), m_mesh_data, m_tag_map, program );
    5353                        else
    54                                 m_mesh      = new nv::keyframed_mesh_cpu( window->get_context(), m_data );
     54                                m_mesh      = new nv::keyframed_mesh_cpu( window->get_context(), m_mesh_data, m_tag_map );
    5555                }
    5656
     
    6767        }
    6868
    69         void update( nv::uint32 ms )
     69        void update( nv::uint32 ms, nv::program* program )
    7070        {
    7171                m_mesh->update( ms );
     72                m_mesh->update( program );
    7273        }
    7374
     
    7980        }
    8081
    81         void draw( nv::context* c, nv::program* program, nv::render_state& rstate, const glm::mat4& m, const glm::mat4& v, const glm::mat4& p )
    82         {
    83                 NV_PROFILE( "mesh-draw" );
    84                 glm::mat4 mv = v * m;
    85                 program->set_opt_uniform( "nv_m_modelview", mv );
    86                 program->set_opt_uniform( "nv_m_normal", glm::transpose(glm::inverse(glm::mat3(mv))) );
    87                 program->set_uniform( "matrix_mvp", p * mv );
    88                
    89                 c->draw( rstate, program, m_mesh );
    90         }
    91 
    9282        ~mesh_part()
    9383        {
    94                 delete m_data;
     84                delete m_tag_map;
     85                delete m_mesh_data;
    9586                delete m_mesh;
    9687        }
    9788
    9889private:
    99         nv::mesh_data*           m_data;
    100         nv::keyframed_mesh*      m_mesh;
     90        nv::tag_map*        m_tag_map;
     91        nv::mesh_data*      m_mesh_data;
     92        nv::keyframed_mesh* m_mesh;
    10193};
    10294
     
    113105        nv::texture2d*    m_diffuse;
    114106        nv::texture2d*    m_diffuse_weapon;
     107
    115108        nv::clear_state   m_clear_state;
    116109        nv::render_state  m_render_state;
     110        nv::scene_state   m_scene_state;
    117111
    118112        mesh_part* m_torso;
     
    120114        mesh_part* m_head;
    121115        mesh_part* m_weapon;
    122         nv::program*      m_program;
     116        nv::program* m_program;
    123117};
    124118
     
    182176                ticks      = m_device->get_ticks();
    183177                nv::uint32 elapsed = ticks - last_ticks;
    184                 m_torso->update( elapsed );
    185                 m_legs->update( elapsed );
     178                m_torso->update( elapsed, m_program );
     179                m_legs->update( elapsed, m_program );
    186180                {
    187181                        NV_PROFILE( "clear" );
     
    197191                        glm::vec3 eye = glm::rotate( source, (ticks / 20.f), glm::vec3( 0.0,1.0,0.0 ) );
    198192
    199                         view       = glm::lookAt(eye + move, glm::vec3(0.0f, 0.0f, 0.0f) + move, glm::vec3(0.0, 1.0, 0.0));
    200                         projection = glm::perspective(60.0f, 1.0f*800.0f/600.0f, 0.1f, 1000.0f);
     193                        m_scene_state.get_camera().set_lookat(eye + move, glm::vec3(0.0f, 0.0f, 0.0f) + move, glm::vec3(0.0, 1.0, 0.0));
     194                        m_scene_state.get_camera().set_perspective(60.0f, 1.0f*800.0f/600.0f, 0.1f, 1000.0f);
    201195
    202196                        m_diffuse->bind( 0 );
    203                         m_program->set_opt_uniform( "nv_m_projection", projection );
    204197                        m_program->set_uniform( "light_position", glm::vec3(120.0, 120.0, 0) );
    205198                        m_program->set_uniform( "light_diffuse",  glm::vec4(1.0,1.0,1.0,1.0) );
    206199                        m_program->set_uniform( "light_specular", glm::vec4(1.0,1.0,1.0,1.0) );
    207                         m_program->set_uniform( "diffuse", 0 );
    208200                }
    209201
     
    211203                        NV_PROFILE( "draw" );
    212204                        glm::mat4 model      = glm::mat4(1.0f);
    213                         m_legs->draw( m_window->get_context(), m_program, m_render_state, model, view, projection );
     205
     206                        m_scene_state.set_model( model );
     207                        m_window->get_context()->draw( m_render_state, m_scene_state, m_program, m_legs->get_mesh() );
    214208
    215209                        //model = m_legs->get_transform( "tag_torso", last_legs_frame, legs_frame, legs_interpolate );
    216210                        model = m_legs->get_transform( "tag_torso" );
    217                         m_torso->draw( m_window->get_context(), m_program, m_render_state, model, view, projection );
     211                        m_scene_state.set_model( model );
     212                        m_window->get_context()->draw( m_render_state, m_scene_state, m_program, m_torso->get_mesh() );
    218213
    219214                        glm::mat4 head = model * m_torso->get_transform( "tag_head" ); //, last_torso_frame, torso_frame, torso_interpolate );
    220                         m_head->draw( m_window->get_context(), m_program, m_render_state, head, view, projection );
     215                        m_scene_state.set_model( head );
     216                        m_window->get_context()->draw( m_render_state, m_scene_state, m_program, m_head->get_mesh() );
    221217
    222218                        glm::mat4 weapon = model * m_torso->get_transform( "tag_weapon" ); //, last_torso_frame, torso_frame, torso_interpolate );
     219                        m_scene_state.set_model( weapon );
    223220                        m_diffuse_weapon->bind( 0 );
    224                         m_weapon->draw( m_window->get_context(), m_program, m_render_state, weapon, view, projection );
     221                        m_window->get_context()->draw( m_render_state, m_scene_state, m_program, m_weapon->get_mesh() );
    225222
    226223                }
Note: See TracChangeset for help on using the changeset viewer.