Changeset 239 for trunk/tests/md3_test
- Timestamp:
- 05/17/14 02:35:19 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/md3_test/md3_test.cc
r231 r239 18 18 #include <nv/time.hh> 19 19 #include <nv/string.hh> 20 #include <nv/interface/mesh.hh>21 20 #include <glm/gtx/rotate_vector.hpp> 22 21 #include <glm/gtc/matrix_access.hpp> … … 43 42 { 44 43 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(); 46 46 } 47 47 delete loader; … … 50 50 NV_PROFILE("create_mesh"); 51 51 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 ); 53 53 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 ); 55 55 } 56 56 … … 67 67 } 68 68 69 void update( nv::uint32 ms )69 void update( nv::uint32 ms, nv::program* program ) 70 70 { 71 71 m_mesh->update( ms ); 72 m_mesh->update( program ); 72 73 } 73 74 … … 79 80 } 80 81 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 92 82 ~mesh_part() 93 83 { 94 delete m_data; 84 delete m_tag_map; 85 delete m_mesh_data; 95 86 delete m_mesh; 96 87 } 97 88 98 89 private: 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; 101 93 }; 102 94 … … 113 105 nv::texture2d* m_diffuse; 114 106 nv::texture2d* m_diffuse_weapon; 107 115 108 nv::clear_state m_clear_state; 116 109 nv::render_state m_render_state; 110 nv::scene_state m_scene_state; 117 111 118 112 mesh_part* m_torso; … … 120 114 mesh_part* m_head; 121 115 mesh_part* m_weapon; 122 nv::program* 116 nv::program* m_program; 123 117 }; 124 118 … … 182 176 ticks = m_device->get_ticks(); 183 177 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 ); 186 180 { 187 181 NV_PROFILE( "clear" ); … … 197 191 glm::vec3 eye = glm::rotate( source, (ticks / 20.f), glm::vec3( 0.0,1.0,0.0 ) ); 198 192 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); 201 195 202 196 m_diffuse->bind( 0 ); 203 m_program->set_opt_uniform( "nv_m_projection", projection );204 197 m_program->set_uniform( "light_position", glm::vec3(120.0, 120.0, 0) ); 205 198 m_program->set_uniform( "light_diffuse", glm::vec4(1.0,1.0,1.0,1.0) ); 206 199 m_program->set_uniform( "light_specular", glm::vec4(1.0,1.0,1.0,1.0) ); 207 m_program->set_uniform( "diffuse", 0 );208 200 } 209 201 … … 211 203 NV_PROFILE( "draw" ); 212 204 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() ); 214 208 215 209 //model = m_legs->get_transform( "tag_torso", last_legs_frame, legs_frame, legs_interpolate ); 216 210 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() ); 218 213 219 214 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() ); 221 217 222 218 glm::mat4 weapon = model * m_torso->get_transform( "tag_weapon" ); //, last_torso_frame, torso_frame, torso_interpolate ); 219 m_scene_state.set_model( weapon ); 223 220 m_diffuse_weapon->bind( 0 ); 224 m_w eapon->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() ); 225 222 226 223 }
Note: See TracChangeset
for help on using the changeset viewer.