Changeset 239 for trunk/tests/md2_test/md2_test.cc
- Timestamp:
- 05/17/14 02:35:19 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/md2_test/md2_test.cc
r231 r239 1 1 #include <nv/common.hh> 2 #include <iomanip>3 2 #include <nv/gfx/keyframed_mesh.hh> 4 3 #include <nv/interface/vertex_buffer.hh> … … 18 17 #include <nv/time.hh> 19 18 #include <nv/string.hh> 20 #include <nv/interface/mesh.hh>21 19 #include <glm/gtx/rotate_vector.hpp> 22 #include <glm/gtc/matrix_access.hpp>23 #include <glm/gtx/matrix_interpolation.hpp>24 25 class mesh_part26 {27 public:28 mesh_part( const std::string& path, nv::program* program, nv::window* window )29 {30 NV_PROFILE("mesh_construct");31 nv::md2_loader* loader;32 {33 NV_PROFILE("loader->load");34 nv::c_file_system fs;35 nv::stream* mesh_file = fs.open( path.c_str() );36 loader = new nv::md2_loader();37 loader->load( *mesh_file );38 m_mesh_data = loader->release_mesh_data();39 delete mesh_file;40 delete loader;41 }42 43 {44 NV_PROFILE("create_mesh");45 m_mesh = new nv::keyframed_mesh_gpu( window->get_context(), m_mesh_data, program );46 }47 48 }49 50 void setup_animation( nv::uint32 start, nv::uint32 stop, nv::uint32 fps, bool loop )51 {52 m_mesh->setup_animation( start, stop, fps, loop );53 }54 55 void update( nv::uint32 ms )56 {57 m_mesh->update( ms );58 }59 60 nv::mesh_interface* get_mesh() { return m_mesh; }61 62 size_t get_max_frames()63 {64 return m_mesh->get_max_frames();65 }66 67 ~mesh_part()68 {69 delete m_mesh_data;70 delete m_mesh;71 }72 73 private:74 nv::mesh_data* m_mesh_data;75 nv::keyframed_mesh* m_mesh;76 };77 20 78 21 class application … … 87 30 nv::window* m_window; 88 31 nv::texture2d* m_diffuse; 32 nv::program* m_program; 33 89 34 nv::clear_state m_clear_state; 90 35 nv::render_state m_render_state; 36 nv::scene_state m_scene_state; 91 37 92 mesh_part* m_mesh;93 nv:: program* m_program;38 nv::mesh_data* m_mesh_data; 39 nv::keyframed_mesh* m_mesh; 94 40 }; 95 41 … … 119 65 NV_PROFILE( "app_initialize" ); 120 66 m_program = m_device->create_program( nv::slurp( "obj.vert" ), nv::slurp( "obj.frag" ) ); 121 m_mesh = new mesh_part( "data/manc.md2", m_program, m_window ); 67 68 nv::md2_loader* loader; 69 { 70 NV_PROFILE("loader->load"); 71 nv::c_file_system fs; 72 nv::stream* mesh_file = fs.open( "data/manc.md2" ); 73 loader = new nv::md2_loader(); 74 loader->load( *mesh_file ); 75 m_mesh_data = loader->release_mesh_data(); 76 delete mesh_file; 77 delete loader; 78 } 79 80 { 81 NV_PROFILE("create_mesh"); 82 m_mesh = new nv::keyframed_mesh_gpu( m_window->get_context(), m_mesh_data, nullptr, m_program ); 83 } 84 122 85 return true; 123 86 } … … 128 91 NV_PROFILE( "app_run" ); 129 92 int keypress = 0; 130 131 glm::vec3 move( 0, 25.f, 0 );132 93 133 94 nv::uint32 ticks = m_device->get_ticks(); … … 142 103 ticks = m_device->get_ticks(); 143 104 nv::uint32 elapsed = ticks - last_ticks; 105 m_window->get_context()->clear( m_clear_state ); 144 106 m_mesh->update( elapsed ); 145 { 146 NV_PROFILE( "clear" ); 147 m_window->get_context()->clear( m_clear_state ); 148 } 107 glm::vec3 eye = glm::rotate( glm::vec3( 100.0f, 25.0f, 0.0f ), (ticks / 20.f), glm::vec3( 0.0,1.0,0.0 ) ); 149 108 150 glm::mat4 view; 151 glm::mat4 projection; 152 { 153 NV_PROFILE( "update_sh" ); 109 m_scene_state.set_model( nv::mat4(1.0f) ); 110 m_scene_state.get_camera().set_lookat(eye, glm::vec3(0.0f, 25.0f, 0.0f), glm::vec3(0.0, 1.0, 0.0)); 111 m_scene_state.get_camera().set_perspective(60.0f, 1.0f*800.0f/600.0f, 0.1f, 1000.0f); 154 112 155 glm::vec3 source( 100.0f, 0.0f, 0.0f ); 156 glm::vec3 eye = glm::rotate( source, (ticks / 20.f), glm::vec3( 0.0,1.0,0.0 ) ); 113 m_diffuse->bind( 0 ); 114 m_program->set_opt_uniform( "light_position", glm::vec3(120.0, 120.0, 0) ); 115 m_program->set_opt_uniform( "light_diffuse", glm::vec4(1.0,1.0,1.0,1.0) ); 116 m_program->set_opt_uniform( "light_specular", glm::vec4(1.0,1.0,1.0,1.0) ); 117 m_mesh->update( m_program ); 118 m_window->get_context()->draw( m_render_state, m_scene_state, m_program, m_mesh ); 119 m_window->swap_buffers(); 157 120 158 view = glm::lookAt(eye + move, glm::vec3(0.0f, 0.0f, 0.0f) + move, glm::vec3(0.0, 1.0, 0.0)); 159 projection = glm::perspective(60.0f, 1.0f*800.0f/600.0f, 0.1f, 1000.0f); 160 161 m_diffuse->bind( 0 ); 162 m_program->set_opt_uniform( "nv_m_projection", projection ); 163 m_program->set_uniform( "light_position", glm::vec3(120.0, 120.0, 0) ); 164 m_program->set_uniform( "light_diffuse", glm::vec4(1.0,1.0,1.0,1.0) ); 165 m_program->set_uniform( "light_specular", glm::vec4(1.0,1.0,1.0,1.0) ); 166 m_program->set_uniform( "diffuse", 0 ); 167 } 168 169 { 170 NV_PROFILE( "draw" ); 171 glm::mat4 model = glm::mat4(1.0f); 172 glm::mat4 mv = view * model; 173 m_program->set_opt_uniform( "nv_m_modelview", mv ); 174 m_program->set_opt_uniform( "nv_m_normal", glm::transpose(glm::inverse(glm::mat3(mv))) ); 175 m_program->set_uniform( "matrix_mvp", projection * mv ); 176 m_mesh->get_mesh()->update( m_program ); 177 m_window->get_context()->draw( m_render_state, m_program, m_mesh->get_mesh() ); 178 } 179 180 { 181 NV_PROFILE( "swap" ); 182 m_window->swap_buffers(); 183 } 184 185 { 186 NV_PROFILE( "pollevent" ); 187 nv::io_event event; 188 while(m_window->poll_event(event)) 189 { 190 switch (event.type) 121 nv::io_event event; 122 while(m_window->poll_event(event)) 123 { 124 switch (event.type) 125 { 126 case nv::EV_QUIT: 127 keypress = 1; 128 break; 129 case nv::EV_KEY: 130 if (event.key.pressed) 191 131 { 192 case nv::EV_QUIT: 193 keypress = 1; 194 break; 195 case nv::EV_KEY: 196 if (event.key.pressed) 132 switch (event.key.code) 197 133 { 198 switch (event.key.code) 199 { 200 case nv::KEY_ESCAPE : keypress = 1; break; 201 case nv::KEY_F1 : nv::profiler::pointer()->log_report(); break; 202 default: break; 203 } 134 case nv::KEY_ESCAPE : keypress = 1; break; 135 case nv::KEY_F1 : nv::profiler::pointer()->log_report(); break; 136 default: break; 204 137 } 205 break;206 default: break;207 138 } 139 break; 140 default: break; 208 141 } 209 142 } … … 216 149 { 217 150 delete m_program; 151 delete m_mesh_data; 218 152 delete m_mesh; 219 153 delete m_diffuse;
Note: See TracChangeset
for help on using the changeset viewer.